在我的PostgreSQL 9.2
数据库中,有许多表具有混合大小写的名称,例如
Tbl_Sales
,Tbl_Purch
,Tbl_logMnth
我想做的是
alter table "Table1" rename to table1
但是如何以简单的方式重命名数据库中的所有混合大小写表?
答案 0 :(得分:3)
这是要使用的查询
ALTER TABLE名称 重命名为new_name
答案 1 :(得分:2)
使用以下选项获取名称为
的混合个案的表格 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;
$$
答案 2 :(得分:0)
您最好的选择可能是通过查询pg_tables
catalog来生成一系列动态 SQL 语句,例如 Python 或类似语句。
然后,您可以遍历该列表以查找您感兴趣的模式(如果您想要这样做,则可以遍历所有模式,只要它们是用户创建的 - 您应该避免使用任何{{ 1}}其中,由 Postgres 本身管理的那些)并检查小写名称是否与当前名称相同。如果它们不同,您可以生成重命名表所需的pg_
语句,然后执行它,确保ALTER TABLE
您的更改。
sqlfiddle举了一个例子。
注意我创建的COMMIT
表是如何列在那里的。
我建议按照架构列出白名单,例如foo
以及您想要的任何其他人。例如,在小提琴中,您不希望触及public
或pg_catalog
模式中的任何内容。您也可以按information_schema
进行过滤 - 您可能希望避免使用 postgres 用户拥有的任何内容。
另外,请注意,在创建表时,外壳无关紧要。如果表格tableowner
已存在,然后我尝试创建foo
,则会产生错误Foo
。