簡體   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