@avtomon
Full-stack разработчик

Проблема с prepared statements в PostgreSQL. Как исправить?

Есть запрос:
INSERT INTO
              "control-question"
              (control_id,question_id)
            VALUES
              (:control_id0,:question_id0),(:control_id1,:question_id1)
            EXCEPT
              (SELECT
                 control_id,question_id
               FROM
                 "control-question")
             RETURNING
               question_id

И набор данных control_id0 = 28, question_id0 = 8, control_id1 = 28, question_id1 = 9.

Таблица control-question содержит только 2 поля, указанных выше, оба ключевые.

Запрос не хочет выполняться, при том что запрос с inline-параметрами успешно выполняется, т. е.
INSERT INTO
             "control-question"
              (control_id,question_id)
            VALUES
              (28,8),(28,9)
            EXCEPT
              (SELECT
                 control_id,question_id
               FROM
                 "control-question")
             RETURNING
               question_id

проходит успешно.
Подскажите, пожалуйста, как исправить проблему.
Заранее спасибо.
  • Вопрос задан
  • 2478 просмотров
Пригласить эксперта
Ответы на вопрос 3
zBit
@zBit
Full stack web developer
А какую ошибку возвращает СУБД?
Если хотя бы код ошибки достать, то можно догадаться в чём проблема.
www.postgresql.org/docs/9.3/static/errcodes-append...
Ответ написан
yttrium
@yttrium
А чем собственно обрабатывается выражение?
В документации указывается другой подход для этого, и именование переменных иное
Ответ написан
Комментировать
@Timosha
на самом деле вы вставляете text а не integer,
insert into a values ('1', 2) except select b, c from a

либо Вы, либо Ваш драйвер неверно передаёт тип данных. можете приводить типы явно:
insert into a values ('1'::int, 2) except select b, c from a
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы