在 PG 的 Bookshelf 中显式设置用户模式
Explicitly set user schema in Bookshelf for PG
在我们的开发环境中,每个开发人员都有自己的模式来复制阶段和生产数据库。需要能够将用户模式作为客户端配置的一部分传递。这是配置...
"client": {
"username": "user_login",
"password": "user_password",
"host": "db_host",
"port": 5432,
"database": "db_name",
"dialect": "pg",
"schema": "user_schema"
}
...这是实例化...
var Knex = require('knex')({
client: client.dialect,
connection: {
host: client.host,
user: client.username,
password: client.password,
database: client.database,
searchPath: client.schema
});
var Bookshelf = require('bookshelf')(Knex);
检查 Bookshelf 和 Knex 对象时,我无法确定正在使用哪个架构。我不得不深入研究 SchemaCompiler_PG.prototype.hasTable 方法,我碰巧在查询响应对象的数组中找到它,其中包括 table_schema 的 属性,愉快地设置为 public.我试图将其设置为我的模式,但没有成功。
因此我们为每个用户登录设置默认搜索路径。
ALTER ROLE user_login SET search_path TO 'user_schema'
检查响应对象,table_schema 被设置为我的搜索路径。但是当另一个开发人员试图 运行 她机器上的代码(Node 和 PG 的本地实例)时,该响应对象被设置为我的模式。我们找不到手动设置的方法。
不知道那会是什么样的黑魔法,但需要知道如何为 Bookshelf/Knex/PG 设置用户架构。
虽然我无法找到原始问题(如何设置 PG 架构)的答案,但我能够解决手头的问题。原来是PG中的权限问题。确保所有用户在各自 search_path 中拥有 r/w 权限并且一切正常。
我在 Bookshelf、Knex 或 PG 客户端中的任何地方都找不到任何错误消息指出这可能是罪魁祸首,因此希望这对某人有所帮助。
在我们的开发环境中,每个开发人员都有自己的模式来复制阶段和生产数据库。需要能够将用户模式作为客户端配置的一部分传递。这是配置...
"client": {
"username": "user_login",
"password": "user_password",
"host": "db_host",
"port": 5432,
"database": "db_name",
"dialect": "pg",
"schema": "user_schema"
}
...这是实例化...
var Knex = require('knex')({
client: client.dialect,
connection: {
host: client.host,
user: client.username,
password: client.password,
database: client.database,
searchPath: client.schema
});
var Bookshelf = require('bookshelf')(Knex);
检查 Bookshelf 和 Knex 对象时,我无法确定正在使用哪个架构。我不得不深入研究 SchemaCompiler_PG.prototype.hasTable 方法,我碰巧在查询响应对象的数组中找到它,其中包括 table_schema 的 属性,愉快地设置为 public.我试图将其设置为我的模式,但没有成功。
因此我们为每个用户登录设置默认搜索路径。
ALTER ROLE user_login SET search_path TO 'user_schema'
检查响应对象,table_schema 被设置为我的搜索路径。但是当另一个开发人员试图 运行 她机器上的代码(Node 和 PG 的本地实例)时,该响应对象被设置为我的模式。我们找不到手动设置的方法。
不知道那会是什么样的黑魔法,但需要知道如何为 Bookshelf/Knex/PG 设置用户架构。
虽然我无法找到原始问题(如何设置 PG 架构)的答案,但我能够解决手头的问题。原来是PG中的权限问题。确保所有用户在各自 search_path 中拥有 r/w 权限并且一切正常。
我在 Bookshelf、Knex 或 PG 客户端中的任何地方都找不到任何错误消息指出这可能是罪魁祸首,因此希望这对某人有所帮助。