PostgreSQL에서 크로스 데이터베이스 쿼리
를 수행할 수 있나요? 방법은 다음과 같습니다!
PostgreSQL을 사용하고 있다면, 크로스 데이터베이스 쿼리
를 수행할 수 있는지 궁금할 수 있습니다. 이는 일반적으로 서로 다른 데이터베이스에 분할된 데이터에 접근하거나 조작해야 할 때 발생합니다. 두 개의 데이터베이스가 데이터를 공유하지만 별도로 설정된 경우가 일반적인 상황입니다. 이로 인해 다음과 같은 질문이 생깁니다: PostgreSQL에서 한 데이터베이스에서 다른 데이터를 쿼리할 수 있나요?
크로스 데이터베이스 쿼리의 도전과제
크로스 데이터베이스 쿼리를 실행하려고 할 때 다음과 유사한 오류 메시지를 접할 수 있습니다:
databaseA=# select * from databaseB.public.someTableName;
ERROR: cross-database references are not implemented: "databaseB.public.someTableName"
이 오류는 PostgreSQL이 데이터베이스 간의 직접적인 참조를 본래 지원하지 않음을 나타냅니다. 따라서 데이터가 별도의 데이터베이스에 저장되어 있고 이를 넘나들며 쿼리를 수행해야 한다면, 대안을 찾아야 합니다.
해결책: 외부 데이터 래퍼 사용하기
PostgreSQL에서 크로스 데이터베이스 쿼리를 수행하려면 외부 데이터 래퍼 기능, 특히 postgres_fdw
를 활용할 수 있습니다. 이를 통해 로컬 또는 원격의 모든 PostgreSQL 데이터베이스에 있는 테이블에 쉽게 연결할 수 있습니다.
postgres_fdw
설정하기
-
확장 모듈 설치: PostgreSQL 설치에서
postgres_fdw
확장이 활성화되어 있는지 확인하세요. 다음 명령어로 확장을 생성할 수 있습니다:CREATE EXTENSION postgres_fdw;
-
외부 서버 정의하기: 대상 데이터베이스에 연결되는 외부 서버를 생성합니다:
CREATE SERVER foreign_server_name FOREIGN DATA WRAPPER postgres_fdw OPTIONS (host 'host_address', dbname 'databaseB', port '5432');
-
사용자 매핑 생성하기: 외부 서버에 연결할 사용자의 매핑을 생성해야 합니다:
CREATE USER MAPPING FOR local_user SERVER foreign_server_name OPTIONS (user 'remote_user', password 'remote_password');
-
외부 스키마 가져오기: 접근하려는 테이블을 포함하는 외부 스키마를 가져올 수 있습니다:
IMPORT FOREIGN SCHEMA public FROM SERVER foreign_server_name INTO local_schema;
-
원격 테이블 쿼리하기: 이제 외부 테이블을 일반 로컬 테이블처럼 쿼리할 수 있습니다:
SELECT * FROM local_schema.some_table_name;
구버전 PostgreSQL을 위한 방법
PostgreSQL 9.3 이전 버전을 사용 중이라면 외부 데이터 래퍼 기능이 지원되지 않습니다. 그러나, 다른 PostgreSQL 데이터베이스에 연결할 수 있는 dblink
함수를 사용할 수 있습니다.
dblink
사용하기: 배포판에 포함되지 않았다면postgresql-contrib
패키지를 설치해야 합니다. 그 후 다음과 같은 쿼리를 실행할 수 있습니다:SELECT * FROM dblink('dbname=databaseB user=remote_user password=remote_password', 'SELECT * FROM public.some_table_name') AS t(column1 type1, column2 type2, ...);
노트: 가능하다면 데이터베이스 구조를 재구성하는 것을 고려하세요. 별도의 데이터베이스 대신 동일한 데이터베이스 내에서
스키마
를 사용하는 것이 데이터 관리 및 접근성을 크게 향상시킬 수 있습니다.
결론
PostgreSQL이 크로스 데이터베이스 쿼리를 본래 지원하지는 않지만, postgres_fdw
와 같은 외부 데이터 래퍼를 사용하면 강력한 우회 방법이 제공됩니다. 필요한 설정을 진행하면 서로 다른 데이터베이스 간에 데이터를 원활하게 액세스하고 조작할 수 있습니다.
구버전을 사용하고 있다면 dblink
가 옵션이지만, 최신 PostgreSQL 버전으로 업그레이드하면 더 나은 기능과 지원을 받을 수 있습니다.
올바른 도구와 전략을 가지고 데이터베이스 간 데이터에 접근하는 것은 그 어느 때보다 쉬워졌습니다. 쿼리 작성 즐기세요!