PostgreSQL에서 기존 테이블에 자동 증분 기본 키를 추가하는 방법은 무엇입니까?
기존 데이터가 있는 테이블이 있습니다.테이블을 삭제하고 다시 만들지 않고 기본 키를 추가하는 방법이 있습니까?
(업데이트 - 댓글을 달아주신 분들께 감사드립니다)
현대판 포스트그레SQL
이름이 지정된 테이블이 있다고 가정합니다.test1
자동 증분 기본 키를 추가할 위치id
(아래)란다음 명령은 최신 버전의 Postgre에서 충분해야 합니다.SQL:
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
Postgre의 이전 버전SQL
이전 버전의 PostgreSQL(8.x 이전 버전)에서는 모든 더러운 작업을 수행해야 했습니다.다음과 같은 일련의 명령이 이를 수행해야 합니다.
ALTER TABLE test1 ADD COLUMN id INTEGER;
CREATE SEQUENCE test_id_seq OWNED BY test1.id;
ALTER TABLE test1 ALTER COLUMN id SET DEFAULT nextval('test_id_seq');
UPDATE test1 SET id = nextval('test_id_seq');
Postgres의 최근 버전에서는 위의 단일 명령과 거의 같습니다.
ALTER TABLE test1 ADD COLUMN id SERIAL PRIMARY KEY;
필요한 것은 다음과 같습니다.
- 추가합니다.
id
기둥. - 1부터 카운트(*)까지의 시퀀스로 채웁니다.
- null이 아닌 기본 키로 설정합니다.
이 답변을 댓글로 주신 @resnyanskyy에게 공로가 인정됩니다.
v10에서 ID 열을 사용하려면,
ALTER TABLE test
ADD COLUMN id { int | bigint | smallint}
GENERATED { BY DEFAULT | ALWAYS } AS IDENTITY PRIMARY KEY;
ID 열에 대한 설명은 https://blog.2ndquadrant.com/postgresql-10-identity-columns/ 을 참조하십시오.
기본적으로 생성된 것과 항상 생성된 것의 차이는 https://www.cybertec-postgresql.com/en/sequences-gains-and-pitfalls/ 을 참조하십시오.
시퀀스를 변경하려면 https://popsql.io/learn-sql/postgresql/how-to-alter-sequence-in-postgresql/ 을 참조하십시오.
저도 그런 것을 찾고 있었기 때문에 여기에 착륙했습니다.이 경우 열이 많은 스테이징 테이블 집합의 데이터를 하나의 테이블에 복사하는 동시에 행 ID를 대상 테이블에 할당했습니다.여기 제가 사용했던 위의 접근 방식의 변형이 있습니다.대상 테이블 끝에 일련 번호를 추가했습니다.이렇게 하면 삽입 문에 플레이스홀더를 사용할 필요가 없습니다.그런 다음 *를 선택하여 대상 테이블에 이 열을 자동으로 채웁니다.다음은 Postgre에서 사용한 두 개의 SQL 문입니다.SQL 9.6.4.
ALTER TABLE target ADD COLUMN some_column SERIAL;
INSERT INTO target SELECT * from source;
ALTERTABLE test1 ADD idt8은 항상 ID로 생성되지 않습니다.
언급URL : https://stackoverflow.com/questions/2944499/how-to-add-an-auto-incrementing-primary-key-to-an-existing-table-in-postgresql
'programing' 카테고리의 다른 글
새로 추가된 파일을 포함하여 모든 파일을 단일 명령으로 스테이징하고 커밋하려면 어떻게 해야 합니까? (0) | 2023.05.17 |
---|---|
경로가 ':mypath'인 프로젝트를 루트 프로젝트 'myproject'에서 찾을 수 없습니다. (0) | 2023.05.17 |
루프를 위해 튜플은 어떻게 풀립니까? (0) | 2023.05.17 |
set -onnounset을 사용할 때 변수가 Bash에 설정되어 있는지 테스트 (0) | 2023.05.17 |
긴 SQL 쿼리를 즉시 종료/정지하는 방법은 무엇입니까? (0) | 2023.05.12 |