Skip to content

how to query with enum array ? #1549

@liweimeng1215

Description

@liweimeng1215

hello! when i use query with arry of enums, i get an error: Query failed. err=failed to encode args[0]: unable to encode []main.Level{"low", "middle"} into text format for unknown type (OID 16408): cannot find encode plan
first, i create a table of author and level is enum type

create table authors
(
    id    bigserial,
    name  text                         not null,
    bio   text,
    age   integer default 18           not null,
    level level   default 'low'::level not null,
    primary key (id)
);

then, i use query like this:

type Level string

const (
	LevelLow    Level = "low"
	LevelMiddle Level = "middle"
	LevelHigh   Level = "high"
)

func main() {
	ctx := context.Background()
	conn, err := pgx.Connect(ctx, "postgres://postgres:123456@localhost:5432/postgres")
	if err != nil {
		log.Fatalf("init pgx failed. err=%v", err)
	}
	rows, err := conn.Query(ctx, `
SELECT id
FROM authors
WHERE level = ANY ($1::level[])
`, []Level{LevelLow, LevelMiddle})
	if err != nil {
		log.Fatalf("Query failed. err=%v", err)
	}
	defer rows.Close()
	var ids []int64
	for rows.Next() {
		var id int64
		if err := rows.Scan(&id); err != nil {
			log.Fatalf("scan failed. err=%v", err)
		}
		ids = append(ids, id)
	}
	if err := rows.Err(); err != nil {
		log.Fatalf("rows.Err(). err=%v", err)
	}
	fmt.Println(ids)
}

Could you tell me how can i use []Level type to query the ids?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions