2017-03-20 6 views
0

jsonb_to_recordset()を使用してキー値を抽出しようとしています。これは、元のjsonb配列がどのように見えるかです:Postgresでキー値がNULLになっていますjsonb_to_recordset()

select journal.id as journal_id, journal.data::jsonb#>'{context,data,files}' as filelist from journal where id = 'aqpubr0ivqaaolpr4lp0'; 

結果は次のとおりです。あなたが見ることができるように

[{"id": 0, "name": "MNDA_Template.doc", "extension": ".doc", "transferId": "aqpl61ple38cdebbrmgg"}] 

、キーtransferIdは値を持っています。私はこれを取得

select j.id as journal_id,d.name as file_name,d.extension as ext,d.transferId as TxferId from journal j cross join lateral jsonb_to_recordset(j.data#>'{context, data, files}') as d(id int, name text, extension text, transferId text) where j.id = 'aqpubr0ivqaaolpr4lp0'; 

journal_id   | file_name   | ext | txferId 

aqpubr0ivqaaolpr4lp0 | MNDA_Template.doc | .doc | (NULL) 

私は構造でtransferIdを定義しておりますが、それはそれをミス私はjsonb_to_recordset()を使用して、それを抽出するときしかし、それはtransferIdを除く他のすべてのキー値を抽出し、 (のみ)。 私はここで何が欠けていますか?

答えて

2

あなたの識別子は大文字で書かれているので、あなたはそれらの内部の値を取得するには、二重引用符を使用する必要があります。

select * from jsonb_to_recordset('[{"id": 0, "name": "MNDA_Template.doc", "extension": ".doc", "transferId": "aqpl61ple38cdebbrmgg"}]') 
as d(id int, name text, extension text, "transferId" text); 
+0

私はリテラルJSONを提供していない、列から抽出しています。提案されているよう私は二重引用符でそれを実行すると、それは二重引用符で参照されたキーに対応する列を見つけることができないことを不平を言う: 'journal_id、 \t \t \t d.nameとして\t j.idを選択しますFILE_NAME、EXTとして \t \t \t d.extensionとして \t \t \tは クロス\tジャーナルjから をd.transferid横 \t jsonb_to_recordset(j.data#> '{コンテキスト、データ、ファイル}')Dとして参加します(id int、名前テキスト、拡張テキスト、 "transferId"テキスト) どこ\tがj.id = 'aqpubr0ivqaaolpr4lp0'; ' 私はエラーを取得する: '列d.transferidが – user75122

+0

使用dをexist'しない "transferId" の代わりに、d.transferid –

+0

はその、同じエラーをしました。 – user75122

関連する問題