#java #sql #postgresql #syntax-error #jooq
#java #sql #postgresql #синтаксическая ошибка #jooq
Вопрос:
Я использую JOOQ для подключения java к postgresql db. Он пытается выполнить этот запрос.
insert into "public"."mission_batches" as "MB"
("micro_task_id", "is_active", "created_at", "updated_at")
values
('7e1cc9e8-fc11-409b-865e-3bf08e6ca924', false, timestamp '2016-10-05 21:47:13.061', timestamp '2016-10-05 21:47:13.061') returning "MB"."id", "MB"."micro_task_id", "MB"."is_active", "MB"."created_at", "MB"."updated_at"
Но я получаю сообщение об ошибке из базы данных
org.jooq.exception.DataAccessException: SQL [insert into "public"."mission_batches" as "MB" ("micro_task_id", "is_active", "created_at", "updated_at") values (?, ?, cast(? as timestamp), cast(? as timestamp)) returning "MB"."id", "MB"."micro_task_id", "MB"."is_active", "MB"."created_at", "MB"."updated_at"];
ERROR: syntax error at or near "as"
Position: 40
Он работает с моей локальной базой данных [9.5]. На тестовом сервере [9.4] он выдает эту ошибку. Где я должен искать исправление? Сторона Java или сторона PG?
Ответ №1:
Псевдоним таблицы, в которую вы вставляете, был добавлен только в Postgres 9.5 (сравните документацию Postgres 9.5 с документацией 9.4. Поскольку столбцы в returning
предложении в любом случае ссылаются на вставленную таблицу, вы могли бы так же легко обойтись без нее:
insert into "public"."mission_batches"
("micro_task_id", "is_active", "created_at", "updated_at")
values
('7e1cc9e8-fc11-409b-865e-3bf08e6ca924', false,
timestamp '2016-10-05 21:47:13.061', timestamp '2016-10-05 21:47:13.061')
returning
"id", "micro_task_id", "is_active", "created_at", "updated_at"
Комментарии:
1. Итак, только псевдоним для вставки не поддерживается в 9.4? Потому что этот запрос выполняется отлично
select "U"."id", "U"."username", "E"."email" from "public"."users" as "U" join "public"."emails" as "E" on "U"."id" = "E"."user_id" where "E"."email" = 'abc@xyz.com'
2. @theGamblerRises Да, сглаживание в select существует уже давно…
3. О, хорошо. Затем я изменю свой код и сделаю так, чтобы на всех устройствах была одинаковая версия. Спасибо