繁体   English   中英

postgres 中的模式和触发器

[英]schemas and triggers in postgres

这是我的脚本:

CREATE SCHEMA IF NOT EXISTS {accountId};
CREATE TABLE IF NOT EXISTS {accountId}.{tableCommandsName}
(
    id              int         GENERATED ALWAYS AS IDENTITY,
    ts              timestamp   WITHOUT TIME ZONE NOT NULL,
    command         varchar     NOT NULL,
    ts_executed     timestamp   WITHOUT TIME ZONE,
    output          varchar
);

CREATE INDEX IF NOT EXISTS idx_commands ON {accountId}.{tableCommandsName} (ts_executed) WHERE ts_executed IS NULL;

CREATE OR REPLACE VIEW {accountId}.pending_commands AS
    SELECT id, ts, command from {accountId}.{tableCommandsName} WHERE ts_executed IS NULL ORDER BY ts ASC;

CREATE OR REPLACE FUNCTION {accountId}.on_commands_change ()
    RETURNS trigger
    LANGUAGE 'plpgsql'
AS $BODY$
    DECLARE
      notification JSON;
    BEGIN
        notification = json_build_object(
            'table',TG_TABLE_NAME,
            'data', row_to_json(NEW));

        PERFORM pg_notify('datachange', notification::TEXT);
        RETURN NEW;
    END
$BODY$;

CREATE OR REPLACE TRIGGER {triggerName}
    AFTER INSERT ON {accountId}.{tableCommandsName}
    FOR EACH ROW EXECUTE PROCEDURE {accountId}.on_commands_change();

我的重点是:

创建或替换触发器 {triggerName}

在哪里

创建或替换触发器 {accountId}.{triggerName}

不会工作,但是

创建或替换触发器“{accountId}.{triggerName}”

会起作用,我不明白为什么。

其他所有内容前面都有架构名称,但触发器不需要它。

如果我不说,它仍然是在正确的模式中创建的。 是因为它与创建架构指令在同一执行期间吗?

从手册中引用

名称不能是模式限定的——触发器继承其表的模式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM