Я пытаюсь подключиться к базе данных PostgreSQL и выполнить несколько запросов. Хотя я прочитал несколько тем здесь, документы и другие блоги, я не могу заставить его работать.
Моя функция выглядит так:
const postgreSQL = require('pg');
const config = {
host: 'host',
database: 'db',
user: 'user',
password: 'pass',
port: 0000,
max: 5, // max number of clients in the pool
idleTimeoutMillis: 30000
};
let pool = new postgreSQL.Pool(config);
//.........other code.........
function CheckGeometryType(pool, tableName, column) {
const schema = 'schema';
let geometryValue = undefined;
pool.connect(function(err, client, done) {
client.query(`SELECT ST_GeometryType(${column})
AS geometryType FROM ${schema}.${tableName} LIMIT 1`);
done(err);
if (err) {
console.log('Something went wrong. ' + err);
}
console.log("Result: " + queryResult.rows[0]);
switch (queryResult) {
// do things with result
}
done();
});
return geometryValue;
}
Я пытался сделать console.log()
внутри SWITCH , после / до done () , но он не выполняется. Я напечатал все запросы SQL, сформированные в строке, которую я передаю pool.query в pgAdmin
, и все работает и возвращает ожидаемые значения, которые я хочу получить.
Что я делаю не так?
Спасибо!
--- Редактировать ---
Спасибо за ответы, но я все еще не могу заставить его работать. Я пробовал оба метода, но это не работает. Глядя на Документацию Я пытаюсь этот метод.
Код:
let client = new Client(connectionString);
client.connect();
const query = client.query(new Query('SELECT ST_GeometryType($1) FROM $2.$3 LIMIT 1', [column, schema, tableName]));
console.log(JSON.stringify(query, null, 2)); //Debug purposes
query.on('row', (row) => {
switch (row[0]) {
case 'ST_LineString':
geometryValue = 'LineString';
break;
case 'ST_MultiLineString':
geometryValue = 'MultiLineString';
break;
case 'ST_Polygon':
geometryValue = 'Polygon';
break;
case 'ST_MultiPolygon':
geometryValue = 'MultiPolygon';
break;
case 'ST_Point':
geometryValue = 'Point';
break;
case 'ST_MultiPoint':
geometryValue = 'MultiPoint';
break;
default:
break;
}
});
query.on('end', (res) => {
if(result.rows[0] === undefined){
console.log('No data retrieved from DB');
}
client.end();
});
query.on('error', (res) => {
console.log("Something went wrong: " + res);
});
Отладка, я вижу, что в запросе значения хранятся в порядке:
{
"text": "SELECT ST_GeometryType($1) FROM $2.$3 LIMIT 1",
"values": [
"column",
"schema",
"table"
],
"portal": "",
"_result": {
"command": null,
"rowCount": null,
"oid": null,
"rows": [],
"fields": [],
"_parsers": [],
"RowCtor": null,
"rowAsArray": false
},
"_results": {
"command": null,
"rowCount": null,
"oid": null,
"rows": [],
"fields": [],
"_parsers": [],
"RowCtor": null,
"rowAsArray": false
},
"isPreparedStatement": false,
"_canceledDueToError": false,
"_promise": null,
"domain": null,
"_events": {},
"_eventsCount": 0
}
Я выполнил запрос на pgAdmin и работает нормально, возвращая желаемый результат, который я ожидаю, но кажется, что попытка выполнить запрос в сценарии не работает.
Что мне не хватает? Спасибо.