私はPostgresのHStoreデータ型にネストされたハッシュを入れることはできません。ここでPostgresqlのHStore型でネストされたハッシュの構文は何か、可能ですか?
は、私がこれまで試したものです:
-- Database: test1
-- DROP DATABASE test1;
/*
CREATE DATABASE test1
WITH OWNER = iainuser
ENCODING = 'UTF8'
TABLESPACE = pg_default
LC_COLLATE = 'en_GB.UTF-8'
LC_CTYPE = 'en_GB.UTF-8'
CONNECTION LIMIT = -1;
*/
/* create extension hstore; */
/*drop table my_store;*/
/*
create table my_store (
id serial primary key not null,
doc hstore
);
CREATE INDEX my_store_doc_idx_gist
ON my_store
USING gist
(doc);
*/
/* select doc from my_store; */
/*
insert into my_store (doc) values ('"a" => "1"');
select doc -> 'a' as first_key from my_store; -- returns "1"
*/
/* insert into my_store (doc) values ('"b" => "c" => "3"'); -- doesn't work */
/* insert into my_store (doc) values ('"b" => ("c" => "3")'); -- doesn't work */
/* insert into my_store (doc) values ('"b" => hstore("c" => "3")'); -- doesn't work */
/* insert into my_store (doc) values ('"b"' => hstore("c" => "3")'); -- doesn't work */
/* insert into my_store (doc) values ("b"=>'"c"=>"3"'::hstore); -- doesn't work */
それが不可能な場合は、ネストされたハッシュを操作するための現在受け入れられた標準/イディオムがある - おそらくそれらを離れて引っ張るとIDを使用してそれらを参照してください?
これについてのお手伝いがあれば幸いです。 fine manualから
もしあなたが望むものでなければ、hstoreをテキストにキャストして引用符をエスケープして、hstoreの値として保存できる文字列を得ることができるかもしれませんが、使用するのに便利です。データの正規化をもう少し検討することをお勧めします。 – kgrittn
これをクリアしていただきありがとうございます、私はそれを感謝します。私はマニュアルのそのページを読んだことがありますが(それは良いマニュアルです)、挿入物の例さえないので、あまりにも複雑な例が残っていたかどうか疑問に思っていました。 @kgrittnキャストは私が最終的なルートになると思います。データベースにドキュメントを取得する唯一の方法でない限り、このインスタンスで正規化されたデータは必要ありません。 – iain