Postgresql 什么是'$$';用于PL/pgSQL中的

Postgresql 什么是'$$';用于PL/pgSQL中的,postgresql,plpgsql,quotes,dollar-sign,dollar-quoting,Postgresql,Plpgsql,Quotes,Dollar Sign,Dollar Quoting,作为PL/pgSQL的全新成员,双美元符号的含义是什么: 我猜,在中,布尔值作为$$返回,$$是一个占位符 最后一行有点神秘:$$LANGUAGE plpgsql STRICT IMMUTABLE 顺便问一下,最后一行是什么意思?是一个分隔符,$$用于指示函数定义的开始和结束位置。考虑下面, CREATE TABLE <name> <definition goes here> <options go here, eg: WITH OIDS> 创建表 cre

作为PL/pgSQL的全新成员,双美元符号的含义是什么:

我猜,在
中,布尔值作为$$
返回,
$$
是一个占位符

最后一行有点神秘:
$$LANGUAGE plpgsql STRICT IMMUTABLE


顺便问一下,最后一行是什么意思?

是一个分隔符,$$用于指示函数定义的开始和结束位置。考虑下面,

CREATE TABLE <name> <definition goes here> <options go here, eg: WITH OIDS>
创建表
create函数语法类似,但由于要在函数中使用各种SQL(特别是语句末尾;字符),如果不对其进行定界,解析器就会出错。因此,您应该将您的声明解读为:

CREATE OR REPLACE FUNCTION check_phone_number(text)
RETURNS boolean AS <code delimited by $$> LANGUAGE plpgsql STRICT IMMUTABLE;
创建或替换功能检查电话号码(文本)
将布尔值返回为<由$$>语言plpgsql严格不可变分隔的代码;
实际定义之后的内容是为数据库提供有关函数的更多信息的选项,以便优化其使用

事实上,如果您在手册中的“4.1.2.2.美元引号字符串常量”下查看,您会发现您甚至可以在美元符号之间使用字符,并且它们都将作为一个分隔符。

这些美元符号(
$$
)用于,这不是函数定义特有的。它可以用来替换SQL脚本中任意位置包含字符串文字(常量)的单引号

函数体恰好是这样一个字符串文本。美元报价是一种特定于PostgreSQL的单引号替代品,以避免嵌套单引号的转义(递归)。也可以用单引号将函数体括起来。但是你必须在正文中转义所有的单引号:

CREATE OR REPLACE FUNCTION check_phone_number(text)
  RETURNS boolean
  LANGUAGE plpgsql STRICT IMMUTABLE AS
'
BEGIN
  IF NOT $1 ~  e''^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$'' THEN
    RAISE EXCEPTION ''Malformed string "%". Expected format is +999 999'';
  END IF;
  RETURN true; 
END
';
见:

关于你的第二个问题:

阅读最优秀的文章来理解你例子的最后一行。

你应该说很好的手册,RTEM只是没有合适的环:)@muistooshort:我的错,尝试主题的变化似乎打破了和谐。您觉得RTMEM怎么样?:)我试着大喊大叫,结果不一样了。虽然在某些情况下礼貌很重要。@ErwinBrandstetter好的,但是什么是
$body$
?从
CREATE或REPLACE函数update_ts()返回触发器$BODY$BEGIN NEW.updated_at=NOW();归还新的;结束$BODY$LANGUAGE plpgsql
-我看不到任何地方定义了
BODY
。我真的不知道发生了什么事here@Growler:
$body$
就像我解释的那样,只是“美元报价”。更多细节:请考虑将欧文响应标记为这个问题的答案,他的描述解释了实际上是什么<代码> $$/COD>并且您可以通过阅读它来学习新的东西,例如也有代码> $FO$$<代码>
CREATE OR REPLACE FUNCTION check_phone_number(text)
  RETURNS boolean
  LANGUAGE plpgsql STRICT IMMUTABLE AS
'
BEGIN
  IF NOT $1 ~  e''^\\+\\d{3}\\ \\d{3} \\d{3} \\d{3}$'' THEN
    RAISE EXCEPTION ''Malformed string "%". Expected format is +999 999'';
  END IF;
  RETURN true; 
END
';
CREATE OR REPLACE FUNCTION check_phone_number(text)
  RETURNS boolean  
  LANGUAGE plpgsql STRICT IMMUTABLE AS
$func$
BEGIN
 ...
END
$func$;