sql >> データベース >  >> RDS >> PostgreSQL

複合型の配列の正しい構文

    これまでのアドバイスは最適ではありません。より簡単な解決策と実際に適用できる説明があります。
    疑問がある場合は、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 こちら
    古い sqlfiddle

    詳細な説明付きの関連回答:



    1. Accessに.sqlファイルをインポートします

    2. Java:OracleからBlobを読み取る

    3. python3用のflask-mysqlをインストールするにはどうすればよいですか?

    4. フィルタリングされたインデックスがより強力な機能になる方法