![](/img/trans.png)
[英]How to rename all ltree column data that equals a specific string? 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.