在 Proc 中将日期附加到 table 名称

Append Date to a table name in Proc

我创建了一个函数来获取 yyyymmdd 格式的当前日期值。

create or replace function currdate() returns text as $$ select 'account_'||TO_CHAR(current_date , 'yyyymmdd');
$$ LANGUAGE sql;

现在我必须编写一个 Proc 来附加此日期 'yyyymmdd' 以创建将在该月的第一天和最后一天创建的快照 table。 我写了下面的 Proc

create or replace procedure proc_1() AS $$
declare 
dttoday text := currdate();
int_check int := checkint(); 
begin 
if int_check = 1 then 
create table **schema.snapshot_currdate** as (select * from schema1.original_table); end if;
end;
$$
language plpgsql;

创建 table 时:snapshot_currdate 我需要将其创建为名称 snapshot_yyyymmdd(执行日期) 声明的变量 int_check 是一个函数,用于检查它是否会在一个月的第一天或最后一天 return 整数值 1

有什么想法吗?

仅供参考,Postgres 9.1 已经停产四年了。 类似于:


currdate() returns text as $$ select 'account_'||TO_CHAR(current_date , 'yyyymmdd');
$$ LANGUAGE sql;

CREATE OR REPLACE PROCEDURE public.proc_1()
 LANGUAGE plpgsql
AS $procedure$
declare
dttoday text := currdate();
begin
EXECUTE 'create table '|| quote_ident('public')||'.'||quote_ident('snapshot_'||split_part(dttoday, '_', 2))||'()';
RAISE NOTICE '%', dttoday;
end;
$procedure$

split_part是因为currdate()returnsaccount_yyyymmdd而你说要snapshot_yyyymmdd。有关动态命令的更多信息,请参见此处:

https://www.postgresql.org/docs/current/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN