PostgreSQL 를 사용하다보면 간혹 트랜잭션에 문제가 발생해 복구가 어려운 경우가 발생한다.동일한 쿼리를 수행하려고 해도 트랜잭션을 찾을 수 없다는 메시지와 함께 실행이 되지 않는 문제도 발생하게 된다. 이럴때, Write Ahead Logging 이라는 WAL 을 찾아보게 되는데 왜 트랜잭션 문제가 발생하면 WAL 을 확인해야하는지에 대해서 알아보고 이해해보려고 한다. WAL 기본 개념먼저 WAL 이 무엇인지 알아야 한다. WAL 은 Write-Ahead Logging 의 약자로 WAL 은 ACID 속성 중 원자성과 지속성을 보장하기 위한 기술이라고 한다.데이터베이스에 변경이 발생할 때, 실제 데이터를 디스크에 기록하기 전에 로그를 먼저 기록하는 방식이다.이 로그 파일을 WAL 로그라고 부르고 P..
Postgresql 에 데이터를 업데이트하는 과정에서는 insert 를 할 때 on conflict 절에서 고유 키를 사용하여 충돌을 감지하고 충돌이 나는 경우에는 고유 키를 가진 컬럼의 값을 업데이트하고 그렇지 않은 경우 새로운 행을 추가해주게 된다.INSERT INTO {table_name} ({table_columns}) SELECT {update_columns} FROM {update_table}ON CONFLICT ({unique_key}) DO UPDATE SET {update_columns}; 위의 쿼리와 같이 ON CONFLICT 를 통해 고유키를 통해 업데이트의 여부를 결정하게 된다. 위의 쿼리를 통해 데이터를 업데이트 하려고 했는데 고유키 값은 분명 중복이 되지 않는 것을 확인했지만 업..
기본적으로 배열에서 원하는 값을 찾기 위해서 주로 =, >, =, Postgresql 에서는 배열의 값을 찾는 여러 배열 연산자가 있어 정리해보려고 한다. 내가 배열 연산자를 찾게된 이유는 Postgresql 에서 tstzrange 라는 컬럼 타입이 있는데 해당 컬럼은 2개의 timestamptz 값을 가지는 배열의 형태로 되어있다. 따라서 tstzrange 타입의 컬럼 값을 통해서 값을 찾기 위해서는 배열 연산자를 통해 원하는 값을 찾아야 하는데 찾아보니 종류가 생각보다 많아서 정리해보려고 한다. Equal Operator (=)배열이 같은지 비교하는 연산자select array[1, 2] = array[1, 2] as equal_operator, -- True array[1, 2] = array[2..