powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ID Serial Sequence
25 сообщений из 27, страница 1 из 2
ID Serial Sequence
    #38564038
MySight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, вопрос начинающего.
Подскажите пожалуйста как в PG Admin создать

Поле ID с автоинкрементом, НО еще чтобы при удалении записей, выдаваемые значения опять начинались с 1

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
CREATE SEQUENCE qualseq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 6
  CACHE 1;
ALTER TABLE qualseq
  OWNER TO nurlan;

CREATE TABLE qual
(
  id integer NOT NULL DEFAULT nextval('qualseq'::regclass),
  name varchar(255),
  CONSTRAINT pk_qual PRIMARY KEY (id)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE qual
  OWNER TO nurlan;
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564069
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MySight,

Никак... штатными средствами sequences только в одну сторону крутятся.

PS: после удаления всего из таблицы сделать select setval('seqname', 1) - самый простой вариант.
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564117
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim BogukPS: после удаления всего из таблицы сделать select setval('seqname', 1) - самый простой вариант.
вот этого делать и ненадо. если будет другая транзакция делающяя INSERT, то id можем получить из сиквенса ещё до перезапуска, т.е. не 1.
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564183
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
TRUNCATE qual RESTART IDENTITY;


Главное чтоб прав хватило
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564209
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LonepsychoMaxim BogukPS: после удаления всего из таблицы сделать select setval('seqname', 1) - самый простой вариант.
вот этого делать и ненадо. если будет другая транзакция делающяя INSERT, то id можем получить из сиквенса ещё до перезапуска, т.е. не 1.

если идут параллельные втсавки то термин "удаление всего из таблицы" становится весьма философским...
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564262
MySight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SmeL_md
Код: sql
1.
TRUNCATE qual RESTART IDENTITY;


Главное чтоб прав хватило

Но ведь это полный перезапуск? Или я чего то не понимаю?
Просто я думал что можно средствами Postgresql-a реализовать проверку на недостающие (пробелы) и выдавать новым записям недостающие ID.
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564275
Фотография SmeL_md
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MySightSmeL_md
Код: sql
1.
TRUNCATE qual RESTART IDENTITY;


Главное чтоб прав хватило

Но ведь это полный перезапуск? Или я чего то не понимаю?
Просто я думал что можно средствами Postgresql-a реализовать проверку на недостающие (пробелы) и выдавать новым записям недостающие ID .тут таких вопросов здесь каждый десятый так что лучше почитайте вначале чем запускать мой запрос
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564403
MySight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SmeL_mdMySightпропущено...


Но ведь это полный перезапуск? Или я чего то не понимаю?
Просто я думал что можно средствами Postgresql-a реализовать проверку на недостающие (пробелы) и выдавать новым записям недостающие ID .тут таких вопросов здесь каждый десятый так что лучше почитайте вначале чем запускать мой запрос


эээх
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564542
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то афтар спрашивает про
http://www.postgresql.org/docs/8.2/static/sql-altersequence.html
раздел
ALTER SEQUENCE serial RESTART WITH 105;

а здешние умельцы умалчивают, как про очевидную глупость, следующее:

У вас были записи с id от 0 до 10000
вы удалили от 0 до 5000 и сделали рестарт секвенсу.

ок.

Все вылетит после 5000 вставок, пояснять почему?
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564544
Hawkmoon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что единственное разумное использование рестарта последовательности - да, в сочетание с truncate'ом.
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564620
MySight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
HawkmoonВообще-то афтар спрашивает про
http://www.postgresql.org/docs/8.2/static/sql-altersequence.html
раздел
ALTER SEQUENCE serial RESTART WITH 105;



Т.е. мне надо прописать какую то функцию использующую данный запрос?
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564630
MySight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MySightЗдравствуйте, вопрос начинающего.
Подскажите пожалуйста как в PG Admin создать

Поле ID с автоинкрементом, НО еще чтобы при удалении записей, выдаваемые значения опять начинались с 1



Вообще я неправильно поставил вопрос, Извините за путаницу.
Смотрите, есть записи в таблице с ID - 1 2 3 4
И допустим я удалил 2 и 3.
Как мне сделать так чтобы при следующем внесении записи, ID по умолчанию присвоилось 2 а потом 3 а потом 5?
Это делается в PostgreSQL? Или все таки все на программном уровне?
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564637
Sasha Alias
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Экономите номерки?
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564643
Lonepsycho
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564655
MySight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LonepsychoMySight,

чтото на подобии этого здесь обсуждалось


Уау спасибо большое
...
Рейтинг: 0 / 0
ID Serial Sequence
    #38564657
MySight
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sasha AliasЭкономите номерки?

=)))))
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
ID Serial Sequence
    #39051476
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Переношу данные из Access, нужно настроить счётчики. Всё отлично, но один не работает... :( Что за хрень?
Пробую и так
Код: plsql
1.
select setval('Резерв_id_seq', (select max(id) from public.Резерв))


и так
Код: plsql
1.
select setval('Резерв_id_seq', (select max("id") from public."Резерв"))


отвечают
ОШИБКА: ошибка синтаксиса в имени
LINE 1: select setval('Резерв_id_seq', (select max("id") from public...
^
********** Ошибка **********

ОШИБКА: ошибка синтаксиса в имени
SQL-состояние: 42602
Символ: 15


Работает только
Код: plsql
1.
2.



и даже, бтяль, так не работает

Код: plsql
1.
2.
3.
4.
DECLARE @a;
SET @a = SELECT max("id") FROM public."Резерв";
PRINT @a;
ALTER SEQUENCE Резерв_id_seq RESTART WITH @a; 


[QUERY ] SELECT max("id") FROM public."Резерв"
[PGSCRIPT ] (340829)
[WARNING ] ALTER SEQUENCE Резерв_id_seq RESTART WITH (340829)
ОШИБКА: ошибка синтаксиса (примерное положение: "(")
LINE 1: ALTER SEQUENCE Резерв_id_seq RESTART WITH (340829)


Пока настроил вручную, но это первых 10 тестовых таблиц из 500... Если так дело пойдёт - дело табак...

П.с. На 9 таблицах setval отлично работает...
...
Рейтинг: 0 / 0
ID Serial Sequence
    #39051485
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шыфл,

1)Не использовать русские имена у таблиц и прочего... нездоровое это дело.
2)Если же очень хочется то быть готовым к тому что имена придется всегда в двойных кавычках брать.
Я бы попробовал ALTER SEQUENCE "Резерв_id_seq" RESTART WITH 340829;
(с двойными кавычками и без скобок вокруг числа).

PS: не стоит забывать что в отличии от английского текста у русского языка есть много разных кодировок да.
...
Рейтинг: 0 / 0
ID Serial Sequence
    #39051488
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,
Код: plsql
1.
ALTER SEQUENCE "Резерв_id_seq" RESTART WITH 340829;


это конечно работает, спору нет
И даже, как выяснилось, так работает
Код: plsql
1.
2.
3.
4.
5.
6.
DECLARE @a;
SET @a = SELECT max("id") FROM public."Резерв";
PRINT @a;
SET @a = CAST (@a AS INTEGER);
PRINT @a;
ALTER SEQUENCE Резерв_id_seq RESTART WITH @a; 



Но что-то мне всё это не нравится...
...
Рейтинг: 0 / 0
ID Serial Sequence
    #39051506
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

а не нравится мне это потому, что в Accesse не работает PLSQL (или я пока не понял, как ему его скормить)


Код: plsql
1.
2.
3.
con.Execute "DECLARE @a; " & _
"SET @a = CAST((SELECT max(id) FROM public.Резерв) AS INTEGER); " & _
"ALTER SEQUENCE Резерв_id_seq RESTART WITH @a;"


Говорит что
AccessОШИБКА: ошибка синтаксиса (примерное положение: "@")
LINE 1: DECLARE @a;
...
Рейтинг: 0 / 0
ID Serial Sequence
    #39051543
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ШыфлMaxim Boguk,

а не нравится мне это потому, что в Accesse не работает PLSQL (или я пока не понял, как ему его скормить)


Код: plsql
1.
2.
3.
con.Execute "DECLARE @a; " & _
"SET @a = CAST((SELECT max(id) FROM public.Резерв) AS INTEGER); " & _
"ALTER SEQUENCE Резерв_id_seq RESTART WITH @a;"


Говорит что
AccessОШИБКА: ошибка синтаксиса (примерное положение: "@")
LINE 1: DECLARE @a;


а RTFM не пробовали ?

Если DECLARE, то только в plpgsql, а это -- в блоке DO , здесь вам не TSQL с общим контекстом

вот что мне не нравится -- это наплыв долбоклювов в пж, с гонором
...
Рейтинг: 0 / 0
ID Serial Sequence
    #39051559
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,
RT в процессе, только может подскажете, где это FM лежит, а то единственное, что пока нашёл это http://www.pgadmin.org/docs/dev/pgscript.html

А там никаких блоков DO не описывается... Так что если на пальцах объясните, буду очень благодарен. Ну, и ссылочка не помешает
...
Рейтинг: 0 / 0
ID Serial Sequence
    #39051596
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шыфлqwwq,
RT в процессе, только может подскажете, где это FM лежит, а то единственное, что пока нашёл это http://www.pgadmin.org/docs/dev/pgscript.html

А там никаких блоков DO не описывается... Так что если на пальцах объясните, буду очень благодарен. Ну, и ссылочка не помешает
при чом тут скриптовой язык левой шняги ?
вы же из аксесса вызываете запрос.
так вот, он должен быть написан на языке сервера субд, а не левой шняги "пжодмин"

все инструкции SQL -- тут:
http://www.postgresql.org/docs/current/static/sql-commands.html

вас интересует возможность перейти к процедурному языку. Это тут:
http://www.postgresql.org/docs/current/static/sql-do.html

а сама работа с конкретными процедурными языками -- тут:
http://www.postgresql.org/docs/current/static/server-programming.html

ну и т.п.
...
Рейтинг: 0 / 0
ID Serial Sequence
    #39051625
Шыфл
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwq,

Ага, понятно... Уже лучше
Код: vbnet
1.
2.
3.
4.
5.
6.
d.Execute "DO $$ " & _
"DECLARE a integer; " & _
"Begin " & _
"a := CAST((SELECT max(id) FROM public.Резерв) AS INTEGER); " & _
"Execute 'ALTER SEQUENCE Резерв_id_seq RESTART WITH ' || a; " & _
"end $$ LANGUAGE plpgsql;"



Так заработало... Только вот Execute на Execute - это сила :)

П.с. За ссылочки - мерси
...
Рейтинг: 0 / 0
ID Serial Sequence
    #39051815
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Шыфлqwwq,

Ага, понятно... Уже лучше
Код: vbnet
1.
2.
3.
4.
5.
6.
d.Execute "DO $$ " & _
"DECLARE a integer; " & _
"Begin " & _
"a := CAST((SELECT max(id) FROM public.Резерв) AS INTEGER); " & _
"Execute 'ALTER SEQUENCE Резерв_id_seq RESTART WITH ' || a; " & _
"end $$ LANGUAGE plpgsql;"



Так заработало... Только вот Execute на Execute - это сила :)

П.с. За ссылочки - мерси

заставь альтернативно умудрённого -- богу молиться -- и лбу его выпадут суровые испытания.

Попобуйте в разных вариантах из пжодмина:
Код: sql
1.
2.
SELECT 'Резерв_id_seq'::regclass
, '"Резерв_id_seq"'::regclass



и отпишитесь, если найдете.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ID Serial Sequence
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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