将时间戳放入表的注释中

问题描述 投票:0回答:3

我定期在 PostgreSQL (9.4.1) 中重新创建一个表,就像这样:

DROP TABLE IF EXISTS test.foo;
CREATE TABLE test.foo AS
  SELECT * FROM test.dagi_kommune
  WHERE ST_Area(wkb_geometry) < 500;

我想向表格添加注释,说明表格的创建时间。创建基本评论没有问题,如下所示:

COMMENT ON TABLE test.foo IS 'Table create date: ';

我还可以生成一个独立的时间戳,像这样:

SELECT to_char(LOCALTIMESTAMP, 'YYYY-MM-DD HH:MI:SS');

但是如果我尝试将时间戳放入评论中,如下所示:

COMMENT ON TABLE test.foo IS to_char(LOCALTIMESTAMP, 'YYYY-MM-DD HH:MI:SS');

我收到以下回复:

ERROR:  syntax error at or near "to_char"
LINE 10: COMMENT ON TABLE test.foo IS to_char(LOCALTIMESTAMP, 'YYYY-M...
                                  ^

********** Error **********

ERROR: syntax error at or near "to_char"
SQL state: 42601
Character: 276

如何将当前的“日期和时间”标记到表的注释中?

postgresql timestamp dynamic-sql ddl postgresql-9.4
3个回答
9
投票

您必须将语句构建为动态 SQL 并执行。

DO
$do$
BEGIN
EXECUTE 'COMMENT ON TABLE b2 IS ''Table create date: '
     || to_char(LOCALTIMESTAMP, 'YYYY-MM-DD HH:MI:SS')
     || '''';
END
$do$

在这种情况下,普通串联是安全的,对于不安全的输入,请相应地使用

format()
。参见:

换行符是可选的。与脚本编写的单行代码相同:

DO $do$BEGIN EXECUTE 'COMMENT ON TABLE b2 IS ''Table create date: ' || to_char(LOCALTIMESTAMP, 'YYYY-MM-DD HH:MI:SS') || ''''; END $do$;

1
投票

如果您将使用

psql
执行命令,以下是使用 psql 变量添加时间戳的干净简洁的方法:

SELECT current_timestamp AS now
\gset
COMMENT ON TABLE test.foo IS :'now';

我向评论添加附加文本的首选方法如下,使用

\set
连接:

SELECT current_timestamp AS now
\gset
\set comment :now 'text'
COMMENT ON TABLE test.foo IS :'comment';

我还没有找到一种有效的方法来在 COMMENT 命令中连接另一个字符串,因为它需要一个字符串文字。


0
投票

强化 Spencer 的上述评论:

SELECT current_timestamp as dump_time
\gset
COMMENT ON SCHEMA my_schema IS 'Latest dump at: ':'dump_time';
© www.soinside.com 2019 - 2024. All rights reserved.