Node.js访问PostgreSQL的注意事项笔记
在操作node.js脚本访问PostgreSQL数据库时,使用INSERT和UPDATE功能未成功,调整后操作成功,笔记以记录。
前序
NODE.JS加载pg模块,访问PostgreSQL数据库,数据库连接和查询功能都正常,使用插入记录INSERT和修改记录UPDATE时,报告找不到字段。 
问题分析和解决
数据库里原本配置的字段名采用的都是大写,如:  测试脚本为:
var pg = require('pg');
var conString = "tcp://postgres:test@localhost/postgres";
var client = new pg.Client(conString);
client.connect(function(error, results){
if (error) {
console.log('clientConnectionReady Error:'+error.message);
client.end();
return;
}
else{
console.log('connection success...\n');
setTimeout(function(){
client.query("INSERT INTO dbtest (SN, NAME, PROP) VALUES('20220002', 'demo', '')", function (err, result) {
if (err) {
return console.error('error running query', err);
}
console.log(result);
});
},1000) ;
return;
}
});
从报错信息看到,报告字段找不到时,提及的是小写的字段名,而数据库中配置的是大写的字段名,因此推测是不是pg模块与PostgreSQL的配合问题,首先将数据库里的字段名改为小写:  调整脚本为:
var pg = require('pg');
var conString = "tcp://postgres:test@localhost/postgres";
var client = new pg.Client(conString);
client.connect(function(error, results){
if (error) {
console.log('clientConnectionReady Error:'+error.message);
client.end();
return;
}
else{
console.log('connection success...\n');
setTimeout(function(){
client.query("INSERT INTO dbtest (sn, name, prop) VALUES('20220002', 'demo', '')", function (err, result) {
if (err) {
return console.error('error running query', err);
}
console.log(result);
});
},1000) ;
return;
}
});
然后问题解决,插入记录成功,这里插入记录的脚本语句是双引号内包单引号。 
注意事项
上面提及了用Node.js pg模块访问PostgreSQL,表格字段名需要为小写的问题。 有另外一个注意事项需要留意,在使用插入记录语句时,相同内容的脚本,采用单引号内包双引号产生访问失败:
var pg = require('pg');
var conString = "tcp://postgres:test@localhost/postgres";
var client = new pg.Client(conString);
client.connect(function(error, results){
if (error) {
console.log('clientConnectionReady Error:'+error.message);
client.end();
return;
}
else{
console.log('connection success...\n');
setTimeout(function(){
client.query('INSERT INTO dbtest (sn, name, prop) VALUES("20220002", "demo", "null")', function (err, result) {
if (err) {
return console.error('error running query', err);
}
console.log(result);
});
},1000) ;
return;
}
});
 而如前所述,采用双引号内包单引号,则没有问题。 而对于查询语句,则单引号内包双引号没有问题,如:
client.query('SELECT "sn", "name" FROM "dbtest"', function (err, result) {
if (err) {
return console.error('error running query', err);
}
console.log(result);
});
因此,在使用Node.js的pg模块访问PostgreSQL数据库时,需要留意字段名和双引号单引号包含顺序问题。
–End–
|