Содержание
- Re: Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near «merge».
- Ошибка Error syntax error at or near 1 в PostgreSQL: что это такое?
- PostgreSQL – что это?
- Как определить версию?
- Преимущества базы
- Пуск pgAdmin-4 и подсоединение к серверной
- Синтаксическая ошибка в или около «IF» PostgreSQL
- 1 ответы
Re: Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near «merge».
From: | Alvaro Herrera |
---|---|
To: | Vinodh NV |
Cc: | pgsql-general |
Subject: Re: Caused by: org.postgresql.util.PSQLException: ERROR: syntax error at or near «merge». Date: 2018-03-07 09:34:44 Message-ID: 20180307093444.upjdj2moqep46a6u@alvherre.pgsql Views: Raw Message | Whole Thread | Download mbox | Resend email Thread: Lists: pgsql-general
Vinodh NV wrote:
> Sir,
>
> I am facing the error Caused by: org.postgresql.util.PSQLException: ERROR:
> syntax error at or near «merge». when I execute the below query in
> postgres database. The same works fine in Oracle.
>
> merge into net n using dual on (n.id=:id) when matched then update set
> Status=:status, lastStatusDate=:lastStatusDate, errorMessage=:errorMessage,
> errorDetails=:errorDetails when not matched then insert (id,Status,
> lastStatusDate, errorMessage, errorDetails) values
> (:id,:status,:lastStatusDate,:errorMessage,:errorDetails)»;
>
>
> Can you please let me know how to resolve it?
Easy — just don’t use merge with Postgres, as it doesn’t support MERGE
yet. There’s work ongoing to support it, but it will appear in Postgres
11 at the earliest.
There exists a nonstandard command INSERT ON CONFLICT DO UPDATE which
would probably be useful.
Источник
Ошибка Error syntax error at or near 1 в PostgreSQL: что это такое?
Многие пользователи сталкиваются с ошибка Error syntax error at or near 1 в PostgreSQL. Уведомления о сбое в программе обычно достаточно корректны. Скорее всего причина в том, что драйвер редактирует детали. Обычно достаточно посмотреть на журнал Postgres, где присутствуют все сведения.
PostgreSQL – что это?
Реляционная система информации, помогающая пользователям упорядочить сведения и иметь общую картину об их взаимосвязи. Информационная база имеет открытый код, и ее поддержка осуществляется на протяжение 30 летнего периода с момента разработки. Она наиболее востребованная у пользователей, из аналогичных реляционных баз данных.
Как определить версию?
Чтобы узнать серверную версию следует набрать командный путь: pg_config –version. Также можно прописать: postgres -V. А чтобы определить версию клиента необходима коанда: psql –version. Альтернативное решение sudo -u postgres psql -c ‘Select version ()’ | grep PostgreSQL.
Преимущества базы
Программа популярна. Этому есть много причин:
- полноценная совместимость SQL;
- не закрытый исходный код;
- расширенные настройки, позволяющие делать личные, индивидуальные плагины и проводить персонализацию критериев;
- можно индексировать геометрические (и по географии) объекты;
- присутствуют расширения Пост GIS;
- опция MVCС, чтобы управлять параллельным доступом путем много-версионности;
- расширяемость, дающая возможность масштабировать посредством сохраняемых процессов;
- • поддержка определенного объектно-ориентированного функционала.
Помимо этого база регулярно обновляется, что также явное преимущество для пользователей.
Пуск pgAdmin-4 и подсоединение к серверной
PgAdmin-4 будет установлен совместно с базой, для его запуска следует кликнуть на «Меню Пуск затем выбрать непосредственно саму программу и уже после пгАдмин4.
Обновленная версия обладает веб-интерфейсом, потому у пользователя произойдет запуск браузера, где и откроется программа админ4.
Чтобы подключится к только что скаченному и прошедшему процесс установки локальному серверу в серверном обозревателе надо нажать на категорию «PostgreSQL-11».
В итоге будет выполнен запуск «Connect to Server», где потребуется прописать пароль системного пользователя postgres, а именно тот пароль, который был придуман пользователем во время установки программы с базой. После того как введен пароль, нужно поставить галочку «Save Password», это позволит осуществить его сохранение, после чего не потребуется вводить его при каждом входе.
Обязательно подтвердить действие кликом на «OK». В результате будет выполнено подключение к локальной серверной базы.
Источник
Синтаксическая ошибка в или около «IF» PostgreSQL
Я пытаюсь использовать подзапрос в своем коде, но это дает мне ошибку. Я нашел много решений, но они все еще не работают:
Не могли бы вы помочь мне?
задан 04 сен ’12, 10:09
Для всех, кто читает это позже, обратите внимание, что на плакате отсутствует окружающий текст. DO определение блока или функции. Вы не можете запускать анонимные блоки PL/PgSQL в PostgreSQL, они должны быть окружены DO or CREATE [OR REPLACE] FUNCTION с LANGUAGE пункт. — Craig Ringer
1 ответы
Опустить точку с запятой после «НАЧАЛО»? Это если это тело функции plpgsql.
Если это сценарий psql, IF оператор должен быть передан plpgsql для выполнения, поэтому необходимо ввести DO $$ . $$ построить.
Или, конечно, вы можете провести рефакторинг следующим образом:
О, это похоже на решение.. но я не понимаю, как это работает. Я хочу проверить, существует ли запись, если да — ничего не делать, если нет записи вставки — как работает ваш код INSERT? — javaДевушка
INSERT не обязательно должен иметь фиксированный набор значений, он может принимать в качестве входных данных любой SELECT. Итак, часть SELECT, которую вы можете запустить самостоятельно, и она производит (‘abc’, 7) если строка не существует. Затем этот результат может быть передан в INSERT. — аракнид
Хмммм, давайте предположим, что у меня есть: INSERT INTO Table (X, Y) Values (A, B), но только в случае, если значение B не существует в столбце Y. Как будет выглядеть весь код? — javaДевушка
У меня есть еще один вопрос. как я могу использовать его в MySQL? — javaДевушка
@javaGirl извините, я не знаю о mysql. — аракнид
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками postgresql if-statement or задайте свой вопрос.
Источник
На чтение 3 мин Обновлено 6 ноября, 2022
Содержание
- PostgreSQL — Syntax error at or near «.» #4216
- Comments
- ghost commented Jul 30, 2015
- ghost commented Jul 30, 2015
- janmeier commented Jul 30, 2015
- ghost commented Jul 30, 2015
- mickhansen commented Jul 30, 2015
- janmeier commented Oct 12, 2015
- Footer
PostgreSQL — Syntax error at or near «.» #4216
I just transitioned a sequelize project off of sqlite and onto PostgreSql. I’m finding Postgres isn’t liking the «SELECT col AS» naming conventions that Sequelize is generating. All of the queries with relationships are being aliased as names with dots in them, which is generating syntax errors. For instance, a basic auth check query for checking whether the active user (account.id = 3) has a task with the code «viewProfile», is generating the following query:
Which, is generating the following postgres error:
All of this worked fine with the sqlite dialect. Any help would be greatly appreciated.
The text was updated successfully, but these errors were encountered:
Here’s a better example, I know I haven’t included my model definitions — but this is an eager selection of a simple relationship between a «role» table and a «task» table, with a «role_tasks» association table.
Generated PostgreSQL query (missing quotes on inner identifiers):
Correct PostgreSQL query would be (with quotes around tasks.roleTasks):
Please do post model definitions and associations so we can actually reproduce the problem.
You have have quoteIdentifiers set to false by any chance?
I cleaned up my models significantly, removing all ‘field’, ‘tableName’ and ‘as’ properties (when defining relationships). this still didn’t fix the issue. I then realized I had quoteIdentifiers set to false, and I changed it to true — and magically it started working!
I’m going to work on reverting my models back to their original definition, to see if the problem was strictly related to quoteIdentifiers, or a combination of issues.
So it kind of feels like quoteIdentifiers is a mandatory option, no? I intentionally set it to false, because I didn’t really want to bother quoting all of my mixed-case tables when querying from the command line. but I can obviously live with that.
Support for quoteIdentifiers: false is spotty at best, some 3rd party contributions have made efforts at improving it but it’s not great.
If you create your table names with lowercase you should still be able to query them fine from the command line (atleast it works for me).
Closing as «please don’t use quoteIdentifiers: false unless you really, really, have to!»
© 2022 GitHub, Inc.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Источник
@YohDeadfall — I understand that part about it, but this is not script that I am creating or even code that I am creating. This is all created under the hood by Npsql/EntityFramework. My quick guess is that I am extending my DbContext from IdentityDbContext<IdentityUser>
which wants to create all of the tables for roles, users, claims, etc. If I change this to just extend from DbContext
, then everything works as advertised.
Below is the script that EF is trying to use created from dotnet ef migrations script
— please be aware that I have removed my custom part of the script for brevity.
You can see there are two specific calls that are being made where [NormalizedName]
and [NormalizedUserName]
are being used.
CREATE TABLE IF NOT EXISTS "__EFMigrationsHistory" ( "MigrationId" varchar(150) NOT NULL, "ProductVersion" varchar(32) NOT NULL, CONSTRAINT "PK___EFMigrationsHistory" PRIMARY KEY ("MigrationId") ); CREATE TABLE "AspNetRoles" ( "Id" text NOT NULL, "ConcurrencyStamp" text NULL, "Name" varchar(256) NULL, "NormalizedName" varchar(256) NULL, CONSTRAINT "PK_AspNetRoles" PRIMARY KEY ("Id") ); CREATE TABLE "AspNetUsers" ( "Id" text NOT NULL, "AccessFailedCount" int4 NOT NULL, "ConcurrencyStamp" text NULL, "Email" varchar(256) NULL, "EmailConfirmed" bool NOT NULL, "LockoutEnabled" bool NOT NULL, "LockoutEnd" timestamptz NULL, "NormalizedEmail" varchar(256) NULL, "NormalizedUserName" varchar(256) NULL, "PasswordHash" text NULL, "PhoneNumber" text NULL, "PhoneNumberConfirmed" bool NOT NULL, "SecurityStamp" text NULL, "TwoFactorEnabled" bool NOT NULL, "UserName" varchar(256) NULL, CONSTRAINT "PK_AspNetUsers" PRIMARY KEY ("Id") ); CREATE TABLE "AspNetRoleClaims" ( "Id" int4 NOT NULL, "ClaimType" text NULL, "ClaimValue" text NULL, "RoleId" text NOT NULL, CONSTRAINT "PK_AspNetRoleClaims" PRIMARY KEY ("Id"), CONSTRAINT "FK_AspNetRoleClaims_AspNetRoles_RoleId" FOREIGN KEY ("RoleId") REFERENCES "AspNetRoles" ("Id") ON DELETE CASCADE ); CREATE TABLE "AspNetUserClaims" ( "Id" int4 NOT NULL, "ClaimType" text NULL, "ClaimValue" text NULL, "UserId" text NOT NULL, CONSTRAINT "PK_AspNetUserClaims" PRIMARY KEY ("Id"), CONSTRAINT "FK_AspNetUserClaims_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE ); CREATE TABLE "AspNetUserLogins" ( "LoginProvider" text NOT NULL, "ProviderKey" text NOT NULL, "ProviderDisplayName" text NULL, "UserId" text NOT NULL, CONSTRAINT "PK_AspNetUserLogins" PRIMARY KEY ("LoginProvider", "ProviderKey"), CONSTRAINT "FK_AspNetUserLogins_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE ); CREATE TABLE "AspNetUserRoles" ( "UserId" text NOT NULL, "RoleId" text NOT NULL, CONSTRAINT "PK_AspNetUserRoles" PRIMARY KEY ("UserId", "RoleId"), CONSTRAINT "FK_AspNetUserRoles_AspNetRoles_RoleId" FOREIGN KEY ("RoleId") REFERENCES "AspNetRoles" ("Id") ON DELETE CASCADE, CONSTRAINT "FK_AspNetUserRoles_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE ); CREATE TABLE "AspNetUserTokens" ( "UserId" text NOT NULL, "LoginProvider" text NOT NULL, "Name" text NOT NULL, "Value" text NULL, CONSTRAINT "PK_AspNetUserTokens" PRIMARY KEY ("UserId", "LoginProvider", "Name"), CONSTRAINT "FK_AspNetUserTokens_AspNetUsers_UserId" FOREIGN KEY ("UserId") REFERENCES "AspNetUsers" ("Id") ON DELETE CASCADE ); CREATE INDEX "IX_AspNetRoleClaims_RoleId" ON "AspNetRoleClaims" ("RoleId"); CREATE UNIQUE INDEX "RoleNameIndex" ON "AspNetRoles" ("NormalizedName") WHERE [NormalizedName] IS NOT NULL; CREATE INDEX "IX_AspNetUserClaims_UserId" ON "AspNetUserClaims" ("UserId"); CREATE INDEX "IX_AspNetUserLogins_UserId" ON "AspNetUserLogins" ("UserId"); CREATE INDEX "IX_AspNetUserRoles_RoleId" ON "AspNetUserRoles" ("RoleId"); CREATE INDEX "EmailIndex" ON "AspNetUsers" ("NormalizedEmail"); CREATE UNIQUE INDEX "UserNameIndex" ON "AspNetUsers" ("NormalizedUserName") WHERE [NormalizedUserName] IS NOT NULL; INSERT INTO "__EFMigrationsHistory" ("MigrationId", "ProductVersion") VALUES ('20180514204732_initial', '2.0.3-rtm-10026');