簡體   English   中英

在PostgreSQL中重命名具有特定列名的所有表中的所有列?

[英]Rename all columns from all tables with specific column name in PostgreSQL?

有沒有辦法可以在PostgreSQL數據庫的所有模式中將所有名為'location'的列名重命名為'location_name'?

我是SQL的新手,我知道有一個ALTER TABLE命令,但不知道是否有可能以某種方式遍歷所有表?

您需要動態SQL,使用匿名PL / pgSQL塊以自動方式執行此操作:

do
$$
declare
  l_rec record;
begin
  for l_rec in (select table_schema, table_name, column_name 
                from information_schema.columns 
                where table_schema = 'public' 
                  and column_name = 'location') loop
     execute format ('alter table %I.%I rename column %I to %I_name', l_rec.table_schema, l_rec.table_name, l_rec.column_name, l_rec.column_name);
  end loop;
end;
$$

如果您有多個模式或者您的表不在public模式中,請將where table_schema = 'public'的條件替換為適當的限制。

如果您具有超級用戶權限,則可以在系統目錄中的一次掃描中進行更改:

UPDATE pg_attribute
SET attname = 'location_name'
WHERE attname = 'location';

我認為你得到的最接近的是運行這樣的東西:

SELECT FORMAT(
  'ALTER TABLE %I.%I.%I RENAME COLUMN %I TO %I;',
  catalog_name,
  schema_name,
  table_name,
  column_name,
  'location_name'
)
FROM information_schema.columns
WHERE column_name = 'location';

如果你在psql中運行它,你可以用\\gexec跟隨它,它應該工作。

您可以使用獲取數據庫中的所有location

SELECT * FROM information_schema.columns WHERE column_name = 'location';

並且可能使用一些編程語言來執行所有重命名查詢。 幾乎每個數據庫管理系統都有information_schema表(盡管它們有時被稱為/結構不同)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM