DB/기타

[PostgreSQL]psycopg2.errors.InvalidColumnReference 오류

창수씨 2022. 8. 23. 15:31
반응형

파이썬의 psycopg2 라이브러리를 사용하면서 upsert 하려고 할때 발생했다.

psycopg2.errors.InvalidColumnReference : 
there is no unique or exclusion constraint matching the ON CONFLICT specification

 

해결

수정 전 코드

insert_query = """insert into test_table (col1, col2, col3) values %s
					ON CONFLICT (col2, col3)
                    DO UPDATE
                    SET (col2, col3) = (excluded.col2, excluded.col3)
               """
pg_ext.execute_values(pg_cursor, insert_query, arr)

이런식의 쿼리였는데, 사실 conflict 부분에는 충돌 나는 키를 넣어야 한다. 충돌 나는 키는 primary key로 설정되어 있는 col1 이었는데, 충돌 나는 키 말고 다른 걸 넣어놔서 안되었음. 그래서 코드를 수정.

 

수정 후 코드

insert_query = """insert into test_table (col1, col2, col3) values %s
					ON CONFLICT (col1)
                    DO UPDATE
                    SET (col2, col3) = (excluded.col2, excluded.col3)
               """
pg_ext.execute_values(pg_cursor, insert_query, arr)

해결 완료!

 

PS. excluded를 쓰면 SET 뒤에다가 실제값을 넣지 않아도 된다. 충돌난 데이터에서 해당하는 데이터를 가져오기 때문에, 쓰면 편하다.

반응형