Thread: Вопрос по нумерации

Вопрос по нумерации

From
Владимир Комаров
Date:

Есть таблица. Есть столбец Х .

Необходимо внести строку так, чтобы номер, попадаемый в Х был минимальным уникальным.

Например, есть строки: 1,2,3,4,6,7,9

Значит новая строка должна быть с номером 5

Как это сделать максимально быстро?

 

 

Re: [pgsql-ru-general] Вопрос по нумерации

From
Alexey Vasiliev
Date:

На алгоритмах есть такое:

http://algolist.manual.ru/olimp/poi_sol.php#a10 Thursday, 27 August 2015, 06:26PM +03:00 from Владимир Комаров <vlads@sibnet.ru>:

Есть таблица. Есть столбец Х .

Необходимо внести строку так, чтобы номер, попадаемый в Х был минимальным уникальным.

Например, есть строки: 1,2,3,4,6,7,9

Значит новая строка должна быть с номером 5

Как это сделать максимально быстро?

 

 

Re: [pgsql-ru-general] Вопрос по нумерации

From
Виктор Вислобоков
Date:
Я бы решил так. Создал бы таблицу хранения удалённых номеров из других таблиц save_num и повесил бы триггеры.
При удалении номера из какой-либо таблицы, триггером вносилась бы запись с этим номеров в save_num.
При вставке новой записи в какую-либо таблицу, триггером проверялось бы наличие ранее сохраннённых номеров для этой таблицы в save_num, откуда выбирался бы минимальный с последующим удалением его из save_num. Вот и всё собственно

27 августа 2015 г., 18:26 пользователь Владимир Комаров <vlads@sibnet.ru> написал:

Есть таблица. Есть столбец Х .

Необходимо внести строку так, чтобы номер, попадаемый в Х был минимальным уникальным.

Например, есть строки: 1,2,3,4,6,7,9

Значит новая строка должна быть с номером 5

Как это сделать максимально быстро?

 

 


Re: [pgsql-ru-general] Вопрос по нумерации

From
Андрей Зевакин
Date:
create table if not exists t (id int);
delete from t;
insert into t values (1), (2), (3), (4), (6), (7), (9);
with q as (select id from t order by id desc limit 1),
s as (select g as id from q, generate_series(1, q.id) as g),
e as (
select id from s
except
select id from t
)
select id from e
order by id
limit 1

С уважением, Андрей Зевакин.

27 августа 2015 г., 20:26 пользователь Владимир Комаров <vlads@sibnet.ru> написал:

Есть таблица. Есть столбец Х .

Необходимо внести строку так, чтобы номер, попадаемый в Х был минимальным уникальным.

Например, есть строки: 1,2,3,4,6,7,9

Значит новая строка должна быть с номером 5

Как это сделать максимально быстро?

 

 


RE: [pgsql-ru-general] Вопрос по нумерации

From
Владимир Комаров
Date:

Разобрался сам:

Оказалось проще простого:

SELECT max(x)+1 INTO n

SELECT xx INTO res FROM generate_series(2,n) xx

WHERE xx NOT IN (SELECT x FROM tbl) LIMIT 1

 

 

 

From: Владимир Комаров [mailto:vlads@sibnet.ru]
Sent: Thursday, August 27, 2015 11:17 PM
To: 'Alexey Vasiliev' <leopard_ne@inbox.ru>
Subject: RE: [pgsql-ru-general] Вопрос по нумерации

 

Спасибо, но этот вариант я знаю:

Сделать строку str:=1,2,3,4…n

Где SELECT max(x)+1 INTO n

А ПОТОМ нечто подобное:

SELECT xx INTO res from (SELECT regexp_split_to_table(str) xx) WHERE xx NOT IN (SELECT x FROM tbl) LIMIT 1

 

Но хотелось более элегантный способ формирования таблицы str или (regexp_split_to_table(str))

 

From: Alexey Vasiliev [mailto:leopard_ne@inbox.ru]
Sent: Thursday, August 27, 2015 10:42 PM
To:
Владимир Комаров <vlads@sibnet.ru>
Cc:
pgsql-ru-general@postgresql.org
Subject: Re: [pgsql-ru-general]
Вопрос по нумерации

 

На алгоритмах есть такое:

http://algolist.manual.ru/olimp/poi_sol.php#a10

Thursday, 27 August 2015, 06:26PM +03:00 from Владимир Комаров <vlads@sibnet.ru>:

Есть таблица. Есть столбец Х .

Необходимо внести строку так, чтобы номер, попадаемый в Х был минимальным уникальным.

Например, есть строки: 1,2,3,4,6,7,9

Значит новая строка должна быть с номером 5

Как это сделать максимально быстро?