2015-12-11 2 views
0

Согласно МТФ (Postgres docs), можно использовать обычный оператор конкатенации, чтобы присоединиться к двум HSTOREs:PostgreSQL hstore конкатенации

SELECT 'a=>b, c=>d'::hstore || 'c=>x, d=>q'::hstore 

Результат:

"a"=>"b", "c"=>"x", "d"=>"q" 

Однако я получаю сообщение об ошибке при запуске что такая же команда:

[42883] ERROR: operator does not exist: hstore || hstore Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts. 

Единственный способ получить желаемый результат - это сделать что-то настолько хакерское, что заставляет меня хотеть плакать: конвертируя любые HSTORE, у меня есть текст сначала, затем конкатенация текста и переход к HSTORE. Это, конечно, не очень хорошо, поскольку в документах также указывается, что если есть дубликаты ключей, нет никакой гарантии, что вы сможете пережить конкатенацию.

Прежде чем я напишу ошибку с людьми Postgres, может ли кто-нибудь еще дублировать это? Информация о версии:

select version(); 
PostgreSQL 9.4.5 on x86_64-unknown-linux-gnu, compiled by gcc (Debian 4.7.2-5) 4.7.2, 64-bit 
select extname,extversion from pg_catalog.pg_extension; 
hstore 1.3 
+0

Правильно работает на 5 серверах с 9.4.2 до 9.5beta2 (2 vC++ win, 3 gcc ubuntu, все 64 бит). – klin

+0

Клин, вы используете hstore 1.3? – GarrettMurphy

+0

Да, hstore 1.3 на всех серверах. – klin

ответ

0

Выяснил проблему. Расширение HSTORE было установлено в отдельную схему; Я смог назвать эту схему, идентифицировав ее (sys.hstore), но ей все еще не понравился оператор ||. Исправление было довольно простым: я добавил sys в search_path.

Смежные вопросы