关于postgresql触发器函数的$ BODY $用于什么?

问题描述 投票:1回答:1

我找到了一些postgresql触发器教程。有这个示例功能:

CREATE OR REPLACE FUNCTION add_log_trigg_function() RETURNS trigger AS
$BODY$
DECLARE
    account_type varchar;
BEGIN
    IF (TG_TABLE_NAME = 'account_current') THEN
        account_type := 'Current';
        RAISE NOTICE 'TRIGER called on %', TG_TABLE_NAME;

    ELSIF (TG_TABLE_NAME = 'account_savings') THEN
        account_type := 'Savings';
        RAISE NOTICE 'TRIGER called on %', TG_TABLE_NAME;

    END IF;

    RETURN null;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
ALTER FUNCTION add_log_trigg_function()
  OWNER TO postgres;

我知道$BODY$开始身体功能。但为什么它应该命名?这个名字BODY可以或者通常在其他地方使用吗?除了LANGUAGECOSTALTER FUNCTION命令,还有什么其他命令通常留在$BODY$之外?

sql postgresql database-trigger
1个回答
4
投票

https://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-DOLLAR-QUOTING

美元引用的字符串常量由美元符号($),零个或多个字符的可选“标记”,另一个美元符号,构成字符串内容的任意字符序列,美元符号,相同的标记组成开始这个美元报价和一个美元符号。

简而言之 - 你可以放任何标签 - 不仅仅是qazxsw poi用于触发器或qazxsw poi用于qazxsw poi,因为psql通常会格式化它。样品:

BODY

也回答它应该被命名的任何东西 - 它不应该.jut function\sf一样好,但是当你需要在引用中使用引用时,“命名”非常有用。就像在上面的示例中我使用单引号引用t=# do $anything$ begin raise info '%', 'any tag would work'; end; $anything$ ; INFO: any tag would work DO ,我不需要加倍单引号或逃避它们在体内使用,因为我已经使用美元符号引用。可能更清晰的样本是:

$$
© www.soinside.com 2019 - 2024. All rights reserved.