Zachscs
Zachscs

Reputation: 3663

Convert client UUID to SQL UUID

I'm using go and the package uuid to generate a uuid of type [16]byte. However when I try to insert that uuid into my postgres column of type uuid I get the error converting argument $1 type: unsupported type [16]uint8, a array. So apparently I should convert the uuid on the client before I insert it into the db. How should I do that? What type should I convert it to?

In short: What go data type will work with uuid in postgres?

Upvotes: 4

Views: 3384

Answers (1)

Collierton
Collierton

Reputation: 549

Thanks to the link from @sberry, I found success. Here are snippets of the code for your benefit (with a PostgreSQL 9.5 database):

import (
    "database/sql"
    "net/http"

    "github.com/google/uuid"
)

type Thing struct {
    ID     uuid.UUID `json:"-" sql:",type:uuid"`
    Name   string    `json:"name"`
}

// For a database table created as such:
// CREATE TABLE things ( 
// id UUID PRIMARY KEY DEFAULT gen_random_uuid(), 
// name TEXT DEFAULT ''::text
// )

func selectThingssSQL() ([]Thing, error) {
    things := make([]Thing, 0)

    rows, err := db.Query("SELECT id, name FROM things")
    if err != nil {
        return nil, err
    }
    defer rows.Close()

    for rows.Next() {
        t := &Thing{}
        if err := rows.Scan(&t.ID, &t.Name); err != nil {
            return nil, err
        }
        things = append(things, *t)
    }

    return things, nil
}

Upvotes: 3

Related Questions