Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ID Serial Sequence / 25 сообщений из 27, страница 1 из 2
18.02.2014, 10:42
    #38564038
MySight
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
Здравствуйте, вопрос начинающего.
Подскажите пожалуйста как в 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
18.02.2014, 10:55
    #38564069
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
MySight,

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

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


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

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


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

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


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

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


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


эээх
...
Рейтинг: 0 / 0
18.02.2014, 14:05
    #38564542
Hawkmoon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
Вообще-то афтар спрашивает про
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
18.02.2014, 14:06
    #38564544
Hawkmoon
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
Так что единственное разумное использование рестарта последовательности - да, в сочетание с truncate'ом.
...
Рейтинг: 0 / 0
18.02.2014, 14:41
    #38564620
MySight
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
HawkmoonВообще-то афтар спрашивает про
http://www.postgresql.org/docs/8.2/static/sql-altersequence.html
раздел
ALTER SEQUENCE serial RESTART WITH 105;



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

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



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

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


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

=)))))
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
15.09.2015, 09:40
    #39051476
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
Переношу данные из 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
15.09.2015, 09:52
    #39051485
Maxim Boguk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
Шыфл,

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

PS: не стоит забывать что в отличии от английского текста у русского языка есть много разных кодировок да.
...
Рейтинг: 0 / 0
15.09.2015, 09:59
    #39051488
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
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
15.09.2015, 10:10
    #39051506
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
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
15.09.2015, 10:24
    #39051543
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
Шыфл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
15.09.2015, 10:33
    #39051559
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
qwwq,
RT в процессе, только может подскажете, где это FM лежит, а то единственное, что пока нашёл это http://www.pgadmin.org/docs/dev/pgscript.html

А там никаких блоков DO не описывается... Так что если на пальцах объясните, буду очень благодарен. Ну, и ссылочка не помешает
...
Рейтинг: 0 / 0
15.09.2015, 10:54
    #39051596
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
Шыфл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
15.09.2015, 11:23
    #39051625
Шыфл
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
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
15.09.2015, 13:59
    #39051815
qwwq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ID Serial Sequence
Шыфл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
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / ID Serial Sequence / 25 сообщений из 27, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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