programing

PostgreSQL에서 기존 테이블에 자동 증분 기본 키를 추가하는 방법은 무엇입니까?

skycolor 2023. 5. 17. 22:38
반응형

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;

필요한 것은 다음과 같습니다.

  1. 추가합니다.id기둥.
  2. 1부터 카운트(*)까지의 시퀀스로 채웁니다.
  3. 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

반응형