2016-08-22 7 views
1

Firebird 쿼리를 PostgreSQL 코드로 다시 작성해야합니다.Firebird에서 PostgreSQL에 대한 쿼리 번역

SELECT TRIM(RL.RDB$RELATION_NAME), TRIM(FR.RDB$FIELD_NAME), FS.RDB$FIELD_TYPE 
FROM RDB$RELATIONS RL 
    LEFT OUTER JOIN RDB$RELATION_FIELDS FR ON FR.RDB$RELATION_NAME = RL.RDB$RELATION_NAME 
    LEFT OUTER JOIN RDB$FIELDS FS ON FS.RDB$FIELD_NAME = FR.RDB$FIELD_SOURCE 
WHERE (RL.RDB$VIEW_BLR IS NULL) 
ORDER BY RL.RDB$RELATION_NAME, FR.RDB$FIELD_NAME 

내가 SQL을 이해하지만 아무 생각이 어떻게 다른 사람이 나에게 도움이 경우는 정말 좋은 것 등 RDB$RELATIONS 같은이 시스템 테이블에서 작동 할 수 있지만,이 테이블 설명과 심지어 일부 링크가 확인 될 것입니다 .

쿼리의이 조각은 C++ 코드에 있고, 나는이 작업을 수행하기 위해 노력하고있어 때

RDB $ 관계가 존재하지 않습니다 : 그것은 씁니다

pqxx::connection conn(serverAddress.str()); 
pqxx::work trans(conn); 
pqxx::result res(trans.exec(/*there is this SQL query*/));//and there is a mistake 

.

+0

모든 정직한면에서 현재 쿼리는 테이블 및 열 이름 구문을 제외하고 유효한 SQL처럼 보입니다. 테이블 _schema_ (테이블 이름과 열 이름/유형)을 게시 할 수 있습니까? –

+0

@TimBiegeleisen 질문 텍스트에 몇 가지 변경 사항을 추가합니다. – koshachok

답변

3

포스트 그레스는 시스템 콘텐츠에 대한 정보를 저장하는 또 다른 방법이있다. 이를 System Catalogs이라고합니다.

Firebird에서 쿼리는 기본적으로 필드 데이터 유형에 매핑되는 추가 정수 열이있는 모든 스키마에있는 테이블의 모든 열에 대해 행을 반환합니다. 유사한 pg_catalog 스키마 뭔가 시스템 테이블을 사용하여 포스트 그레스에서

이 쿼리를 사용하여 달성 될 수있다 : 쿼리 위

SELECT 
    TRIM(c.relname) AS table_name, TRIM(a.attname) AS column_name, a.atttypid AS field_type 
FROM pg_class c 
LEFT JOIN pg_attribute a ON 
    c.oid = a.attrelid 
    AND a.attnum > 0 -- only ordinary columns, without system ones 
WHERE c.relkind = 'r' -- only tables 
ORDER BY 1,2 

뿐만 아니라 시스템 카탈로그를 반환한다. 을 제외하려면을 제외하고 다른 JOIN을 pg_namespace에 추가하고 where 절을 pg_namespace.nspname <> 'pg_catalog'으로 추가해야합니다. 시스템 카탈로그가 저장되는 스키마이기 때문입니다.

대표 번호 대신 데이터 유형 이름을 보려면 pg_type에 JOIN을 추가하십시오.


정보 스키마 뷰의 집합으로 구성되어 있습니다. 대부분의 경우 뷰 뒤에있는 전체 SQL 쿼리가 필요하지 않으므로 시스템 테이블을 사용하면 성능이 향상됩니다. 뷰 정의를 검사하여 출력을 구성하는 데 사용되는 테이블과 조건을 시작할 수 있습니다.

+0

당신은 anouther [질문 예제] (http://pastebin.com/z03gGjy2)로 나를 도울 수 있습니까? 어쩌면 당신은 저와 같은 인형을 위해 특별히 링크/책/등을 조언 할 수 있습니다. – koshachok

+0

@ koshachok 당신은 이미 소스를 가지고 있습니다. 정보 - 시스템 카탈로그 및 정보 스키마 어쨌든, 추가 도움이 필요하면 다른 질문을 게시하십시오. –

+0

괜찮지 만 Firebird의 이름과 Postgres의 이름을 어떻게 연관 지을 수 있습니까? – koshachok

관련 문제