PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Buat klon concat_ws yang tidak dapat diubah

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PG::Error:ERROR:encoding baru (UTF8) tidak kompatibel

  2. Variabel untuk pengidentifikasi di dalam JIKA ADA dalam fungsi plpgsql

  3. Bagaimana cara membuat array SQL dari Daftar Java?

  4. Webinar:Perbankan di Postgres – Pertimbangan Aplikasi Keuangan [Tindak lanjut]

  5. Bagaimana cara menggabungkan semua hasil dari baris tabel?