0

hstore誰かがPostgreSQL 9.2の列に対するこの単純なクエリで何がうまくいかないのか考えられるだろうか.

クエリはpgAdminで実行されます

select attributeValue->"CODE_MUN" from shapefile_feature

戻り値: « attributevalue » 列が存在しません

するとき:

select * from shapefile_feature;

attributeValue、hstore 列を含むすべての列が返されます

何が問題ですか?

4

1 に答える 1

4

PostgreSQL は「識別子」と「リテラル」を区別します。識別子はスキーマ、テーブル、列、.. 名前、リテラルはその他です。hstore の属性は SQL 識別子ではありません。したがって、それらの名前をリテラルとして渡す必要があります。演算子 "->" は、関数 "fetchval(hstore, text)" の唯一のショートカットであり、インデックス化される可能性があります。

shapefile_feature から attributeValue->'CODE_MUN' を選択

に内部的に変換されます (この変換を自分で行わないでください!)

shapefile_feature から fetchval(attributeValue, 'CODE_MUN') を選択します

変換された形式のバグのある例では、エラーメッセージをよりよく理解できます。

shapefile_feature から fetchval(attributeValue, "CODE_MUN") を選択します

PostgreSQL は shapefile_feature で列 "CODE_MUN" を見つけようとします。使用されている二重引用符は識別子を意味するためです (大文字と小文字を区別する表記)。

于 2013-08-11T04:51:38.147 に答える