programing

Postgresql에서 두 열의 조합에 대해 고유한 강제 적용

skycolor 2023. 4. 12. 21:59
반응형

Postgresql에서 두 열의 조합에 대해 고유한 강제 적용

Postgre에 테이블을 차리고 싶습니다.SQL: 두 열이 함께 고유해야 합니다.두 값을 공유하는 두 값이 없는 한 두 값의 값을 여러 개 사용할 수 있습니다.

예:

CREATE TABLE someTable (
    id int PRIMARY KEY AUTOINCREMENT,
    col1 int NOT NULL,
    col2 int NOT NULL
)

그렇게,col1그리고.col2반복할 수는 있지만 동시에 반복할 수는 없습니다.따라서 이는 허용됩니다(ID 제외).

1 1
1 2
2 1
2 2

하지만 이건 아니야:

1 1
1 2
1 1 -- would reject this insert for violating constraints
CREATE TABLE someTable (
    id serial PRIMARY KEY,
    col1 int NOT NULL,
    col2 int NOT NULL,
    UNIQUE (col1, col2)
)

autoincrementpostgresql이 아닙니다.당신이 원하는 것은integer primary key generated always as identity(또는serialPG 9 이하를 사용하는 경우, 는 PG 10)에서 소프트 폐지되었습니다.

한다면col1그리고.col2고유하고 null일 수 없는 경우 양호한 기본 키가 됩니다.

CREATE TABLE someTable (
    col1 int NOT NULL,
    col2 int NOT NULL,
    PRIMARY KEY (col1, col2)
)

두 숫자를 함께 반복할 수 없는 고유한 구속조건을 만듭니다.

ALTER TABLE someTable
ADD UNIQUE (col1, col2)

나처럼 당신이 여기에 착륙했다면:

  • 이미 있던 테이블,
  • 새 컬럼을 추가해야 합니다.
  • 또한과 이전 열에 새로운 고유한 제약 조건을 추가해야 합니다.
  • 모든 것을 취소할 수 있다(즉, 이행 내용을 기록할 수 있다)

위의 답변 중 하나를 활용하여 확장함으로써 다음과 같은 이점을 얻을 수 있었습니다.

-- up

ALTER TABLE myoldtable ADD COLUMN newcolumn TEXT;
ALTER TABLE myoldtable ADD CONSTRAINT myoldtable_oldcolumn_newcolumn_key UNIQUE (oldcolumn, newcolumn);

---

ALTER TABLE myoldtable DROP CONSTRAINT myoldtable_oldcolumn_newcolumn_key;
ALTER TABLE myoldtable DROP COLUMN newcolumn;

-- down

통상적인 UNIQUIRE RESTRAN :)

CREATE TABLE example (
a integer,
b integer,
c integer,
UNIQUE (a, c));

자세한 것은 이쪽

언급URL : https://stackoverflow.com/questions/14221775/in-postgresql-force-unique-on-combination-of-two-columns

반응형