PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Създайте неизменен клонинг на concat_ws

Първо , функцията изисква две параметри в дефиницията, както вече предложи Ричард, и вие съответно актуализирахте въпроса си.

Второ , можете да създадете тази функция с "any" въвеждане чрез LANGUAGE internal . Това обаче не означава, че трябва.

concat_ws() е само STABLE по причина. Между другото, текстовото представяне на date или timestamp зависи от настройките за локал/стил на дата, така че резултатът не е неизменен . Индексите, изградени върху това, могат тихо да се счупят. Ограничено до text вход, е безопасно да го декларирате за IMMUTABLE .Тъй като имате нужда само от text вход (или varchar , което има имплицитно преобразуване към text ), ограничете го до вашия случай на употреба и бъдете в безопасност:

CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;

Маркирайте го като PARALLEL SAFE за да не развалите паралелизма при включването на тази функция. Ръководството:

Устояйте на изкушението да правите неща като това immutable_concat_ws('|', now()::text, 'foo') . Това ще въведе отново споменатите зависимости в повикването.

Свързани:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. групиране по необходимо в count(*) SQL израз?

  2. Преобразувайте шестнадесетичен в текстово представяне в десетично число

  3. SQL SELECT скорост int срещу varchar

  4. Docker postgres не изпълнява init файл в docker-entrypoint-initdb.d

  5. Транзакционни ли са функциите на PostgreSQL?