Expand yet keep performance
16 Apr 2021
The cryptic title to this entry just means this: When you want to fill in the args
for a SQL statement in an in clause, you ideally want to have just one arg
get filled in, not a list of args, because especially with numbered args, one needs to
get into string concatenation of a SQl query, and who wants to do that?
Example:
...where my_col in ($1, $2, $3)
But that's OK, because PostgreSQL has arrays, so one could instead do
...where my_col in (select unnest from unnest('{1, 2, 3, 4, 5}'::int2[]))
Hence
...where my_col in (select unnest from unnest($1::int2[]))
And in Go, using pgx, this would look like
daysOfWeek = []int{1, 2, 3, 4, 5}
dowArr := &pgtype.Int2Array{}
dowArr.Set(daysOfWeek)
rows, err := pgConn.Query(
context.Background(),
`select foo from x where my_col in (select unnest from unnest($1::int2[]))`,
dowArr)
Finally, note the unnest is nice to have
for performance reasons.