首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go和pgx:无法将[+11111111111]转换为文本

Go和pgx:无法将[+11111111111]转换为文本
EN

Stack Overflow用户
提问于 2022-03-04 23:22:36
回答 2查看 709关注 0票数 0

我刚接触过golang和pgx,当我尝试运行一个简单的查询时,我遇到了一个问题。我在postgres有下表。

代码语言:javascript
复制
CREATE TABLE users (
    user_id BIGINT PRIMARY KEY GENERATED ALWAYS AS IDENTITY,
    phone_number TEXT NOT NULL UNIQUE, 
);

当我尝试运行以下查询时:

代码语言:javascript
复制
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时,实际上没有问题。

代码语言:javascript
复制
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)
}

我假设类型信息发生了变化,但仍然无法解决如何修复它。

当我在SQLClient.Query中打印SQLClient.Query类型信息时,通过使用fmt.Println(reflect.TypeOf(args)),我得到以下信息:[]interface {}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-06 09:19:39

您忘记将...添加到传递给db.Conn.Query()args参数中。

代码语言:javascript
复制
func (db *SQLClient) Query(ctx context.Context, query string, args ...interface{}) (pgx.Rows, error) {
    return db.Conn.Query(ctx, query, args...)
}

规格

票数 3
EN

Stack Overflow用户

发布于 2022-03-05 05:30:40

我在这里看到了同样的问题

我认为这是由于pgx内部使用准备语句和PostgreSQL无法确定占位符的类型而造成的。最简单的解决方案是在占位符中包含类型信息。例如$1::int。或者,您可以将pgx配置为使用简单协议而不是准备好的语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71358226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档