2

たとえば、users列を持つテーブルがあります。user_iduser_nameuser_phone

私が行った場合:

select hstore(u) from users u

結果は次のとおりです。

"user_id" => "1", "user_name" => "McEnroe", "user_phone" => "xxx"

私が行った場合:

select hstore(u) from (select user_id, user_name, user_phone from users) u

結果は次のとおりです。

"f1" => "1", "f2" => "McEnroe", "f3" => "xxx"

列の名前を失います。
2番目の例を使用して正しい列名を付けるにはどうすればよいですか?

4

1 に答える 1

2

これはPostgres 9.2 で修正された欠点でした。ここで 9.2
のリリース ノートを引用します。

E.5.3.3. クエリ

(...)

  • 行式の実行時に列名を保持します。 (Andrew Dunstan, Tom Lane)

    この変更により、行の値が hstore または json 型に変換されるときに、より良い結果が得られます。結果の値のフィールドには、期待される名前が付けられます。

userまた、単なるデモであっても、テーブル名として使用しないでください。これは、すべての SQL 標準および Postgresの予約語であり、二重引用符なしでテーブル名として使用することはできません。私は自由にQのテストケースを修正しました。

于 2013-08-23T16:01:05.743 に答える