【问题标题】:how to refer timestamp variable in pgsql function having select statement如何在具有select语句的pgsql函数中引用时间戳变量
【发布时间】:2015-10-12 11:17:27
【问题描述】:

您好我正在尝试编写一个 pgsql 函数,该函数将表数据复制到 csv 文件,并且在使用函数内部的变量值时遇到了困难,如下所示:

CREATE OR REPLACE  FUNCTION test3() RETURNS void
    LANGUAGE plpgsql
    AS $$
DECLARE
_currenttime timestamp := now();
BEGIN
copy (SELECT * FROM table1 WHERE createdtime < _currenttime - INTERVAL '1 days') TO '/tmp/table1.csv';
END
$$;

访问函数时出错:

select test3();

错误:列“_currenttime”不存在第 1 行:...py (SELECT * FROM table1 WHERE createdtime

请求您的帮助。

【问题讨论】:

  • 在错误输出中bpminstance指的是table1
  • 试试copy (SELECT * FROM table1 WHERE createdtime &lt; NOW() - interval '1 day') TO '/tmp/table1.csv';
  • 谢谢,我试过了,但是我后面还有其他语句,所以我需要在脚本中引用这个变量。
  • 我有一系列的复制命令,根据我存储在变量中的当前时间戳,我需要收集数据。以便所有表都基于该变量提供数据。我尝试了您的建议并得到了错误: \i /home/cust/test3.sql psql:/home/cust/createFunction_3.sql:69: ERROR: syntax error at or near ":=" LINE 15: ... FROM table1 WHERE createdtime

标签: postgresql sql-timestamp


【解决方案1】:
CREATE OR REPLACE  FUNCTION test3() RETURNS void
    LANGUAGE plpgsql
    AS $$
 DECLARE
_currenttime timestamp;
qry text;
BEGIN
_currenttime := NOW() - interval '1 day';
select 'copy (SELECT * FROM table1 WHERE createdtime < '''||_currenttime||''') TO ''/tmp/table1.csv''' into qry;
execute qry;
--codes
END
$$;

【讨论】:

  • 我试过了,执行函数没有错误,但没有数据复制到 csv 文件,知道吗?但是,如果我单独执行该命令,我会得到结果
  • 确定使用<_currenttime>:select test3();注意:当前存档时间是 2015-10-11 18:01:17.461973 错误:列“_currenttime”不存在第 1 行:...py (SELECT * FROM table1 WHERE createdtime
  • 使用 '||_currenttime||' 选择 test3();注意:当前存档时间为 2015-10-11 17:59:51.982964 错误:时间戳类型的输入语法无效:“||_currenttime||”第 1 行:...py (SELECT * FROM table1 WHERE createdtime
  • 变量似乎正在解析,但出现如下错误:select test3();注意:当前存档时间为 2015-10-11 19:10:37.398026 错误:在“19”或附近出现语法错误 第 1 行:...* FROM table1 WHERE createdtime
猜你喜欢
  • 2021-05-07
  • 2015-01-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2023-03-20
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多