powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / проблемы с nextval
12 сообщений из 12, страница 1 из 1
проблемы с nextval
    #39554680
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги,
Помогите решить проблему, в MSSQL это работало!

Есть первичный ключ типа SERIAL.

Делаю вставку из скрипта и указываю значения ключа в явном виде (это нужно по бизнесу)

insert into S_ACCOUNT (ACCOUNTID,CREATED) values (1, current_timestamp);
все работает,
но после того как добавлю новую запись через функцию
insert into S_ACCOUNT(CREATED) values (current_timestamp)

пишет ошибку что '1' уже присоен записи.

В MSSQL то решалось опцией IDENTITY_INSERT. После ее выключения, после вставки напрямую через скрипт ключи генерились с учетом уже занятых id.

Как решить эту неожиданную проблему?
...
Рейтинг: 0 / 0
проблемы с nextval
    #39554706
Victor Nevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewew,

не верю!!!

тестовый пример в студию
...
Рейтинг: 0 / 0
проблемы с nextval
    #39554708
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Nevsky,
create table S_ACCOUNT (
ACCOUNTID SERIAL not null,
CREATED TIMESTAMP not null
);

alter table S_ACCOUNT
add constraint PK_S_ACCOUNT primary key (ACCOUNTID);

/*==============================================================*/
/* Index: XP_ACCOUNTID */
/*==============================================================*/
create unique index XP_ACCOUNTID on S_ACCOUNT (
ACCOUNTID
);
...
Рейтинг: 0 / 0
проблемы с nextval
    #39554709
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewew,
insert into S_ACCOUNT (ACCOUNTID,CREATED) values (1, current_timestamp);

insert into S_ACCOUNT (ACCOUNTID,CREATED) values (2, current_timestamp);
...
Рейтинг: 0 / 0
проблемы с nextval
    #39554710
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewew,
drop function SystemAccount_Add;

CREATE OR REPLACE FUNCTION SystemAccount_Add (
UserId integer)
RETURNS integer AS
$BODY$
declare newAccountid integer = null;

BEGIN

insert into S_ACCOUNT(CREATED)
values (current_timestamp) RETURNING ACCOUNTID INTO STRICT newAccountid;
-- обработчик ошибок
return newAccountid;
END
$BODY$
LANGUAGE 'plpgsql';
...
Рейтинг: 0 / 0
проблемы с nextval
    #39554712
Victor Nevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewewwewewew,
insert into S_ACCOUNT (ACCOUNTID,CREATED) values (1, current_timestamp);

insert into S_ACCOUNT (ACCOUNTID,CREATED) values (2, current_timestamp);

и кто, sequence, скажет, что оно не используется (обновись ....))))
setval в помощь ....

зы
что за ересь ...
и зачем тут serial ....?
...
Рейтинг: 0 / 0
проблемы с nextval
    #39554714
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewew,

SERIAL в Postgres-е — суть последовательность, владельцем которой является колонка в таблице и этой колонке присваивается `DEFAULT nextval()` выражение (синтаксическая обёртка).
Если вы будете руками вставлять значения в эту колонку, то последовательность не будет меняться, что и приведёт к ошибке, которую вы видите.

Вместо `VALUES (1, current_timestamp)` можно использовать `VALUES (nextval(), current_timestamp)`.
...
Рейтинг: 0 / 0
проблемы с nextval
    #39554828
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorovwewewew,

SERIAL в Postgres-е — суть последовательность, владельцем которой является колонка в таблице и этой колонке присваивается `DEFAULT nextval()` выражение (синтаксическая обёртка).
Если вы будете руками вставлять значения в эту колонку, то последовательность не будет меняться, что и приведёт к ошибке, которую вы видите.

Вместо `VALUES (1, current_timestamp)` можно использовать `VALUES (nextval(), current_timestamp)`.
Большое спасибо! Заработало!
...
Рейтинг: 0 / 0
проблемы с nextval
    #39554830
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Nevsky,
serial как я понял используют для первичных ключей с автоинкриментом.
Разве нет?
...
Рейтинг: 0 / 0
проблемы с nextval
    #39554854
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewew,

vyegorov вам уже написал, что SERIAL это обёртка. по факту это INTEGER с DEFAULT nextval('table_id_field_name.seq').
...
Рейтинг: 0 / 0
проблемы с nextval
    #39554861
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wewewew,

почитайте про SERIAL и про сиквенсы , а праймари кей из поля делает индекс .
...
Рейтинг: 0 / 0
проблемы с nextval
    #39555105
wewewew
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lonepsychowewewew,

почитайте про SERIAL и про сиквенсы , а праймари кей из поля делает индекс .

Спасибо! Теперь у меня у меня заработала и ручная и автоматическая вставка!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / проблемы с nextval
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]