Category: SQL

  • 정확한 건 설명할 수 없는데, DB에서 생성과 삭제 작업을 반복하는 중 강제 종료하고 다시 처음부터 생성하는 작업을 연속적으로 하면 이전 결과가 남아 있는 것 같다. 타이의 대모험의 라하르트와 같은 속도로 처리되는 NVMe에서 운영을 해서 그런건지 아니면 이런 문제가 발생할 수 있는 가능성이 원래부터 있는 것인지 모르겠다. 일단 DB 구축 스크립트에서 처음 스키마 삭제 후 60초 기다렸다가 진행하는 것으로 수정해 보았다.

  • 날짜 shift

    지난 번 UCLA 병원에 갔을 때 공개용 DB에서는 날짜를 shift 한다고 했다. 생년월일을 변동 주는 것은 좀 고민해 봐야할 것 같다. 일단 날짜에 집중하기로 했다. 아직 완전하게 구현한 것은 아니지만, 원래 OMOP CDM에 들어가는 날짜는 date 속성으로 지정을 했으면, 덧셈과 뺄샘이 된다. 특정인에 따른 shift 값을 지정할 수 있으면 일일이 더해주거나 빼주는 방법을 이용하면 될 것 같다. 그래서 -180~180일 변동을 줄 수 있도록 코드를 작성해 보았다. 이 경우에는 361개를 만든 후에 181을 빼주면 편하게 할 수 있다. +1을 빼면 180을 빼도 될 것 같다.

    CREATE TABLE mapping.person_anonymous_day_shift AS (SELECT trunc(random() * 361 + 1) - 181 AS day_shift FROM generate_series(1, (SELECT COUNT(*) FROM mapping.person_anonymous)));

    생각해보니 person 테이블이 연도는 -5~5정도로 변동을 주고 월과 날짜는 그냥 1~12와 1~28 정도로 임의로 할당해도 전혀 문제가 없을 것 같다.

  • 컬럼 속성 변경

    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;

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