2017-09-05 3 views
5

postgres.org 이메일에 표현식이 있습니다. 유용하다고 보이지만 찾을 수 없었던 문서입니다. 여기postgres sql은 '터플 (tuple)'이디엄을 문서화 한 문서는 어디에 있습니까?

select t.*::text from t 

::text 캐스트 열의 각각에 적용하는 것, 그리고 psql를 표시하는 정보와 생성 된 출력 비트 홀수이다. 아마도 누군가 나 같은 사람을 교육하고 그 수수께끼를 풀 수있을 것입니다.

편집 : 마지막으로 : 호기심, 섹션 4.2.9. Type Casts

편집이 구문에 대한 참조를하지 않습니다! 관련 문서 : 4.2.13. Row Constructors

답변

4

무슨 일이 일어 났는지 설명 할 수 있습니다. 다음 구문을 고려하십시오.

select (1, 2) 

두 개의 열이있는 레코드 (또는 튜플)를 반환합니다. 당신은 cast() 또는 ::를 사용하여 텍스트로 튜플을 변환 할 수 있습니다

select (1, 2)::text 

같은 일이 t.* 발생합니다. 그것은으로 해석됩니다 :

select (t.*)::text 

동일한 결과 얻을 것이다 :

SELECT t::text FROM t 

t.* :

select cast(t.* as text) 
+0

감사합니다.SQL이 '튜플'표현식을 허용한다는 것을 알아내는 것에 흥미가 있습니다. "(a, b.c)". Postgres는 실제로이 주제에 대한 훌륭한 문서를 가지고 있습니다 : 8.16.5. 쿼리에서 복합 유형 사용 – artejera

2

그냥 t 직접 테이블의 이름 (또는 별명)를 사용을 행을 분해하는 데 사용되지만 전체 행을 텍스트로 변환하기 때문에이 단계는 중복 노이즈입니다.

Postgres에서 모든 것을 text으로 전송할 수 있기 때문에 cast이 가능합니다. (입력/출력에 대한 텍스트 표현이 있어야합니다.)

행의 텍스트 표현은 어느 방법으로나 얻을 수 있습니다. 나는.

SELECT '(123,"some text",,"2017-01-03 02:27:27.930164+01")'::t 

t 테이블의 이름 인 또는 현재 search_path에 표시보기 ((구체화) 또는 당신이 가지고 : 출력은 같은 등록 된 행의 형태로 다시 캐스팅 할 수있는 유효한 문자열 리터럴 schema-qualify) 또는 다른 등록 된 (행) 유형.

이것은 Postgres가 사용자가 만드는 모든 테이블에 행 유형을 등록하기 때문에 상자의 이름과 함께 작동합니다.

ROW(1,2) 또는 줄여서 (1,2)과 같은 익명 기록에 대해서는 t.* 표기법이나 캐스트 백을 사용할 수 없습니다. 시스템 카탈로그에는 구조에 대한 정보가 없습니다.

관련 : 당신의 아주 명확한 응답을

관련 문제