Генерация уникального идентификатора для добавления записей в PostgreSQL

0

Я использую один запрос postgreSql, который заполняет одну таблицу с некоторыми значениями, и он принимает другой параметр при запуске. Я добавляю строки каждый раз, когда я запускаю запрос с другим параметром. Теперь я заинтересован в предоставлении одного автоматически сгенерированного идентификатора для всех строк, которые поступают в качестве выходных данных для одного набора параметров. Так что я могу получить доступ к тем строкам, которые принадлежат определенные параметры.

Может кто-нибудь помочь мне, как добавлять строки каждый раз с одним столбцом уникального идентификатора?

Теги:
database

3 ответа

0

Вы можете использовать serial (или bigserial для bigint) в качестве типов столбцов.

На самом деле они являются своего рода оболочками для целочисленных и больших целочисленных типов, которые автоматически настраивают значение по умолчанию для nextval() специальной последовательности, которую он также создает для вас под капотом.

Чтобы добавить такое поле, вам нужно выполнить только следующее предложение:

alter table your_table add column id serial primary key;

(Корректировка имен таблиц и столбцов в зависимости от того, что вы хотите/нужно).

Очевидно, что если вы еще не создали таблицу, вы можете просто добавить поле, указав его как serial в объявлении таблицы. Но не забудьте также объявить его как primary key чтобы гарантировать, что он рассматривается как таковой.

Это создаст и заполнит (из-за присущего ему значения по умолчанию) идентификатор столбца с последовательными номерами в одной транзакции.

Имейте в виду, что в зависимости от размера таблицы это может занять значительное время.

Кроме того, для больших таблиц вам может понадобиться использовать bigserial вместо serial.

Что касается получения идентификатора, назначенного только что вставленной строке, вы можете добавить к оператору вставки returning id предложение returning id, которое заставит его действовать как выборка, возвращающая строку (или несколько строк, если вставлять несколько строк с одним оператором) вместе с ним ( Конечно, вы также можете использовать returning * или returning _whatever_columns_you_want_.

0

Похоже, вы хотите отслеживать "runid", который основан на параметре. Это будет отдельный объект. Я хотел бы предложить такую структуру данных:

create table runs (
    runid serial primary key,
    parameter varchar(255),
    createdAt timestamp default current_timestamp
);

Тогда вы бы включать runid в таблице с внешним ключом ссылкой на runs.

Наконец, вы можете вставить в таблицу, выполнив:

with r as (
      insert into runs (v_parameter)
          values (parameter)
          returning *
     )
insert into yourtable ( . . . , runid)
    select . . ., r.runid
    from . . . cross join
         r;
0

Вы можете использовать инструкцию RETURNING чтобы получить возвращаемый идентификатор

INSERT INTO Table1 (...) VALUES (...)
RETURNING idCol;

синтаксис

RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
  • 0
    Это возвращающее утверждение не работает для меня в базе данных postgreSQL.
  • 0
    почему не работает? что такое сообщение об ошибке?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню