Error syntax error at or near generated

Getting an error on generating some Identity Framework tables: fail: Microsoft.EntityFrameworkCore.Database.Command[20102] Failed executing DbCommand (14ms) [Parameters=[], CommandType='Text&#3...

Getting an error on generating some Identity Framework tables:

fail: Microsoft.EntityFrameworkCore.Database.Command[20102]
      Failed executing DbCommand (14ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      CREATE TABLE "AspNetRoleClaims" (
          "Id" integer NOT NULL GENERATED BY DEFAULT AS IDENTITY,
          "RoleId" uuid NOT NULL,
          "ClaimType" text NULL,
          "ClaimValue" text NULL,
          CONSTRAINT "PK_AspNetRoleClaims" PRIMARY KEY ("Id"),
          CONSTRAINT "FK_AspNetRoleClaims_Roles_RoleId" FOREIGN KEY ("RoleId") REFERENCES "Roles" ("Id") ON DELETE CASCADE
      );
Npgsql.PostgresException (0x80004005): 42601: syntax error at or near "GENERATED"

   at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Npgsql.NpgsqlConnector.<>c__DisplayClass161_0.<<ReadMessage>g__ReadMessageLong|0>d.MoveNext() in C:projectsnpgsqlsrcNpgsqlNpgsqlConnector.cs:line 1032
--- End of stack trace from previous location where exception was thrown ---
   at Npgsql.NpgsqlDataReader.NextResult(Boolean async, Boolean isConsuming) in C:projectsnpgsqlsrcNpgsqlNpgsqlDataReader.cs:line 444
   at Npgsql.NpgsqlDataReader.NextResult() in C:projectsnpgsqlsrcNpgsqlNpgsqlDataReader.cs:line 332
   at Npgsql.NpgsqlCommand.ExecuteDbDataReader(CommandBehavior behavior, Boolean async, CancellationToken cancellationToken) in C:projectsnpgsqlsrcNpgsqlNpgsqlCommand.cs:line 1219
   at Npgsql.NpgsqlCommand.ExecuteNonQuery(Boolean async, CancellationToken cancellationToken) in C:projectsnpgsqlsrcNpgsqlNpgsqlCommand.cs:line 1042
   at Npgsql.NpgsqlCommand.ExecuteNonQuery() in C:projectsnpgsqlsrcNpgsqlNpgsqlCommand.cs:line 1025
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.Execute(IRelationalConnection connection, DbCommandMethod executeMethod, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommand.ExecuteNonQuery(IRelationalConnection connection, IReadOnlyDictionary`2 parameterValues)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.MigrationCommandExecutor.ExecuteNonQuery(IEnumerable`1 migrationCommands, IRelationalConnection connection)
   at Microsoft.EntityFrameworkCore.Migrations.Internal.Migrator.Migrate(String targetMigration)
[... my app here]

As far as I can tell, the GENERATED keyword isn’t valid on Postgres 9.x, that’s a thing in 10.x. I’d just upgrade but Google Cloud SQL only supports 9.6….

Я пытаюсь выяснить, как настроить основной проект .net в Linux, используя Postgresql в качестве сервера базы данных.

Я начал с проекта по умолчанию .net core 2.2 web api, который предоставляет вам объект WeatherForecast.

Я добавил к этому идентификатор, аннотировал его ключом и произвел первоначальную миграцию;

    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "WeatherForecasts",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
                Date = table.Column<DateTime>(nullable: false),
                TemperatureC = table.Column<int>(nullable: false),
                Summary = table.Column<string>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_WeatherForecasts", x => x.Id);
            });
    }

Когда я пытаюсь применить миграцию, я получаю следующую ошибку;

Npgsql.PostgresException (0x80004005): 42601: syntax error at or near "GENERATED"

Ошибка говорит о том, что в базе данных есть проблема со словом «GENERATED»

Отладчик показывает точный запрос к базе данных;

CREATE TABLE "WeatherForecasts" (
    "Id" integer NOT NULL GENERATED BY DEFAULT AS IDENTITY,
    "Date" timestamp without time zone NOT NULL,
    "TemperatureC" integer NOT NULL,
    "Summary" text NULL,
    CONSTRAINT "PK_WeatherForecasts" PRIMARY KEY ("Id")
);

Я открыл окно терминала и подключился к postgresql cli и напрямую попытался создать, это подтвердило, что слово GENERATED вызывало ошибку.

Любые идеи относительно того, что относится к этому GENERATED? Нужно ли устанавливать другую версию postgres? (сейчас 9.6.15)

Мой CsProj имеет следующие пакеты для Entity Framework и Postgresql;

"Microsoft.EntityFrameworkCore.Design" Version="3.0.0"

"Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.0.0"

"Npgsql.EntityFrameworkCore.PostgreSQL.Design" Version="1.1.1"

Большое спасибо

2 ответа

Лучший ответ

Похоже, вы активируете функцию IDENTITY columns, которая была представлена только в PostgreSQL 10. Я предлагаю вам перейти на более новую версию PostgreSQL.

См. https: // dba.stackexchange.com/questions/198777/how-to-add-a-postgresql-10-identity-column-to-an-existing-table

«Microsoft.EntityFrameworkCore.Design» Version = «3.0.0»

«Npgsql.EntityFrameworkCore.PostgreSQL» Version = «3.0.0»

«Npgsql.EntityFrameworkCore.PostgreSQL.Design» Version = «1.1.1» `

Кроме того, установленные вами пакеты предназначены для asp.net core 3.0, но у вас, похоже, есть проект web api asp.net core 2.2, который может не поддерживаться.


1

Ryan
30 Сен 2019 в 02:51

Если по каким-то причинам вам нравится использовать старый PostgreSQL (я лично это понимаю), вы можете указать свою версию в переопределенном методе OnConfiguring. У меня работает отлично

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseNpgsql("Server=127.0.0.1;Port=5432;Database=fantyPayments;User Id=postgres;Password = postgres;", options =>
            {
                options.SetPostgresVersion(new Version("9.6"));
            });
            base.OnConfiguring(optionsBuilder);
        }

Проверьте дополнительные параметры для класса Version. Это может помочь вам со многими проблемами.

Ошибка с синтаксисом на этом этапе связана с большими изменениями в версии 10.* PostgreSQL. Драйвер Npgsql по умолчанию для EF Core установлен на новейшую версию PostgreSQL.

Как писал @Xing Zou, функция IDENTITY columns является причиной, по которой вы не можете использовать синтаксис PgSQL 10.* в версии PgSQL 9.*.


1

Kamil
23 Мар 2020 в 10:11

На чтение 2 мин Просмотров 714 Опубликовано 05.09.2022

Многие пользователи сталкиваются с ошибка 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». В результате будет выполнено подключение к локальной серверной базы.

Понравилась статья? Поделить с друзьями:
  • Error syntax error at or near call
  • Error syncing pod skipping
  • Error synchronizing data with database
  • Error synchronizing after initial wipe timed out waiting for object
  • Error sync firefox