Skip to content

Unclear on expected usage of pgtype JSONB #1324

Description

@adamdevigili

Trying to transition an existing project over to using sqlc, and all was well until I needed to use a jsonb type using pgx/pgtype. I've been unable to find a standard/doc on how to use it properly. I'm fairly new to SQL DBs, so trying to learn the "right" way to do things first..

sqlc.yaml

version: 1
packages:
  - path: "pkg/models"
    engine: "postgresql"
    schema: "sql/schema/"
    queries: "sql/queries/"
    sql_package: "pgx/v4"
    emit_json_tags: true
    emit_exported_queries: true

sql/schema/player.sql

CREATE TABLE IF NOT EXISTS player (
  ...
  skills jsonb
);

pkg/models/player.sql.go

type Player struct {
        ...
	Skills    pgtype.JSONB `json:"skills"`
}

I've gotten it to work by defining an internal struct and using the Set() method on the JSONB type..

player.go

type skillJSONB struct {
    Name string `json:"name"`
    Value int16 `json:"value"`
}

p := models.Player{}
p.Skills.Set(skillJSONB {
    Name: "foo",
    Value: 1,
})

And then I copy over the field to the CreatePlayerParams struct..

return &models.CreatePlayerParams {
    ...
    Skills: p.Skills,
}

Is this the expected way to be handling this? I saw on #819 that a user is using the overrides directive and implementing the Scanner interface, but I'd like to avoid that if there's a better way.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions