2014-11-27 2 views
3

Есть ли способ проверить, существует ли значение в hstore в самом запросе.postgreSQL hstore if содержит значение

Я должен хранить различные значения в строке (каждая строка является «элементом»). Мне нужно проверить, существует ли идентификатор уже в базе данных в одной из строк hstore без выбора всего первого и выполнения циклов и т. Д. В php. hstore кажется единственным типом данных, который предлагает что-то подобное, а также позволяет выбрать столбец для этой строки в массив.

Hstore не может быть лучшим типом данных для хранения таких данных, но нет ничего лучшего.

Весь проект использует 9.2, и я не могу изменить это - json находится в 9.3.

+0

Что случилось с 'где some_column = 42', чтобы проверить, если значение уже есть? –

+0

его hstore. hstore содержит несколько значений как пары ключ => значение. –

+0

Извините, я не понимаю: «* Мне нужно проверить, существует ли идентификатор уже в базе данных в одной из строк *», как «где id = 42» - это все, что вам нужно –

ответ

4

Функциональные тесты exist() для существования ключа. Чтобы определить, существует ли ключ «42» в любом месте в hstore. , ,

select * 
from (select test_id, exist(test_hs, '42') key_exists 
     from test) x 
where key_exists = true; 
 
test_id key_exists 
-- 
2  t 

svals() функция возвращает значения в виде набора. Вы можете запросить результат, чтобы определить, существует ли конкретное значение.

select * 
from (select test_id, svals(test_hs) vals 
     from test) x 
where vals = 'Wibble'; 

hstore Operators and Functions


create table test (
    test_id serial primary key, 
    test_hs hstore not null 
); 

insert into test (test_hs) values (hstore('a', 'b')); 
insert into test (test_hs) values (hstore('42', 'Wibble')); 
Смежные вопросы