2012-03-05 6 views
0

다른 세션에서 정의되지 않은 관계 문제 내 목표 PostgreSQL 데이터베이스에 SQLWorkbench를 사용하여 다음 CREATE : * 내가 입력하여 테이블 내용을 요청 표 - 내가 실행 한

CREATE TABLE Config ( 
    id serial PRIMARY KEY,  
    pub_ip_range_low varchar(100),  
    pub_ip_range_high varchar(100)    
); 

오른쪽 테이블 작성 후

가 '선택 설정에서; 그 표를 ​​가져올 수 있는지 확인하십시오. 그럼에도 불구하고 JDBC 유형 4 드라이버를 사용하는 Java 프로그램은 동일한 SELECT 문을 발행 할 때 테이블에 액세스 할 수 없습니다. 프로그램이 config 테이블에 대해 "정의되지 않은 관계"라는 메시지에 액세스하려고하면 예외가 발생합니다.

내 질문은 :

    나는 문을 만들고 실행 이전에했던 sqlworkbench 테이블을 인식 왜
  1. 내 자바 프로그램을 찾을 수없는 동안?
  2. postgressql DBMS는 내가 만든 테이블을 어디에서 가져 옵니까? 대중이나 정보 스키마에서 이들을 보지 못합니다.

참고 : 나는 목표 포스트 그레스 데이터베이스를 확인하고 SQL 워크 벤치를 조회 할 수 있지만 어디 테이블 구성을 볼 수 없습니다. 그런 다음 다른 SQL 워크 벤치 인스턴스를 열고 테이블을 쿼리 할 수 ​​없다는 것을 알게되었습니다 (즉, 찾을 수 없음). 그래서, 필자의 결론은 PostgreSQL이 처음 실행 한 SQLBench 인스턴스에서 만든 테이블을 해당 세션에 바인딩 된 피 묻은 위치에 넣는 것입니다. 다른 SQL Workbench 인스턴스 또는 Java 프로그램은 세션에 바인딩되지 않으므로 이전에 생성 된 테이블 구성을 쿼리 할 수 ​​없습니다.

+0

SQLWorkbench에서 SELECT current_schema()를 실행하여 어떤 스키마가 테이블을 만들고 있는지 확인하십시오. 또한 java에서 어떤 스키마를 쿼리하고 있는지 확인하십시오. 거래 내역이 열려 있습니까? – DavidEG

+0

대소 문자가 혼용되지 않도록하십시오. 그들은 혼란을 가져올 수 있습니다. – wildplasser

+0

위의 select 문은 public을 반환합니다. 내가 public.config 입력하여 내 자바 프로그램에서 테이블을 쿼리하려고했지만 전혀 문제를 해결하는 데 도움이되지 않았다. 어쨌든/고맙다는 제안? –

답변

1

PostgreSQL에서 세션 로컬 인 유일한 "피 묻은 위치"는 스키마 pg_temp 즉, 임시 테이블입니다. 그러나 CREATE 명령에 키워드 TEMP[ORARY]이 표시되지 않습니다. 물론 트랜잭션으로 위탁되지 않는 한 아무도 트랜잭션 외부의 정보를 볼 수 없습니다.

호스트/데이터베이스/포트 또는 스키마 search_path의 switcheroo를 보았을 가능성이 큽니다. 대소 문자가 혼합 된 테이블 이름을 가진 혼합도 역시 주목할만한 후보입니다. "Config"을 큰 따옴표로 묶지 않으면 표가 시스템에서 모두 소문자로 끝납니다. 따라서 : config. 나중에 이름을 두 번 인용하면 일치하지 않습니다. The manual has the details.

+0

데이터베이스 생성 후 커밋을 발행했지만 도움이되지 않았습니다. 나는 SQL 워크 벤치와 자바 프로그램 모두 소문자로 데이터베이스를 쿼리한다. 감사. –

0

추가 꼬리말에 쉼표가 사용되지 않았습니까?

CREATE TABLE config (
    id serial PRIMARY KEY,  
    pub_ip_range_low varchar(100),  
    pub_ip_range_high varchar(100) -- >> ,   
); 
+0

'테이블 생성 직후 'select * from config;'를 입력하여 테이블 내용을 요청합니다. 그 테이블이 검색 될 수 있는지 확인하십시오. '그래서, 그렇지 않을 수도 있습니다. –

+0

필자가 여기에 붙여 넣을 때 작성 문에서 회사 특정 필드 이름을 삭제해야했기 때문에 쉼표가이 필드 이름의 삭제로 남아 있었지만 원본 작성 문은 정상적으로 성공적으로 실행되었습니다. –

+0

당신의 문제가 조금 우스운 것처럼 보이기 때문에 그것은 단지 추측이었습니다. BTW 우리 중 일부는 (Erwin과 나 자신을 포함해서) 선의 시작 부분에 쉼표를 넣는 버릇이 있습니다. 그러면 시각적으로 눈에 띄게되어 편집이 좀 더 쉬워집니다. – wildplasser