将时间戳放在 TABLE 的评论中

Putting timestamp in a COMMENT ON TABLE

我经常在 PostgreSQL (9.4.1) 中重新创建一个 table,就像这样:

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

我想向 table 添加评论,说明 table 的创建时间。创建基本评论没有问题,像这样:

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

如何在 table 的评论中标记当前 'date and time'?

您必须以动态方式构建和执行语句 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()。参见:

  • Table name as a PostgreSQL function parameter

换行符是可选的。与脚本的一行相同:

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