Конструкция $BODY$

Alexey Agafonov
Дата: 21.05.2015 15:33:08
Всем привет. У меня два вопроса - один, вероятно, чайниковский (заранее прошу извинить), второй - надеюсь нет :-)

1. Чем принципиально отличается конструкция создания фукнции в кавычках и без? Я создал функции:

-- drop function tst1 (int);
create function tst1 (int) returns int as
'begin
 return $1+1;
end;'
language 'plpgsql';


-- drop function tst2 (int);
create function tst2 (int) returns int as
$BODY$
begin
 return $1+1;
end;
$BODY$
language 'plpgsql';


Создались обе, и в базе они выглядят таким кодом:

CREATE OR REPLACE FUNCTION tst1(integer)
  RETURNS integer AS
$BODY$begin
 return $1+1;
end;$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION tst1(integer)
  OWNER TO postgres;


Зачем кавычки? Это старый формат или что? Неудобно экранировать, но интересно понять, зачем их сделали.

2. Вместо $BODY$ можно использовать что угодно, как это?. Создал функцию:

-- drop function tst3 (int);
create function tst3 (int) returns int as
$TTTT$
begin
 return $1+1;
end;
$TTTT$
language 'plpgsql';


Обратите внимания, вместо $BODY$ написал $TTT$, да и вообще можно, что угодно писать. Создается такая:

CREATE OR REPLACE FUNCTION tst2(integer)
  RETURNS integer AS
$BODY$
begin
 return $1+1;
end;
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
ALTER FUNCTION tst2(integer)
  OWNER TO postgres;


После AS вставлена строка, и $<что-угодно>$ он поменял на $BODY$. Это объяснимо логически?
qwwq
Дата: 21.05.2015 15:45:35
Alexey Agafonov,

это не конструкция создания функций, а банальный способ квотирования (кавычения) текста

RTFM
http://www.postgresql.org/docs/9.4/static/sql-syntax-lexical.html#SQL-SYNTAX-SPECIAL-CHARS
4.1.2.4. Dollar-quoted String Constants
Alexey Agafonov
Дата: 21.05.2015 17:00:04
qwwq,

Да, спасибо, понял. Можно вообще $$....$$ использовать. )