Saran selama ini belum optimal. Ada solusi yang lebih sederhana dan penjelasan yang benar-benar dapat diterapkan.
Jika ragu, minta saja Postgres untuk menunjukkannya :
CREATE TEMP TABLE pencil_count ( -- table also registers row type
pencil_color varchar(30)
, count integer
);
CREATE TEMP TABLE pencils (
id serial
, pencils_ pencil_count[]
);
Sisipkan 2 baris dasar:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
Lihat sintaks untuk tipe baris dasar :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
Lihat sintaks untuk array of rows :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
Yang Anda butuhkan hanyalah menyertakan setiap baris literal dalam tanda kutip ganda - yang hanya diperlukan untuk menonaktifkan arti khusus koma dalam setiap jenis baris.
Tambahan tanda kutip ganda (berubah-ubah) akan menjadi noise yang berlebihan saat tidak ada karakter khusus tambahan.
Semua ini tidak ada hubungannya dengan escape string syntax , yang telah mati secara default sejak Postgres 9.1. Anda harus mendeklarasikan sintaksis string escape secara eksplisit dengan mengawali E
, seperti E'string\n'
. Tapi tidak ada alasan bagus untuk melakukan itu.
db<>fiddle di sini
Lama sqlfiddle
Jawaban terkait dengan penjelasan lebih lanjut:
- Sisipkan teks dengan satu kutipan di PostgreSQL
- Cara meneruskan array tipe khusus ke fungsi Postgres
- PL/pgSQL Array Baris