在我PostgreSQL 9.2
數據庫中存在具有混合案例名稱很多表,例如重命名大小寫混合的表在單個查詢
Tbl_Sales
,Tbl_Purch
,Tbl_logMnth
我想要做的就是
alter table "Table1" rename to table1
但如何以簡單的方式重命名我的數據庫中的所有混合大小寫表?
在我PostgreSQL 9.2
數據庫中存在具有混合案例名稱很多表,例如重命名大小寫混合的表在單個查詢
Tbl_Sales
,Tbl_Purch
,Tbl_logMnth
我想要做的就是
alter table "Table1" rename to table1
但如何以簡單的方式重命名我的數據庫中的所有混合大小寫表?
使用以下選擇來獲得與混合情況表(一個或多個)的名稱
SELECT table_name ucase,lower(table_name) lcase
FROM information_schema.tables
where table_type = 'BASE TABLE' and
table_schema = 'public' and
table_name ~ E'^[[:upper:]][^[:upper:]]'
PostgreSQL的字符串函數lower和information_schema.tables
,並使用PL/PGSQL SQL - DO重命名都表混合案例
do
$$
declare
rw record;
begin
for rw in
SELECT 'ALTER TABLE "'||t.ucase||'" RENAME to '||t.lcase||';' execme from (
SELECT table_name ucase, lower(table_name) lcase
FROM information_schema.tables
where table_type = 'BASE TABLE' and
table_schema = 'public' and
table_name ~ E'^[[:upper:]][^[:upper:]]')t
loop
execute rw.execme ;
end loop;
end;
$$
這是使用
ALTER TABLE名 重命名爲NEW_NAME
您最好的選擇可能是產生一系列動態SQL語句,在,比如說查詢, Python或查詢pg_tables
catalog。
然後,您可以遍歷您感興趣的模式列表(或者如果您想這樣做,所有這些列表,只要它們是用戶創建的 - 您應該避免使用任何pg_
其中包括Postgres本身),並檢查小寫名稱是否與當前名稱相同。如果它們不同,則可以生成重命名錶所需的ALTER TABLE
語句,然後執行它,確保您的更改爲COMMIT
。
sqlfiddle舉一個例子。
請注意我創建的foo
表是如何列在那裏的。
我建議按架構白名單,如public
和任何其他你想要的。例如,在小提琴中,您不想觸摸pg_catalog
和information_schema
模式中的任何內容。你也可以通過tableowner
進行過濾 - 例如,你可能想要避免使用者擁有的任何東西。
此外,請注意,創建表時,套管並不重要。如果表foo
已經存在,然後我嘗試創建Foo
,則會導致錯誤ERROR: relation "foo" already exists
。