Проблемы с добавлением записей в таблицу из-за поля timestamp

Только начал изучать PostgreSQL, возникла непонятная для меня ошибка.

Есть таблица, создавалась командами:

create table ts_test03
(
id timestamp(6) with time zone not null default current_timestamp,
val bigint
);

alter table ts_test03 add primary key (id);

В PostgreSQL Studio скрипт создания выглядит так:

CREATE TABLE public."ts_test03" (
id timestamp(6) with time zone NOT NULL PRIMARY KEY,
val bigint
)

В описании столбцов таблицы в поле Default в строке "id" стоит "now()".

Есть функция:

CREATE FUNCTION public."ts_test03load"(cnt integer) RETURNS void AS $$
DECLARE
ts timestamp(6) with time zone;
BEGIN
FOR i IN 1..cnt LOOP
ts := now();
insert into ts_test03 (id,val) values (ts,i);
END LOOP;
END;

$$ LANGUAGE plpgsql;

При вызове её:
select ts_test03load(100);

получаю ошибку
ERROR: duplicate key value violates unique constraint "ts_test03_pkey"
DETAIL: Key (id)=(2016-11-10 10:02:00.027207+02) already exists.
CONTEXT: SQL statement "insert into ts_test03 (id,val) values (ts,i)"
PL/pgSQL function ts_test03load(integer) line 8 at SQL statement
STATEMENT: select ts_test03load(10) LIMIT 5

Пробовал вариант функции без явного указания поля "id" (чтобы срабатывало значение now() из default) - результат тот же

CREATE OR REPLACE FUNCTION ts_test03load1(cnt integer) RETURNS void AS $$
BEGIN
FOR i IN 1..cnt LOOP
insert into ts_test03 (val) values (i);
END LOOP;
END;
$$ LANGUAGE plpgsql;

ERROR: duplicate key value violates unique constraint "ts_test03_pkey"
DETAIL: Key (id)=(2016-11-10 10:06:32.237613+02) already exists.
CONTEXT: SQL statement "insert into ts_test03 (val) values (i)"
PL/pgSQL function ts_test03load1(integer) line 4 at SQL statement
STATEMENT: select ts_test03load1(10) LIMIT 5

В чём проблема?

Вопрос снимается - здесь нашёл ответ https://www.postgresql.org/docs/current/static/functions-datetime.html#F...

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

пример явно показывает что

пример явно показывает что primary key по timestamp не самая лучшая идея

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023