<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Сдвинуть и уплотнить &apos;серийные номера&apos; строк в Postgresql.</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8924.html</link>
    <description>База непрерывно собирает данные, периодически очищаю таблицу от ненужного старого. У каждой строки, в период времени между чистками, есть уникальный порядковый номер. Номера растут и после очистки нужно бы сдвинуть серийные номера к началу нумерации. При этом убирая &quot;зазоры&quot; в нумерации, зазоры появляются из-за удалений во время чистки.&lt;br&gt;&lt;br&gt;Как эффективнее сделать это?&lt;br&gt;&lt;br&gt;Мануал Postgresql в разделе &quot;8.1.4. Serial Types&quot; описывает способ создания уникальных серийных номеров для каждой строки в базе.&lt;br&gt;http://www.postgresql.org/files/documentation/pdf/8.4/postgresql-8.4.5-A4.pdf&lt;br&gt;Например, вот так:&lt;br&gt;CREATE TABLE tblnm ( sn SERIAL UNIQUE , event_day TIMESTAMP, event_description VARCHAR ) ;&lt;br&gt;Если есть более подходящий способ нумерации - могу способ из мануала заменить на другой.&lt;br&gt;&lt;br&gt;Сделал вот такой пример, модель того как у меня всё это могло бы работать:&lt;br&gt;&#091;code&#093;-- очистка примера&lt;br&gt;DROP TABLE tblnm ;&lt;br&gt;DROP TABLE tblnm_buffer ;&lt;br&gt;&lt;br&gt;-- создать таблицу, со столбцом &apos;sn&apos; для серийных номеров&lt;br&gt;CREATE TABLE tblnm ( sn SE</description>

<item>
    <title>Сдвинуть и уплотнить &apos;серийные номера&apos; строк в Postgresql. (pavel_simple)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8924.html#4</link>
    <pubDate>Fri, 12 Nov 2010 10:35:47 GMT</pubDate>
    <description>&amp;gt;&amp;gt; Спасибо. Действительно ведь:&lt;br&gt;&amp;gt;&amp;gt; &#091;code&#093;BEGIN ;&lt;br&gt;&amp;gt;&amp;gt;    ALTER TABLE tblnm DROP COLUMN sn ;&lt;br&gt;&amp;gt;&amp;gt;    ALTER TABLE tblnm ADD COLUMN sn SERIAL UNIQUE ;&lt;br&gt;&amp;gt;&amp;gt; END;&#091;/code&#093;&lt;br&gt;&amp;gt;&amp;gt; Использование типа serial unique приводит к автоматическому выполнению нужных операций&lt;br&gt;&amp;gt;&amp;gt; с последовательностями. Как я понимаю.&lt;br&gt;&amp;gt; А установить новый текущий номер для последовательности это слишком сложно?&lt;br&gt;&amp;gt; SELECT pg_catalog.setval(&apos;ефиду_seq&apos;, 12345, true);&lt;br&gt;&lt;br&gt;тогда у него при попытке записи случится неприятное -- &quot;поле с таким номером уже существует&quot;&lt;br&gt;а так-то да -- seq отредактировал и рад.&lt;br&gt;</description>
</item>

<item>
    <title>Сдвинуть и уплотнить &apos;серийные номера&apos; строк в Postgresql. (gibbon)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8924.html#3</link>
    <pubDate>Fri, 12 Nov 2010 10:00:55 GMT</pubDate>
    <description>&amp;gt; Спасибо. Действительно ведь:&lt;br&gt;&amp;gt; &#091;code&#093;BEGIN ;&lt;br&gt;&amp;gt;    ALTER TABLE tblnm DROP COLUMN sn ;&lt;br&gt;&amp;gt;    ALTER TABLE tblnm ADD COLUMN sn SERIAL UNIQUE ;&lt;br&gt;&amp;gt; END;&#091;/code&#093;&lt;br&gt;&amp;gt; Использование типа serial unique приводит к автоматическому выполнению нужных операций&lt;br&gt;&amp;gt; с последовательностями. Как я понимаю.&lt;br&gt;&lt;br&gt;А установить новый текущий номер для последовательности это слишком сложно?&lt;br&gt;SELECT pg_catalog.setval(&apos;ефиду_seq&apos;, 12345, true);&lt;br&gt;</description>
</item>

<item>
    <title>Сдвинуть и уплотнить &apos;серийные номера&apos; строк в Postgresql. (Af.)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8924.html#2</link>
    <pubDate>Fri, 12 Nov 2010 06:50:55 GMT</pubDate>
    <description>Спасибо. Действительно ведь:&lt;br&gt;&#091;code&#093;BEGIN ;&lt;br&gt;   ALTER TABLE tblnm DROP COLUMN sn ;&lt;br&gt;   ALTER TABLE tblnm ADD COLUMN sn SERIAL UNIQUE ;&lt;br&gt;END;&#091;/code&#093;&lt;br&gt;&lt;br&gt;Использование типа serial unique приводит к автоматическому выполнению нужных операций с последовательностями. Как я понимаю.&lt;br&gt;</description>
</item>

<item>
    <title>Сдвинуть и уплотнить &apos;серийные номера&apos; строк в Postgresql. (pavel_simple)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8924.html#1</link>
    <pubDate>Thu, 11 Nov 2010 18:46:37 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;     INSERT INTO tblnm ( event_day ) SELECT event_day&lt;br&gt;&amp;gt; FROM tblnm_buffer;&lt;br&gt;&amp;gt; END ;&lt;br&gt;&amp;gt; -- Из старой таблицы запись с номером 3&lt;br&gt;&amp;gt; -- перешла в новую таблицу и новый номер = 1.&lt;br&gt;&amp;gt; -- Т.е. остались только нужные данные и&lt;br&gt;&amp;gt; -- номера сдвинуты к началу нумерации,&lt;br&gt;&amp;gt; -- нумерация оставщихся снова с единицы.&lt;br&gt;&amp;gt; SELECT * FROM tblnm ;&#091;/code&#093;&lt;br&gt;&amp;gt; Можно сдвиг и уплотнение нумерации, выполнение блока BEGIN-END оптимизировать, ускорить?&lt;br&gt;&lt;br&gt;убираете sequence с таблицы, если это поле является primary key (что чаще всего), удаляете primary key, убиваете сам sequece.&lt;br&gt;&lt;br&gt;ставите на таблицу те данные которые быть должны&lt;br&gt;создаёте новый seq со стартовым +1 от максимального в таблице&lt;br&gt;привязываете seq&lt;br&gt;привязываете primary,если необходимо.&lt;br&gt;&lt;br&gt;постановка задачи -- изврат&lt;br&gt;</description>
</item>

</channel>
</rss>
