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: