2017-01-22 1 views
1

그래서 postgres를 쿼리하기 위해 go-gorp를 사용하고 있으며 내 테이블에서 복합 유형을 쿼리 할 수 ​​없다는 오류가 발생합니다. 내가 원하는 것은 적절히 중첩 된 JSON 응답이다. 내 포스트 그레스 스키마는 다음과 같습니다고글에서 Postgres 복합 유형 쿼리하기

CREATE TYPE PhoneType AS ENUM ('MOBILE', 'HOME', 'WORK'); 

CREATE TYPE PhoneNumber AS (
    "Number" VARCHAR, 
    "Type" PhoneType 
); 

CREATE TABLE Person (
    "Id" SERIAL PRIMARY KEY NOT NULL, 
    "Name" VARCHAR NOT NULL, 
    "Email" VARCHAR, 
    "Number" PhoneNumber[] 
); 

가 상응 golang에, 나는

const (
    MOBILE PhoneType = iota 
    HOME 
    WORK 
) 

type PhoneNumber struct { 
    Number string 
    Type PhoneType 
} 

type Person struct { 
    Id   int 
    Name  string 
    Email  string 
    PhoneNumber  // not sure how to get array of phone numbers here 
} 

을 다음과 같이, 내가 가서-GORP를 사용하고 쿼리 :

dbmap := &gorp.DbMap{Db: db, Dialect: gorp.PostgresDialect{}} 
var data []Person 
_, err := dbmap.Select(&data, "SELECT * FROM Person") 

내가이 얻을 결과를 형식

{ 
    "Id": 
    "Name": 
    "Email" 
    "Number": "{\"(..., ...)\"}" 
    "Type": 0 
} 

나는 예상되는 것은 :

{ 
    "Id": 
    "Name": 
    "Email": 
    "PhoneNumber": [{ 
    "Number": 
    "Type": 
    }] 
} 

이 중첩 된 복합 유형을 내 선언에 친숙한 유형으로 변경하려면 어떻게해야합니까?

편집 : postres 배열과 복합 유형이 이동 중에 문자열이되는 것처럼 보입니다. 비슷한 결과를 얻기 위해 스키마를 어떻게 재 설계 할 수 있습니까?

답변

0

당신의 유형 선언이 잘못된 예를 들어,이 시도 :

type Phone struct { 
    Number string 
    Type PhoneType 
} 

type Person struct { 
    Id   int 
    Name   string 
    Email   string 
    PhoneNumber []Phone  
} 
+0

난 이미 여기가 내가 오류 있다는 시도 SQL : 지원되지 않는 검사, driver.Value 유형을 저장 : 열 인덱스 3에 검색 오류 [] uint8을 type으로 변환 [] main.PhoneNumber – tushar