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

空のhstore列にキーを追加する

    ここでの問題は、お持ちのhstoreがnullであり、nullまたは一部のhstoreがnullであるということだと思います。

    私が持っている最善の解決策は、おそらく最善の解決策ではありませんが、nullを許可するのではなく、デフォルトの空のhstoreを使用してテーブルを作成することです。次に、例は希望どおりに機能します。

    postgres=# create table htest (t text, h hstore default hstore(array[]::varchar[]));
    CREATE TABLE
    postgres=# insert into htest (t) values ('key');
    INSERT 0 1
    postgres=# update htest set h = h || ('foo'=>'bar') where t='key';
    UPDATE 1
    postgres=# select * from htest;
      t  |      h       
    -----+--------------
     key | "foo"=>"bar"
    (1 row)
    

    残念ながら、空のhstoreを作成するためのよりクリーンな方法がhstore(array[]::varchar[])よりもわかりません。 しかし、それはより良い方法がないという意味ではありません。これを以前のhstoreアップデートに組み込むことができます:

    update htest set h = coalesce(h, hstore(array[]::varchar[])) || ('foo'=>'bar') where t='key';
    

    この方法では、テーブルを再作成する必要はありません。でもそれはかなりグロスだと思います。これがお役に立てば幸いです。



    1. Oracleの日付に序数標識を追加する

    2. SQLの変数->エラーPLS-00103:シンボルSELECTが発生しました

    3. Oracleテーブルまたはビューの名前を変更します

    4. サブクエリ内の複数の結果を1つのコンマ区切り値に結合します