例PostgreSQLの配列の簡単な説明

1574 ワード

PostgreSQLには、標準的なデジタルデータ型からジオメトリ型、さらにはネットワークデータ型など、豊富な開梱即用データ型があります.多くの人がこれらのデータ型を無視しますが、私の最も好きな特性の一つです.配列データ型は、あなたが望むようにPostgreSQLに配列データを格納することができます.この特性により、従来は複数のテーブルが必要だったストレージ要件を単一のテーブルで実現することができます.
なぜ配列を使用してデータを格納するのか、アプリケーション開発者であれば、データベースで同じモデルを使用してプログラム内のデータを格納するのは、なぜ楽しいのでしょうか.しかも、このようなやり方は性能を向上させることができます.PostgreSQLの配列タイプの使用方法について説明します.
あるサイトで買い物をするとしたら、購入した情報は次の表で表すことができます.

CREATE TABLE purchases (
  id integer NOT NULL,
  user_id integer,
  items decimal(10,2) [100][1],
  occurred_at timestamp
);

このテーブルには、次のような複数の商品レコードを保持する配列フィールドがあります.
  • 購入商品番号
  • 数量
  • 価格
  • この表にデータを挿入するSQLは、INSERT INTO purchases VALUES(1,37,'{{15.0,1.0,25.0},{15.0,1.0,25.0}',now();INSERT INTO purchases VALUES (2, 2, '{{11.0, 1.0, 4.99}}', now()); より現実的な例は、ラベルの使用です.購入したアイテムをラベルで識別することができます.
     
    
    CREATE TABLE products (
      id integer NOT NULL,
      title character varying(255),
      description text,
      tags text[],
      price numeric(10,2)
    );
    

    基本的なクエリー文を使用してデータを取得できます.
     
    
    SELECT title, unnest(tags) items FROM products
    

    PostgresのGin and Gistインデックスを使用して、指定したラベルに基づいて製品をすばやく検索することもできます.
    
    -- Search where product contains tag ids 1 AND 2
    SELECT *
    FROM  products
    WHERE  tags @> ARRAY[1, 2]
     
    -- Search where product contains tag ids 1 OR 2
    SELECT *
    FROM  products
    WHERE  tags && ARRAY[1, 2]