在我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
。