В соответствии с документацией для 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(attributes) 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
Как правильно получить доступ к членам типа record
в PostgreSQL?
'каждый' предназначен для' hstore', а не 'record'. –
@CraigRinger 'each (hstore)' возвращает 'setof record'. – cpburnz