2017-02-22 18 views
0

Как сделать, чтобы изменить столбец таблицы в последовательном порядке. Этот столбец уже DATAS в нем, и я не хочу их потерял .. Я попытался это:Изменить тип данных столбца на последовательный postgresql

ALTER TABLE tbl_user ADD COLUMN usr_id SERIAL PRIMARY KEY; 

я получаю эту ошибку

ERROR: column "usr_id" of relation "tbl_user" already exists ********** Erreur **********

я попытался это также:

UPDATE tbl_user SET usr_id = nextval('seq_user') WHERE usr_id IS NULL;

Query returned successfully: 0 rows affected, 71 msec execution time.

запрос повернуть, но успешным не меняет колонка типа

+0

См. Также [Добавление «serial» в существующий столбец в Postgres] (http://stackoverflow.com/questions/9490014/adding-serial-to-existing-column-in-postgres) и [намного больше] (http: //stackoverflow.com/search?q=%5Bpostgresql%5D+alter+serial) ... – pozs

+0

благодарит за помощь – Kamfasage

+1

Очень похожий вопрос был задан и ответил в [http://stackoverflow.com/ques/12591207/how-to-convert-integer-to-serial] (http://stackoverflow.com/questions/12591207/how-to-convert-integer-to-serial) - это поможет? –

ответ

0

serial - псевдо-тип. Это действительно целое число, поэтому у вас уже есть половина. Чего не хватает, чтобы назначить последовательность в качестве значения по умолчанию:

alter table tbl_user 
alter column usr_id set default nextval('seq_user') 

Но перед этим необходимо найти наибольшее значение usr_id и установить его в качестве минимального значения последовательности + 1:

select max(usr_id) from tbl_user; 

alter sequence seq_user minvalue 1001