これまでのアドバイスは最適ではありません。より簡単な解決策と実際に適用できる説明があります。
疑問がある場合は、Postgresに表示を依頼してください :
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[]
);
2つの基本的な行を挿入します:
INSERT INTO pencil_count VALUES ('red', 1), ('blue', 2);
基本行タイプの構文を参照してください :
SELECT p::text AS p_row FROM pencil_count p;
p_row
----------
(red,1)
(blue,2)
行の配列の構文を参照してください :
SELECT ARRAY(SELECT p FROM pencil_count p)::text AS p_row_arr;
p_row_arr
------------------------
{"(red,1)","(blue,2)"}
必要なのは、各行リテラルを二重引用符で囲むことだけです。これは、カンマの特別な意味を無効にするためにのみ必要です。 各行タイプ内。
追加の(エスケープされた)二重引用符は、追加の特殊文字がない間は冗長なノイズになります。
これは、エスケープ文字列構文とは何の関係もありません。 、オフになっています Postgres9.1以降のデフォルト。 E
の前に付けて、エスケープ文字列構文を明示的に宣言する必要があります。 、E'string\n'
のように 。しかし、それを行う正当な理由はありません。
db <> fiddle こちら
古い
詳細な説明付きの関連回答: