【发布时间】:2014-11-21 17:34:32
【问题描述】:
根据each() 的文档,它返回setof(key text, value text)。但是,当从SELECT 使用它时,我似乎无法访问key 或value。我尝试搜索有关 record 类型的信息,但我只能找到一些与 plpgsql 相关的无用信息。
假设我有下表:
CREATE TABLE mytable (
id SERIAL NOT NULL PRIMARY KEY,
data HSTORE NOT NULL
);
然后我运行查询:
SELECT pair
FROM (
SELECT each(data) AS pair
FROM mytable
) AS pairs
我得到record 类型的行:
(key1,value1)
(key2,value2)
...
如果我尝试访问key 或value,我会收到各种错误。
-
这个:
SELECT pair.key, pair.value FROM ( SELECT each(data) AS pair FROM mytable ) AS pairs给予:
ERROR: missing FROM-clause entry for table "pair" LINE 1: pair.key, ^ ********** Error ********** ERROR: missing FROM-clause entry for table "pair" SQL state: 42P01 Character: 8 -
这个:
SELECT pair.key, pair.value FROM ( SELECT each(data) AS pair (key, value) FROM mytable ) AS pairs给予:
ERROR: syntax error at or near "(" LINE 4: each(data) AS pair (key, value) ^ ********** Error ********** ERROR: syntax error at or near "(" SQL state: 42601 Character: 71 -
这个:
SELECT pairs.pair.key, pairs.pair.value FROM ( SELECT each(data) AS pair FROM mytable ) AS pairs给予:
ERROR: schema "pairs" does not exist ********** Error ********** ERROR: schema "pairs" does not exist SQL state: 3F000 -
这个:
SELECT pair[1], pair[2] FROM ( SELECT each(data) AS pair FROM mytable ) AS pairs给予:
ERROR: cannot subscript type record because it is not an array ********** Error ********** ERROR: cannot subscript type record because it is not an array SQL state: 42804
如何在 PostgreSQL 中正确访问 record 类型的成员?
【问题讨论】:
-
each用于hstore,而不是record。 -
@CraigRinger
each(hstore)返回setof record。
标签: sql postgresql postgresql-9.1