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

Sintaks yang benar untuk array tipe komposit

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:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy memverifikasi koneksi SSL

  2. Hapus satu, nilai non-unik dari array

  3. Menghapus linebreak dari output json php

  4. Postgres:haruskah seseorang membuat indeks sebelum atau setelah mengisi tabel

  5. postgresql:nilai kunci duplikat kesalahan melanggar batasan unik