После небольшого исследования я обнаружил, что PostgreSQL предоставляет версию сервера во время соединения, в пределах стартового сообщения .
И особенно в node-postgres драйвер, мы можем сделать Пул предоставить пользовательский Клиент , который обрабатывает событие 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);
На моемТестовый ПК Я использую PostgreSQL v11.2, поэтому этот тест выводит:
Server Version: 11.2
ОБНОВЛЕНИЕ
Библиотека pg-обещание обновлено доПоддержка той же функциональности в TypeScript. И вы можете найти полный пример в этот билет .