DBMS/PostgreSQL

[ PostgreSQL ] 데이터가 있으면 update, 데이터가 없으면 insert (upsert)

seulye 2022. 11. 2. 11:16

 

https://mine-it-record.tistory.com/342

 

[PostgreSQL] 데이터 있으면 UPDATE 없으면 INSERT (INSERT INTO ~ ON CONFLICT DO UPDATE)

PostgreSQL에서 사용하는 upsert구문에 대해 알아보자. 오라클에서는 merge into, mysql에서는 on duplicate on key update를 사용하며 이와 비슷하게 PostgreSQL에서는 insert into ~ on conflict do update 구문을 사용한다.

mine-it-record.tistory.com

 

insert into
		user (
			user_id
		   ,user_name
           ,phone_number
		  )
	values (
		   #{userId}
           ,#{userName}
           ,#{phoneNumber}) ON
		CONFLICT (user_id) DO
		UPDATE
		SET
		   userid = #{userId},
		   ,user_name = #{userName}
		   ,phone_number = #{phoneNumber}

(코드 정렬이 왜 이런식으로 된지는 모르겠다..; mybatis xml 형식인데.. )

 

user : 유저 정보에 대한 테이블

user_id는 primary key이다. 

이미 유저 정보가 있는 경우에 user_id도 있을 거고, 이미 있는 user_id로 insert하려고 한다면 실패할 것이다.

그렇게 되면 DO 뒤에 있는 명령을 실행하게 된다. 

나는 update를 해보았다. 그냥 update문이랑 똑같이 쓰면 됨! 

 

DO NOTHING을 하면 그냥 그 오류를 무시함.