2014-10-28 3 views
0

정렬되지 않은 값이있는 열이 하나있는 테이블이 있습니다. 이 열을 내림차순으로 정렬하고 열을 추가하여 순서를 기록하려고합니다. 내 SQL 코드는 다음과 같습니다 :정렬 된 열을 기반으로 직렬 열 추가

select * 
into newtable 
from oldtable 
order by column_name desc; 

alter table newtable add column id serial; 

이것이 내 목표를 구현합니까? PostgreSQL의 행에는 고정 된 순서가 없다는 것을 알고 있습니다. 그래서 나는 이것에 대해 확신하지 못한다.

+3

새 테이블을 만들 때'select .. into '를 사용하지 마십시오. 그것은 오래되고 쓸모없는 구문입니다. 표준 SQL 대신'create table ... as select ...'를 사용하십시오. –

+0

간단한 테스트 만하면 답을 얻을 수 있습니다. 지금까지 나는 당신의 코드에 대한 이슈를 보지 못했다. – vyegorov

+3

지금 어떤 문제를 해결하고 있습니까? 새 열은 "정렬되지 않은"것도 얻을 수 있습니다 (새 테이블 btw를 만들지 않고도 그렇게 할 수 있습니다). –

답변

2

SERIAL을 사용하여 ALTER TABLE을 (ab) 대신 (ab) 삽입 시간에 생성하십시오.

CREATE TABLE newtable (id serial unique not null, LIKE oldtable INCLUDING ALL); 

INSERT INTO newtable 
SELECT nextval('newtable_id_seq'), * 
FROM oldtable 
ORDER BY column_name desc; 

이렇게하면 테이블 재 작성을 피할 수 있으며 이전 방법과 달리 올바른 순서 지정이 보장됩니다.

(당신이이 PK되고 싶어하고, 이전 테이블에는 PK 없었다 경우, primary keyunique not null을 변경합니다. 이전 표는 constraints을 제외하는 LIKE 변형을 사용해야 할 겁니다 PK가 있다면).

+0

와우. 큰. 나는 전에 nextval 함수를 본 적이 없다. 너무 많이 배워야합니다. – Ben

+0

@Ben 어쨌든'nextval'을 명시 적으로 사용할 필요는 없습니다. 삽입 된 열에서'id'를 생략 할 수 있습니다. 이것은 컬럼 이름을 모를 때 작성하기가 쉬웠습니다. –

+0

이제 완전히 이해합니다. 당신의 도움을 주셔서 감사합니다. – Ben

관련 문제