sourcecode

PostgreSQL INSERT ON CONCLIVENT UPDATE(업서트) 제외된 모든 값 사용

codebag 2023. 5. 23. 21:52
반응형

PostgreSQL INSERT ON CONCLIVENT UPDATE(업서트) 제외된 모든 값 사용

행을 뒤집을 때(Postgre)SQL > = 9.5)에서 가능한 INSERT를 가능한 UPDATE와 정확히 동일하게 하려면 다음과 같이 쓸 수 있습니다.

INSERT INTO tablename (id, username, password, level, email) 
                VALUES (1, 'John', 'qwerty', 5, 'john@mail.com') 
ON CONFLICT (id) DO UPDATE SET 
  id=EXCLUDED.id, username=EXCLUDED.username,
  password=EXCLUDED.password, level=EXCLUDED.level,email=EXCLUDED.email

더 빠른 길이 있나요?EXCLUDE 값을 모두 사용합니다.

SQLite에서 저는 다음을 수행했습니다.

INSERT OR REPLACE INTO tablename (id, user, password, level, email) 
                        VALUES (1, 'John', 'qwerty', 5, 'john@mail.com')

Postgres는 다음과 같은 기능을 구현하지 않았습니다.INSERT OR REPLACE문서에서(내 문서 강조):

충돌 시 수행할 업데이트 작업의 정확한 세부 정보를 지정하는 DO NOTHING 또는 DO UPDATE 절이 될 수 있습니다.

대체할 수 있는 간단한 방법은 아니지만,ON CONFLICT DO UPDATE에서는 기존 데이터를 기반으로 새 값을 설정할 수 있으므로 보다 일반적으로 적용됩니다.예:

INSERT INTO users (id, level)
VALUES (1, 0)
ON CONFLICT (id) DO UPDATE
SET level = users.level + 1;

언급URL : https://stackoverflow.com/questions/36359440/postgresql-insert-on-conflict-update-upsert-use-all-excluded-values

반응형