Pertama , fungsi membutuhkan dua parameter dalam definisi, seperti yang disarankan Richard, dan Anda memperbarui pertanyaan Anda sesuai dengan itu.
Kedua , Anda dapat membuat fungsi tersebut dengan "any"
masukan menggunakan LANGUAGE internal
. Namun, tidak berarti Anda harus melakukannya.
concat_ws()
hanya STABLE
untuk sebuah alasan. Antara lain, representasi teks dari date
atau timestamp
tergantung pada pengaturan lokal/gaya tanggal, jadi hasilnya tidak tidak dapat diubah . Indeks yang dibangun di atas ini bisa diam-diam pecah. Terbatas pada text
masukan, aman untuk mendeklarasikannya IMMUTABLE
.Karena Anda hanya perlu text
masukan (atau varchar
, yang memiliki pemeran implisit ke text
), batasi untuk kasus penggunaan Anda dan amankan:
CREATE OR REPLACE FUNCTION immutable_concat_ws(text, VARIADIC text[])
RETURNS text AS 'text_concat_ws' LANGUAGE internal IMMUTABLE PARALLEL SAFE;
Tandai sebagai PARALLEL SAFE
untuk tidak merusak paralelisme ketika melibatkan fungsi ini. Manual:
Tahan godaan untuk melakukan hal-hal seperti ini immutable_concat_ws('|', now()::text, 'foo')
. Ini akan memperkenalkan kembali dependensi tersebut dalam panggilan.
Terkait: