Category: SQL

  • 컬럼 속성 변경

    PostgreSQL에서 컬럼 속성을 변경할 때 방법을 지정해야 하는 경우가 있다. 이게 항상 이런지는 모르겠지만..

    ALTER TABLE cdm.condition_occurrence ALTER COLUMN person_id TYPE INTEGER USING person_id::INTEGER;
    

    TYPE INTEGER로 속성을 변경을 선언한 다음에 USING을 통하여 한 번 더 언급해 주어야 함.

  • Database 이름 변경

    CDM DB를 재구축하는 동안 기존 DB의 이름을 변경하여 사용하면 된다는 간단한 방법을 오늘에서야 생각해 냈다.

    \c postgres

    일단 현재 연결중인 DB에서는 이름을 바꿀 수 없기 때문에 설치했을 때 기본 DB였던 postgres DB로 연결한다.

    ALTER DATABASE cdm RENAME TO cdm_current;

    이렇게 이름을 바꾸어 준다.

  • 현재 실행 중인 쿼리 확인

    가장 간단하게는 다음과 같이 하면 된다. 그런데 쓸데없이 정보가 많다.

    SELECT * FROM pg_stat_activity;

    이렇게 하면 현재 active 상태인 것의 query 만 보여주어 현재 어떤 쿼리를 실행하고 있는지 알 수 있다.

    SELECT query FROM pg_stat_activity WHERE state = 'active';

    내가 실행하는 쿼리야 뻔한 수준이니만큼, 정말 현재 실행 중인 것만 보려면 좀 더 명령어를 집어 넣어주면 된다. 제외해야 할 것은 이 명령어 그 자체와 autovacumn이다.

    SELECT query FROM pg_stat_activity WHERE state = 'active' AND query NOT LIKE 'autovac%' AND query NOT LIKE '%pg_stat_activity%';

  • 역슬래시 제거

    PostgreSQL에서 자료를 copy로 불러올 때 역슬래시가 들어가면 심각한 오류가 생긴다. escape 문자와 혼동이 되기 때문이다. 일부 테이블이 너무 크기가 작아서 확인해보니 아무래도 역슬래시와 관련되어 자료가 제대료 import 안된 것 같았다. 구글 검색을 해보니 제일 좋은 방법은 역슬래시 한 개를 두 개로 바꾸어 주는 것이다. 이를 해결하는 가장 편한 방법은 리눅스 sed를 이용하는 것이다. 역슬래시 문자가 있다면 용량이 조금 커지고, 없다면 동일한 용량의 파일이 생성된다.

    sed -e 's/\\/\\\\/g' a.csv > b.csv

    https://www.postgresql.org/docs/12/sql-copy.html