떨어진 컴퓨터로 DB를 복사하는 방법은 pg_dump이지만, 같인 PC에서 복사할 때에는 명령어로 만들 수 있다.
CREATE DATABASE targetdb WITH TEMPLATE sourcedb;
떨어진 컴퓨터로 DB를 복사하는 방법은 pg_dump이지만, 같인 PC에서 복사할 때에는 명령어로 만들 수 있다.
CREATE DATABASE targetdb WITH TEMPLATE sourcedb;
database의 이름을 바꾸는 작업을 하기 위해서는 연결되어 있는 세션을 모두 종료시켜야 한다. 컴퓨터를 재부팅하는 방법도 있지만, 그건 좋은 방법이 아니니 정식으로 하는 방법을 알아야 한다. 세션 종료는 PID 번호를 알아야 한다. database와 연관된 것을 알아야 하기 때문에 다음과 같이 검색한다.
SELECT pid, datname FROM pg_stat_activity;
pid | datname
-------+-----------
948 |
946 |
8890 | postgres
8891 | cdm_build
12702 | postgres
944 |
943 |
945 |
이렇게 실행시키면 PID와 database 이름을 알 수 있다.
SELECT pg_terminate_backend(8891);
이렇게 하면 세션을 종료 시킬 수 있다.
정확한 건 설명할 수 없는데, DB에서 생성과 삭제 작업을 반복하는 중 강제 종료하고 다시 처음부터 생성하는 작업을 연속적으로 하면 이전 결과가 남아 있는 것 같다. 타이의 대모험의 라하르트와 같은 속도로 처리되는 NVMe에서 운영을 해서 그런건지 아니면 이런 문제가 발생할 수 있는 가능성이 원래부터 있는 것인지 모르겠다. 일단 DB 구축 스크립트에서 처음 스키마 삭제 후 60초 기다렸다가 진행하는 것으로 수정해 보았다.
지난 번 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 정도로 임의로 할당해도 전혀 문제가 없을 것 같다.