LINUX.ORG.RU
решено ФорумAdmin

Перестроить внутренний индекс таблицы Postgresql

 


1

2

Надо, чтобы в таблице данные шли отсортированными по столбцу, чтобы можно было сделать нормальный индекс. Если просто последовательность применять получается сплошной рандом.

Когда-то находил в поисковиках, сейчас вообще не в какую.

Перемещено leave из talks

★★★★

Ответ на: комментарий от UVV

Мне надо заполнить столбец id обычной последовательностью привязанной к столбцу с timestamp.

Если делать так:

CREATE SEQUENCE idseq;
UPDATE table SET id = NEXTVAL('idseq');

ID получается несколько произвольным. Я помню, что вроде как надо было копировать таблицу так, чтобы перестроились внутренние порядковые номера и тогда последовательность нормально накладывалась.

ViTeX ★★★★ ()
Последнее исправление: ViTeX (всего исправлений: 1)
Ответ на: комментарий от ViTeX
create function f1(sqname varchar) returns integer as $$
declare
    s record;
begin
   for s in (select id from tablename order by id) loop
      update tablename set fieldname=nextval(sqname) where id = s.id;
   end loop;
   return 0;
end;
$$ language plpgsql;
select f1('mys_sequence');
no-dashi ★★★★★ ()
Ответ на: комментарий от no-dashi

Чего-то этот скрипт уже часов пять делает, так и не завершился. :(

ViTeX ★★★★ ()
Ответ на: комментарий от Shadow

Я немного неправильно выразился, под индексом я подразумевал автозаполняемое поле таблицы с порядковым номером.

ViTeX ★★★★ ()
Последнее исправление: ViTeX (всего исправлений: 1)

К часу ночи шестерни в голове таки раскрутились и выдали результат:

CREATE TABLE replace_tab AS (SELECT * FROM orig_tab ORDER BY datetime ASC);

Далее делаю столбец с типом SERIAL и всё.

ViTeX ★★★★ ()
Ответ на: комментарий от ViTeX

Ещё это не забудь:
http://wiki.postgresql.org/wiki/Fixing_Sequences

А вообще я имел ввиду, что это вообще не должно тебя заботить by design - по этим значениям делать только связи, что-то более осмысленное - отдельными полями.

Shadow ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.