pgx
pgx copied to clipboard
RowToStructByName, Lax and Pos not working with `db:"-"` tag
pgx throwing "struct doesn't have corresponding row field db:"-" with the following functions:
- RowToStructByName
- RowToStructByNameLax
- RowToStructByPos
Code Im working with Model
// model
type AccountModel struct {
SkId uuid.UUID `db:"-"`
SkUsername string `db:"username"`
SkEmail string `db:"email"`
SkCreatedAt time.Time `db:"created_at"`
SkUpdatedAt time.Time `db:"updated_at"`
}
Postgres Table
CREATE TABLE "accounts" (
id UUID PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email TEXT NOT NULL,
created_at TIMESTAMP NOT NULL,
updated_at TIMESTAMP NOT NULL
);
Queries used
// both queries were used in testing
queryv1 := `SELECT * FROM "accounts" WHERE id=$1 OR username=$2 OR email=$3`
queryv2 := `SELECT id,username,email,created_at,updated_at FROM "accounts" WHERE id=$1 OR username=$2 OR email=$3`
Code being ran
type storage struct {
Conn *pgx.Conn
}
func (s *storage) Find(ctx context.Context, id uuid.UUID, email, username string) (AccountModel, error) {
rows, err := s.Conn.Query(ctx, queryv1, id, username, email) // both queryv1 and queryv2 was tried here
if err != nil {
return AccountModel{}, err
}
// doesn't work with
// RowToStructByName
// RowToStructByNameLax
// RowToStructByPos
m, err := pgx.CollectOneRow(rows, pgx.RowToStructByName[AccountModel])
if err != nil {
return AccountModel{}, err
}
return m, nil
}
Error Message
"struct doesn't have corresponding row field id"
Expected behavior Should expect the id field to be excluded in the returned struct. When I include the id field it works and throws no error. I've looked through all previous error post opened and the solutions linked there have not worked.
Version
- Go: go version go1.22.5 windows/amd64
- PostgreSQL: PostgreSQL 16.1, compiled by Visual C++ build 1937, 64-bit
- pgx: github.com/jackc/pgx/v5 v5.6.0
Your query returns a column "id" but you don't have anywhere to scan it. Every column returned from a query must have a destination for the RowToStruct* functions.