第三个查询可以在同一个 db.any() 调用中的两个查询中间执行吗?

Can a third query execute in the middle of two queries inside the same db.any() call?

如果我有以下代码,在请求中间执行:

db.any('SET search_path TO user001; SELECT * FROM messages')

第二个请求能否在第一个查询的 SET 和 SELECT 之间执行查询? 例如:

另外,在 运行 时定义 search_path 的好方法是什么?我想过使用 db.task() 但这会将每秒请求数限制在 100 左右,对吗?

Could a second request execute a query in between the SET and the SELECT of the first query?

不,这样的查询被作为一个处理,这就是所谓的原子操作。

Also what's a good way of defining the search_path at run time?

pg-promise 中,初始化选项 schema 执行此操作。它会为每个新连接自动设置架构。

但是,如果您需要为每个请求不断更改当前模式,即如果您实际上为每个用户都有一个单独的数据库模式,那么它就不起作用,您将需要使用这种方法尝试过,即在每个查询前添加架构更改查询。

然而,在处理一个请求的同时对每个查询都这样做是没有意义的,您只需要在开始处理请求时这样做一次。这就是自动 tasks/transactions 最适合的原因。事实上,您可以使用事件 extend 添加您自己的自定义 task/transaction,它会在开始时执行模式更改。

I thought of using db.task() but that would limit the number of requests per second to around 100, right?

不是,你是从哪里找到这样的信息的? :) 任务不会添加任何此类限制。