2016-02-01 75 views
0

在我正在處理的PostgreSQL數據庫中,一半表有一個特定列,總是命名相同,類型爲varchar(5)。大小變得有點過於限制,我想將其更改爲varchar(10)。在多個表上改變列類型

我特殊情況下的表格數量實際上非常易於手動操作。但我想知道如何用更大的dbs查詢來編寫腳本。通常應該只需幾步即可。

  1. 確定架構中的所有表,然後(?)按條件篩選是否存在列。
  2. 爲每個表的ALTER TABLE語句發現

我對如何編寫識別模式中的所有表的查詢一些想法。但我不知道如何過濾它們。如果我沒有過濾它們,我認爲生成的alter table語句會中斷。

如果有人可以分享他們的知識,這將是偉大的。

+1

'select_table_name,column_name from information_schema.columns where table_catalog ='postgres'and table_schema ='public'and column_name ='foo''? – Abelisto

+0

當然,我用相應的列名替換'foo'。但是這個查詢不會爲我返回任何東西。 – vic

+0

好的,用db的名字替換'postgres',現在給我正確的表格。現在讓我們來看看是否可以找出如何基於該語句構建alter table語句... – vic

回答

1

感謝Abelisto提供了一些指導。最終,這是我做到的。

首先,我創建了一個查詢,依次創建ALTER TABLE語句。 MyDBMyColumn需要反映實際值。

SELECT 
    'ALTER TABLE '||columns.table_name||' ALTER COLUMN '||MyColumn||' TYPE varchar(20);' 
FROM 
    information_schema.columns 
WHERE 
    columns.table_catalog = 'MyDB' AND 
    columns.table_schema = 'public' AND 
    columns.column_name = 'MyColumn'; 

然後,它只是一個執行輸出作爲新查詢的問題。全做完了。