问题标签 [pgx]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
65 浏览

go - 如何通过 pgx 构建我的 Go 应用程序以进行交易

我有以下型号

我的服务调用 UsersModel.SignupUser 如下

现在,我需要绑定一个事务SignupUserCreateSession不是孤立的操作,不确定构建它的最佳方法是什么,以及如何在保持从服务中抽象出数据库特定内容的同时传递事务。或者我应该只调用会话表插入查询(我*SessionsModel.CreateSession 直接放入*UsersModel.SignupUser

作为参考,事务pgx通过调用*pgx.Conn.Begin() which 返回一个具体的发生pgx.Tx,您可以在其上执行与 *px.Conn 相同的功能,然后是*pgx.Tx.Commit()or*pgx.Tx.Rollback()

我的问题是:

  • 从哪里开始交易——模型还是服务?
  • 如果在服务中,我如何在从服务中抽象出底层数据库的同时做到这一点?
  • 如何在模型之间传递事务?
0 投票
1 回答
78 浏览

go - 如何使用可抵抗 SQL 注入的可选过滤器构建查询?

有这样一个数据库:

在此处输入图像描述

还有这样一个存储函数:

它返回这样一个json:

以下参数进入输入:

所有过滤器都是可选的。也就是说,如果没有过滤器,则输出所有记录。例如,如果 ,Direction Type List = [1,2]则只应返回表中mentor_direction_type的导师 ID 在 where 列中的那些记录direction_type_id = 1 or 2。等等。但是有没有一种方法可以在没有存储函数的情况下形成一个查询来抵抗 SQL 注入?如果您执行类似的操作len(direction Type List) != 0,然后在 for 循环中添加子查询,则该查询将容易受到 sql 注入的攻击。

总的来说,尝试在一个查询中完成所有事情有多好?我看到了一个选项:在主查询之前,查询 tomentor_direction_type和 tomentor_education_type然后做where mentor_id in (the result of querys).

进行诸如 - 之类的查询是正常的(SELECT JSON_AGG(el.name) FROM mentors.mentor_employment me INNER JOIN lists.employment_list el ON el.id = me.employment_id WHERE me.mentor_id = m.id) AS "competenceList",我不确定它是否已优化,但我没有看到任何其他选项。

我正在使用 Go、SQLX、PGX。

0 投票
1 回答
77 浏览

go - pgxpool.Connect 返回的池为 nil 或快速变为 nil 且无错误

我有以下代码用于连接到 Postgres 数据库:

用例是在使用 docker-compose 启动我的服务器时等待 Postgres 可用。即使代码休眠 if p == nil,第一次返回之前的日志也会打印出来:pool returned from connect: %!s(*pgxpool.Pool=<nil>)

有什么方法pgxpool可以让后台进程实现p == nil吗?

关于为什么会发生这种情况的任何想法?

编辑:这似乎只发生在通过 docker-compose 运行我的应用程序和 Postgres 时。我正在使用以下撰写文件:

和我的应用程序的 Dockerfile:

还有一个最小可重现的示例 go 文件:

0 投票
0 回答
116 浏览

amazon-web-services - AWS RDS 代理不会自行关闭数据库连接

使用 pgxpool 作为客户端池的导入,也使用 RDS 代理进行池

文件夹结构

  • 数据库

pghelper.go(这里使用单例 pgxPool.ConnectConfig(ctx, config) 并将连接实例返回给所有处理程序

  • 处理程序

内部处理程序调用连接池实例来运行数据库查询

注意:根据 Stackoverflow 中的少数文档,不关闭处理程序内或代码中的任何地方的实例

这是正确的方法吗?

由于 ClientConnections 正在关闭,但即使在 RDS 代理中收到超时后数据库连接也没有关闭

超时设置

  1. 拉姆达:1 分钟
  2. RDS 代理:5 分钟

我应该如何使池按预期工作,因为我觉得池没有发生并且数据库连接在超时后也没有关闭?

0 投票
2 回答
179 浏览

go - 如何使用 golang 中的 pgx 驱动程序处理 postgres 查询错误?

我阅读了有关错误处理的官方指南

我应用了它

代码不起作用,我的应用程序不打印任何内容。但是postgres日志有ERROR: duplicate key value violates unique constraint "articles_uri_key"

好的,我可以使用标准的 golang 方法:

no rows in result set一个问题,它在 postgres 日志中没有错误时打印。

我尝试替换 if err != nilif err != errors.New("no rows in result set"),

它仍然打印no rows in result set

0 投票
2 回答
52 浏览

postgresql - 尝试插入 postgresql 时 conn 关闭

我尝试将用户插入 postgres 数据库并取回三个参数以进行进一步处理,但总是得到错误“conn closed”:

connect 在创建存储库时插入到 application.go

Connect 在 postgresql 包中全局声明

它有什么问题?

0 投票
2 回答
51 浏览

postgresql - 为 pgxpool.Config 设置 DialFunc

我无法使用“github.com/jackc/pgx/v4/pgxpool”库通过 ssh 隧道创建与 postgres 数据库的连接。我似乎无法弄清楚如何为我想用来建立连接的 *pgxpool.Config 设置 DialFunc。这就是我想要做的:

当我尝试设置 DialFunc 时,出现以下错误:不能使用 (func(network, addr string) (net.Conn, error) literal) (value of type func(network string, addr string) (net.Conn, error )) 作为赋值中的 pgconn.DialFunc 值

关于如何让它工作的任何建议?

0 投票
2 回答
366 浏览

postgresql - 使用 pgx 在 GO 中的 Postgres 中批量插入

我正在尝试在 db 中批量插入密钥,这里是代码 Key Struct

}

测试键

插入部分

运行时抛出错误:预期 10 个参数,得到 1

什么是批量插入的正确方法。

0 投票
2 回答
41 浏览

go - 使用 pgx 和 go 在简单的 postgresql 查询中返回 id

我正在尝试运行这个简单的查询来返回 id,根据作者的说法,我们使用 QueryRow 函数,好的,但是这个查询结果返回一个期望 2 个 args 但在这里某处收到 3 个错误。

查询模型.go

处理程序.go

main.go

我只是在这里使用一个结构来为我的处理程序注入依赖项。

错误输出

帮手.go

0 投票
0 回答
23 浏览

go - 无法使用 logrusadapter.NewLogger(logrusLogger)(类型 *logrusadapter.Logger 的值)

我正在按照这个pgxSO 问题在我的连接中实现一个记录器,因为我closed poolScan.

我在 vscode 中遇到了这个错误。

不能将 logrusadapter.NewLogger(logrusLogger) (类型 *logrusadapter.Logger 的值)用作“github.com/jackc/pgx/v4”。分配中的记录器值:方法日志的类型错误(具有 func(级别 github.com/jackc /pgx.LogLevel, msg string, data map[string]interface{}), want func(ctx context.Context, level github.com/jackc/pgx/v4.LogLevel, msg string, data map[string]interface{} ))