2013-11-19 2 views
0

Я бегу Postgres 9.2.4 с расширением hstore (на Windows)PostgreSQL populate_record и hstore

Учитывая таблицу:

CREATE Table tmpM (
id bigserial NOT NULL, 
EventId bigint NOT NULL, 
LoginId bigint NOT NULL, 
CONSTRAINT tmpM_key PRIMARY KEY (id)); 

Я пытаюсь запустить это заявление:

SELECT * from populate_record(null::tmpM, '"EventId"=>"123", "LoginId"=>"456"') 

Я получаю результат из 1 строки, но все значения равны нулю. Любые идеи относительно того, что я делаю неправильно?

ответ

0

Обнаружена проблема. Имена Col называются и, следовательно, не соответствуют именам в таблице. Love Postgres, но обработка дела - это ... ermmm ... не очень приятно :-)

+0

Обработка ошибок * - это хорошо в Postgres (гораздо более строгая, чем в большинстве других СУБД) - просто не с «схемой» (и неаудирующий) тип данных, такой как hstore. –

+0

Полностью согласен - то, что я «бухал» о том, как Postgre обрабатывает чувствительность к регистру. В некоторых dbms вы можете указать, является ли схема чувствительной к регистру или нет. В Postgres такой установки нет ... вместо этого у вас есть двойные кавычки, которые поддерживают этот случай. В любом случае наш опыт с Postgres был очень положительным в целом. – ozczecho

+0

Postgres соответствует требованиям стандарта SQL, когда речь идет о цитируемых идентификаторах. Единственная часть, в которой он отклоняется, состоит в том, что она сворачивает все в нижний регистр, тогда как для стандартного требования необходимо сбрасывать неупомянутые имена в верхний регистр. Эти «другие» СУБД просто игнорируют (читайте: нарушайте) стандарт. (И, пожалуйста, не используйте «Postgre» - это «Postgres») –

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