从连接中获取 PostgreSQL 服务器版本?
Get the PostgreSQL server version from connection?
现代 PostgreSQL 连接协议中是否有任何指示服务器版本的内容?
如果没有,是否有端点可以针对打开的连接执行的特殊低级请求,以提取包含版本的服务器详细信息?
我正在寻找 node-postgres 的可能扩展,它将在每次新连接时自动提供服务器版本。我想知道这是否可能。
必须在每个新连接上执行 SELECT version()
然后解析它对于管理连接的基本驱动程序来说太高级了。它应该在协议级别完成。
经过一些研究,我发现 PostgreSQL 在连接期间确实提供了服务器版本,在 start-up message.
范围内
特别是在 node-postgres driver, we can make Pool provide a custom Client 中处理连接上的事件 parameterStatus
,并公开服务器版本:
const {Client, Pool} = require('pg');
class MyClient extends Client {
constructor(config) {
super(config);
this.connection.on('parameterStatus', msg => {
if (msg.parameterName === 'server_version') {
this.version = msg.parameterValue;
}
});
}
}
const cn = {
database: 'my-db',
user: 'postgres',
password: 'bla-bla',
Client: MyClient // here's our custom Client type
};
const pool = new Pool(cn);
pool.connect()
.then(client => {
console.log('Server Version:', client.version);
client.release(true);
})
.catch(console.error);
在我的测试 PC 上,我使用 PostgreSQL v11.2,所以这个测试输出:
Server Version: 11.2
更新
图书馆pg-promise has been updated to support the same functionality in TypeScript. And you can find a complete example in this ticket.
现代 PostgreSQL 连接协议中是否有任何指示服务器版本的内容?
如果没有,是否有端点可以针对打开的连接执行的特殊低级请求,以提取包含版本的服务器详细信息?
我正在寻找 node-postgres 的可能扩展,它将在每次新连接时自动提供服务器版本。我想知道这是否可能。
必须在每个新连接上执行 SELECT version()
然后解析它对于管理连接的基本驱动程序来说太高级了。它应该在协议级别完成。
经过一些研究,我发现 PostgreSQL 在连接期间确实提供了服务器版本,在 start-up message.
范围内特别是在 node-postgres driver, we can make Pool provide a custom Client 中处理连接上的事件 parameterStatus
,并公开服务器版本:
const {Client, Pool} = require('pg');
class MyClient extends Client {
constructor(config) {
super(config);
this.connection.on('parameterStatus', msg => {
if (msg.parameterName === 'server_version') {
this.version = msg.parameterValue;
}
});
}
}
const cn = {
database: 'my-db',
user: 'postgres',
password: 'bla-bla',
Client: MyClient // here's our custom Client type
};
const pool = new Pool(cn);
pool.connect()
.then(client => {
console.log('Server Version:', client.version);
client.release(true);
})
.catch(console.error);
在我的测试 PC 上,我使用 PostgreSQL v11.2,所以这个测试输出:
Server Version: 11.2
更新
图书馆pg-promise has been updated to support the same functionality in TypeScript. And you can find a complete example in this ticket.