2014-01-17 3 views
1

postgres_fdw를 사용하여 이름 충돌을 방지하기 위해 지정된 스키마에 외부 테이블을 만들어야합니다. 필자가 해왔 던 문제를 분리하기 위해 import_test와 export_test 같은 클러스터에 두 개의 테스트 포스트그레스 데이터베이스를 설정했습니다. Export_test에는 foreign_schema.aa 테이블이 있습니다. 서버 import_test에서 다른 FDW 전제 조건을 수행 한 후, 나는 달렸다 : 다음왜 postgres_fdw 이중 한정 스키마입니까?

CREATE FOREIGN TABLE local_schema.aa(
    id serial NOT NULL, 
    dat text 
) SERVER export_server OPTIONS (table_name 'foreign_schema.aa'); 

: 나는이 작업을 수행 할 때

SELECT * FROM local_schema.aa; 

, 내가 얻을 :

ERROR: relation "local_schema.foreign_schema.aa" does not exist 
CONTEXT: Remote SQL command: SELECT id, dat FROM local_schema."foreign_schema.aa" 

내가 돈이 ' 다음과 같이 스키마 자격을 수행하십시오.

CREATE FOREIGN TABLE aa(
    id serial NOT NULL, 
    dat text 
) SERVER export_server OPTIONS (table_name 'aa'); 

aa 테이블을 공용 스키마로 이동하면 select가 제대로 작동합니다.

"SELECT ID, FROM local_schema."foreign_schema.aa "명령이 원격 서버에서 실행되고있는 이유는 분명히 작동하지 않는 이유입니다. local_schema."foreign_schema.aa "는 실제로 존재하지 않습니다 어떤 이유에서든 postgres_fdw는 table_name에 주어진 이름 앞에 외래 테이블의 스키마가 붙어있는 것 같습니다.

내가 선택하지 않으면 스키마를 선택 쿼리에 지정해야합니다. 외래 테이블이 보이지 않습니다. 검색 경로를 설정하여 select를 선행하여 스키마 자격을 얻는 것이 도움이되지 않습니다.

내가 잘못하고있는 것이 있습니까?없는 경우 해결 방법이 있습니까? 내가 외국 테이블을 스키마 한정 할 수있게 할 것인가?

편집 :이 출력을 얻을 수

CREATE USER test_user SUPERUSER PASSWORD 'password'; 
SET ROLE test_user; 
CREATE DATABASE import; 
CREATE DATABASE export; 
\c export test_user 
CREATE SCHEMA export_schema; 
CREATE TABLE export_schema.aa (
    id serial PRIMARY KEY, 
    dat text 
); 
\c import test_user 
CREATE EXTENSION postgres_fdw; 
CREATE SERVER export_server 
    FOREIGN DATA WRAPPER postgres_fdw 
    OPTIONS (host 'localhost', dbname 'export', port '5432'); 
CREATE USER MAPPING FOR test_user 
    SERVER export_server 
    OPTIONS (user 'test_user', password 'password'); 
CREATE SCHEMA import_schema;   
CREATE FOREIGN TABLE import_schema.aa(
    id serial NOT NULL, 
    dat text 
) SERVER export_server OPTIONS (table_name 'export_schema.aa'); 
SELECT * FROM import_schema.aa; 

:

ERROR: relation "import_schema.export_schema.aa" does not exist 
CONTEXT: Remote SQL command: SELECT id, dat FROM import_schema."export_schema.aa" 
+1

자체 테스트 케이스를'psql'에서 실행할 수있는 단일 SQL 스크립트로 생성하고이를 버그 리포트로 pgsql-bugs 메일 링리스트에 제출하십시오. 문맥을 위해이 포스트 등을 맞댄 연결하십시오. –

+0

@CraigRinger 저는 같은 문제가 있습니다. 이것이 이제까지 해결 되었습니까? –

+0

나는 아무것도 눈치 채지 못했다. Try http://archives.postgresql.org/ –

답변

3

다시 해상도 와서 잊어 버렸 @Craig 링어의 제안 당, 여기에 자체 포함 psql를 입력합니다. 내 버그 보고서를 게시 할 때마다 언젠가 나타납니다. postgres_fdw의 문서가 업데이트되었습니다. 이 페이지의 "F.31.1.2. Object Name Options"섹션과 schema_name 옵션 섹션을 참조하십시오. http://www.postgresql.org/docs/current/static/postgres-fdw.html. 내가 메일 링리스트 응답 인용 :

"Use: OPTIONS (schema_name 'export_schema', table_name 'aa'); above. 

     Thanks, 

       Stephen" 

그래서 해결하기를, 단지 SCHEMA_NAME 옵션 매개 변수에 외국 스키마 이름을 지정합니다.

+1

OPTIONS 사이에 쉼표가 있어야합니다. – erikcw

+0

고쳐 주셔서 고마워요! – Alex