在使用postgres資料庫的過程中,遇到了表分割槽的問題。為了建立表分割槽,首先得建立分割槽表。首先想到的是寫個儲存函式,然後定時的建立分割槽表,然後再建立觸發器去操作分割槽表。但是在建立儲存函式時,怎麼把分割槽表的表名當作引數傳進儲存函式,然後在函式內部動態建立表。可是直接使用字串的表名不起作用。經研究,需要使用execute去執行,具體做法為:拼接乙個建立表的sql語句,然後用execute 執行sql語句,這樣建立表就完成了。詳細**如下:
create or replace function "public"."pro_partition_play_recond"(tablename varchar)
returns "pg_catalog"."void" as $body$declare
sqlstring varchar(1024);
start_date varchar default '2017-08-01';
end_date varchar default '2017-09-01';
index_str varchar ;
begin
sqlstring:= 'create table '|| tablename ||'(check(create_date >= ''' || start_date || ''' and create_date < ''' || end_date || ''')) inherits (md_play_recode);';
execute sqlstring;
index_str=tablename || '_create_date';
raise notice 'parameter is: %', index_str ;
sqlstring:='create index '||index_str||' on '|| tablename ||' (create_date);';
execute sqlstring;
end$body$
language 'plpgsql' volatile cost 100
;alter function "public"."pro_partition_play_recond"(tablename varchar) owner to "postgres";
說明:表名引數tablename 在拼接sql語句時,應用用:
'|| tablename ||',需要加引號時用這個
''' || start_date || '''。這是3個單引號。
呼叫如下:
select pro_partition_play_recond('md_play_recode_201708');
效果如下:
**如下:
create or replace function "public"."pro_partition_play_recond"(tablename varchar)
returns "pg_catalog"."void" as $body$declare
sqlstring varchar(1024);
start_date varchar default '2017-08-01';
end_date varchar default '2017-09-01';
index_str varchar ;
begin
sqlstring:= 'create table '|| tablename ||'(check(create_date >= ''' || start_date || ''' and create_date < ''' || end_date || ''')) inherits (md_play_recode);';
execute sqlstring;
index_str=tablename || '_create_date';
raise notice 'parameter is: %', index_str ;
sqlstring:='create index '||index_str||' on '|| tablename ||' (create_date);';
execute sqlstring;
end$body$
language 'plpgsql' volatile cost 100
;
PostgresSql常用一些函式方法
前言 開發小筆記。正文 strops string,substring 及position substring in string 函式類似於sqlserver中的charindex函式,用於獲取一段字串中的某個字元的下標索引,常配合substrin 函式擷取字串使用 round 分子 分母 num...
postgres sql 備份還原
postgresql自帶乙個客戶端pgadmin,裡面有個備份,恢復選項,也能對資料庫進行備份 恢復 還原 但最近發現資料庫慢慢龐大的時候,經常出錯,備份的檔案過程中出錯的機率那是相當大,手動調節灰常有限。所以一直尋找完美的備份恢復方案。用法 備份資料庫 指令如下 pg dump h 164.82....
postgres sql語句總結
建立表 create table tablename field1 integer not null peimary key,int,不為空,主鍵 field2 character varying 10 not null,char,10個位元組,不為空 field3 serial not null,...