標准的SQL是不區分大小寫的。但是PostgreSQL對於數據庫中對象的名字允許使用支持大小寫區分的定義和引用方法。方式就是在DDL中用雙引號把希望支持大小的對象名括起來。
比如希望創建一個叫AAA的表。如果用CREATE TABLE AAA (...);的話,創建出來的表實際上是aaa。
如果希望創建大寫的AAA表的話,就需要用CREATE TABLE "AAA" (...);這種雙引號的方式定義對象名。
這樣寫的缺點是查詢語句必須也使用雙引號的方式引用對象名。比如SELECT * FROM "AAA";否則PostgreSQL缺省會去找aaa這個對象,然后返回aaa不存在的錯誤。需要注意的是不僅僅是表可以這樣定義和引用,對PostgreSQL中的任意對象(比如列名,索引名等)都有效。
創建exec(sqlstring)
函數方便執行
CREATE OR REPLACE FUNCTION "public"."exec"("sqlstring" varchar) RETURNS "pg_catalog"."varchar" AS $BODY$ declare res varchar(50); BEGIN EXECUTE sqlstring; RETURN 'ok'; END $BODY$ LANGUAGE plpgsql VOLATILE COST 100
通過條件拼接SQL,
-- 根據條件查詢所有大寫的column select * from information_schema.columns where table_schema='public' and table_name<>'pg_stat_statements' and column_name <> lower(column_name); -- 修改條件后,通過下列語句轉換column_name中的大寫字母 SELECT exec('alter table "' || table_name || '" rename column "' || column_name || '" to ' || lower( column_name ) || ';') FROM information_schema.COLUMNS WHERE table_schema = 'public' AND column_name <> lower(column_name) AND table_name <> 'pg_stat_statements' AND table_name = 'prescribe_state_copy1'; -- 查詢大寫的table_name SELECT * FROM information_schema.TABLES WHERE table_schema = 'public' AND table_catalog = 'Guns' AND table_name <> lower( table_name ); -- 修改表名中的大寫為小寫 SELECT exec ( 'alter table "' || table_name || '" rename to ' || lower( table_name ) || ';' ) FROM information_schema.tables WHERE table_schema='public' and table_catalog = 'Guns' and table_name <> lower(table_name);