가장 좋은 방법은 데이터 형식이 텍스트 인터페이스를 통해 응용 프로그램과 상호 작용한다는 것입니다. Libpq는 무엇이든에서 문자열을 반환합니다. 프로그래머는 문자열을 파싱하고 그 문자열을 데이터 형식으로 만들 책임이 있습니다. 나는 저자가 아마도 질문을 포기했음을 안다. 그러나 나는 비슷한 무엇인가를 연구 중이다. 그리고 몇몇 경우에 도움이되는 몇 가지 중요한 트릭을 문서화하는 것이 가치가있다.
분명히 이것이 C 언어 유형이고, 내부 및 외부 표현이있는 경우, 평소대로 문자열을 구문 분석해야합니다.
(35,65,1111111,f,f,2011-10-06,"2011-10-07 13:11:24.324195",186,chris,f,,,,f)
이 쉽게 분석 할 수 있습니다 :
그러나 배열과 튜플에 대한 표기는 예를 들어 튜플이 표시 될 수있다 기본적으로
[open_type_identifier][csv_string][close_type_identifier]
입니다. 첫 번째 및 마지막 문자를 벗어나면 일반적으로 기존 csv 프로세서를 사용할 수 있습니다. 또한, 고려 :
select row('test', 'testing, inc', array['test', 'testing, inc']);
row
-------------------------------------------------
(test,"testing, inc","{test,""testing, inc""}")
(1 row)
을이 보듯이, 사실, 그 다음 세 번째 속성이 배열 인 것을 결정하고, 할 수 있도록, 중첩 된 속성 안에 탈출 표준 CSV를 (따옴표를 undoubled 한), 구문 분석 배열로. 이러한 방식으로 중첩 된 데이터 구조는 JSON과 같은 형식으로 예상되는 것과 비슷한 방식으로 처리 할 수 있습니다. 트릭은 중첩 된 CSV라는 것입니다.
사용자 지정 데이터 형식이란 무엇입니까? –
다음과 같음 : typedef struct Point3D { \t char id [50]; \t int idnull; \t double x; \t double y; \t double z; \t } \t Point3D; 나는 PQgetValue의 반환 문자열을 구문 분석해야한다고 생각합니다. 나는 이것에 일하고있다. 그래서 그것이 작동하면 나는 그것을 여기에 게시 할 것이다. : D – mocopera
거의 모든 것이 문자열로 반환됩니다. Postgres의 [arrays] (http://www.postgresql.org/docs/current/static/arrays.html#ARRAYS-IO)는 문자열로 반환되는 유용한 예제이며 응용 프로그램에서 유용하게 사용하려면 구문 분석해야합니다 . "test_point3d.point"의 내용과 Postgres에 의해 /로 변환되는 것으로 표현되는 방식에 따라 문자열을 구문 분석하고 데이터 유형으로 변환해야합니다. –