我是 golang 和 pgx 的新手,當我嘗試運行一個簡單的查詢時遇到了問題。我在 postgres 中有下表。
CREATE TABLE users (
user_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
phone_number TEXT NOT NULL UNIQUE,
);
當我嘗試運行以下查詢時:
func sampleFunc(db dbClient){
number := " 111111111"
rows, err := db.Query(context.Background(), "SELECT user_id FROM users WHERE phone_number=$1::TEXT;", number)
if err != nil {
log.Println(err)
return false, err
}
}
我收到以下錯誤:無法將 [ 111111111] 轉換為文本。
編輯 03/05/2022
我應該注意,我將 包裝pgxpool.Pool在我自己的結構中,并且由于某種原因,當我直接使用 pgxpool 時實際上沒有問題。
type dbClient interface {
Query(ctx context.Context, query string, args ...interface{}) (pgx.Rows, error)
}
type SQLClient struct {
Conn *pgxpool.Pool
}
func (db *SQLClient) Query(ctx context.Context, query string, args ...interface{}) (pgx.Rows, error) {
return db.Conn.Query(ctx, query, args)
}
我假設然后型別資訊發生了一些事情,但仍然無法弄清楚如何修復它。
當我在 中列印args型別資訊時SQLClient.Query,使用fmt.Println(reflect.TypeOf(args)),我得到以下資訊: []interface {}
uj5u.com熱心網友回復:
您忘記添加傳遞給...的args引數db.Conn.Query()。
func (db *SQLClient) Query(ctx context.Context, query string, args ...interface{}) (pgx.Rows, error) {
return db.Conn.Query(ctx, query, args...)
}
規格。
uj5u.com熱心網友回復:
我在這里看到了同樣的問題
我認為這是由于 pgx 在內部使用準備好的陳述句和 PostgreSQL 無法確定占位符的型別的組合引起的。最簡單的解決方案是在占位符中包含型別資訊。例如 $1::int。或者,您可以將 pgx 配置為使用簡單協議而不是準備好的陳述句。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/438849.html
標籤:PostgreSQL 走 pgx
