2013-11-28 4 views
2

임의의 SQL 쿼리에서 열 유형을 얻어야합니다. PgAdmin3은 가능합니다.임의의 SQL select에서 열 데이터 형식을 가져 오는 방법은 무엇입니까?

는 예를 들어, 쿼리를 주어진 :

SELECT src.col, CAST(src.col AS varchar) 
FROM (SELECT 'anything' AS col) AS src; 

PgAdmin3 반환 : 당신이 볼 수 있듯이

는, 열 유형이 아닌 테이블 스키마에, 실행 쿼리에 내놓고 표시됩니다. 프로그래밍 방식으로 결과 집합의 열 데이터 형식을 얻는 방법?

+0

나는 이것이 [질문에 답하는] 같은 질문이라고 생각합니다. (http://stackoverflow.com/questions/2146705/select-datatype-of-the-field-in-postgres). 해당 게시물의 쿼리가 도움이됩니까? –

+0

@JeanneBoyarsky 그렇지 않습니다. AFAIU가 지속 된 열에 대한 정보를 저장하는 정보 스키마에 액세스합니다. 나는 몇몇 'COUNT (*)'가 ​​'bigint'이고 적용된 타입 변환에 대해 배우지 않는다는 것을 배우기 위해 사용할 수 있다고 생각하지 않는다. 아니면 정보 스키마의 목적을 얻지 못했습니까? – skalee

+0

오. 그래서 당신은 묘사와 같은 것이지만 테이블보다는 쿼리를 원합니다. Java와 같은 호출 언어를 사용하는 경우 조회의 메타 데이터에서이 정보를 얻기위한 API가 있습니다.커맨드 라인 (raw SQL)에서 수행하는 방법을 모르겠습니다. –

답변

1

C 클라이언트 라이브러리의 해당 기능은 PQftype입니다. Retrieving Query Result Information에 설명 된대로 쿼리의 모든 필드 유형을 제공하며 결과 필드에 적용되는 다른 함수 (예 : PQftable 또는 PQfsize)를 제공합니다.
EXPLAIN이 필요하지 않습니다.이 정보는 모든 결과 집합이 SQL 클라이언트로 되돌아 오는 상태로 제공됩니다. 정수 리턴

PQftype

Returns the data type associated with the given column number. 

는 형식의 내부 OID 번호이다. 열 번호는 0

Oid PQftype(const PGresult *res, 
       int column_number); 

에서 당신은 다양한 데이터 유형의 이름과 특성 를 얻을 수있는 시스템 테이블 pg_type를 조회 할 수 있습니다 시작합니다. 내장 데이터 유형의 OID는 소스 트리의 src/include/catalog/pg_type.h 파일에 정의되어 있습니다.

select oid, typname from pg_type; 

다른 언어는 일반적으로 libpq를 라이브러리에 자신의 포스트 그레스 지원을 기반으로, 그래서 그들은이 함수를 호출 할 수 있습니다

또한 데이터베이스의 모든 유형의 OID를을 얻을 수있다. 구현의 완료 정도에 따라 노출 될 수도 있고 노출되지 않을 수도 있습니다. 루비 경우

상기 ruby-pg 드라이버 명백하게 PGResultftype(column_number) 인스턴스 메소드를 통해한다. 이것이 ActiveRecord에 도움이되는지 나는 모른다. 데이터베이스에 독립적 인 API는 지원하는 모든 데이터베이스에서 쉽게 추상화 할 수없는 기능을 제거하는 경향이 있습니다.

2

시스템 카탈로그 정보 기능 pg_typeof()을 사용하십시오.

+0

예, 그 일을합니다. 누군가가 단순한 답을 제공하지 않으면, SELECT 절을 수정하지 않고 전체 질의를 전달하는'EXPLAIN ... '과 같이 작동하는 한 승인 할 것입니다. 나는 SELECT 절이'*'와 같이'SELECT src. * FROM (SELECT CAST ('AS varchar) AS col) AS src;'와 같이 유용 할 것이라고 생각한다. – skalee

관련 문제