我正在尝试学习如何使用javascript连接到postgresql数据库但是当我尝试使用query.on(...)将查询记录到控制台时,我得到一个类型错误,上面写着"query.on不是功能".我已经广泛搜索了如何解决这个问题,但似乎无法找到关于.on函数的任何文档.我知道连接成功,因为当我从终端查询数据库时,添加了两个新行.
jsontest.js
var pg = require('pg');
var conString = "postgres://[username]:[password]@localhost:5432/VONKTA1";
//username and password masked
var client = new pg.Client(conString);
client.connect();
client.query("INSERT INTO json_test (name, attributes) VALUES ('Ted', $1)", [{"age": 2, "gender": "M"}]);
client.query("INSERT INTO json_test (name, attributes) VALUES ('Sarah', $1)", [{"age": 8, "gender": "F"}]);
console.log("about to query");
var query = client.query("SELECT * FROM json_test");
query.on('row', function(row) {
console.log(row);
});
query.on('end', function() {
client.end();
});
Run Code Online (Sandbox Code Playgroud)
的package.json
{
"name": "test",
"version": "1.0.0",
"description": "",
"main": "test.js",
"scripts": {
"test": "echo \"Error: no …Run Code Online (Sandbox Code Playgroud) 我将使用Postgresql构建一个Nodejs应用程序作为后端.我不打算使用像Sequelize这样的ORM,因为文档和性能问题不好或任何其他ORM - ORM是一种反模式.
我发现node-postgres和pg-promise在这方面是候选者.因此,任何人都可以澄清其中一个工具比另一个工具更好的方案,或者哪个工具更适合描述,前提是node-postgres自2010年以来一直在发展,并且自2015年以来一直是pg-promise.
我正在编写一个使用Postgres数据库的Node.js Web服务器.我曾经连接过每个新请求,如下所示:
app.get('/', function (req, res) {
pg.connect(pgconnstring, function (err, client) {
// ...
});
});
Run Code Online (Sandbox Code Playgroud)
但在几次请求之后,我注意到Heroku在尝试连接时出现"内存不足"错误.我的数据库只有10行,所以我看不出这是怎么回事.我的所有数据库访问都是这种形式:
client.query('SELECT * FROM table', function (err, result) {
if (err) {
res.send(500, 'database error');
return;
}
res.set('Content-Type', 'application/json');
res.send(JSON.stringify({ data: result.rows.map(makeJSON) }));
});
Run Code Online (Sandbox Code Playgroud)
假设内存错误是由于与数据库有多个持久连接,我切换到我在几个node-postgres连接文件顶部只连接一次的例子中看到的样式:
var client = new pg.Client(pgconnstring);
client.connect();
app.get('/', function (req, res) {
// ...
});
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试在连接中断后执行查询时,我的请求会挂起(无限期?).(我通过杀死一个Postgres服务器并将其恢复来模拟它.)
那么我该怎么做呢?
可以像这样插入一行:
client.query("insert into tableName (name, email) values ($1, $2) ", ['john', 'john@gmail.com'], callBack)
Run Code Online (Sandbox Code Playgroud)
此方法会自动注释掉任何特殊字符.
如何一次插入多行?
我需要实现这个:
"insert into tableName (name, email) values ('john', 'john@gmail.com'), ('jane', 'jane@gmail.com')"
Run Code Online (Sandbox Code Playgroud)
我可以使用js字符串运算符手动编译这些行,但后来我需要以某种方式添加特殊字符转义.
我已将输入数据以日期格式存储在 postgres 数据库中,但是当我在浏览器中显示日期时,它显示带有时区的日期并将其从 utc 转换。例如,我已经以格式存储了日期2020-07-16。但是当我显示日期时,它就变成了2020-07-15T18:00:00.000Z。我尝试使用select mydate::DATE from table仅获取日期,但它仍然显示带有时区的日期。我在我的节点应用程序中使用node-postgres模块。我怀疑这是node-postgres模块上的一些配置?来自他们的文档:
node-postgres 将 DATE 和 TIMESTAMP 列转换为在 process.env.TZ 中设置的节点进程的本地时间
他们有什么办法可以将其配置为仅解析日期吗?如果我像这样查询,SELECT TO_CHAR(mydate :: DATE, 'yyyy-mm-dd') from table我会得到2020-07-16,但是为了获取日期需要做很多工作
我们有一个生产部署的 Node js 应用程序,该应用程序全天提供大量流量。该应用程序处于环回状态,并通过其 postgres 连接器连接到 postgres db。连接器利用 Node-Postgres 作为其 pg 客户端。我们通常将最大池大小设置为 50,最小池大小设置为 5。应用程序平均运行三个实例。
我们面临的问题是,应用程序时不时地无法建立数据库连接,并出现错误 - 原因:错误:尝试连接时超时。我们尝试调试相同的问题,但发生这种情况时数据库上没有负载 - 没有 CPU 峰值,没有内存利用率峰值。仅供参考,我们使用 AWS Postgres RDS。
我们保留了以下配置作为连接参数的一部分
connector: 'postgresql',
host: host,
user: user,
password: password,
database: database,
min: 5,
max: 50,
idleTimeoutMillis: 60000,
query_timeout: 5000,
connectionTimeoutMillis: 10000
Run Code Online (Sandbox Code Playgroud)
有人可以告诉我们为什么这种情况会如此频繁地发生吗?目前,这种情况每周都会发生。只有在应用程序重新启动后我们才能解决它。这可能会释放池并终止空闲连接。但我们已经通过应用程序做到了。
我正在使用React编写节点应用程序,使用node-postgres和superagent进行后端调用.假设我正在发出GET请求并使用它返回的JSON来填充学生表.我的API看起来像这样:
import pg from 'pg';
import Router from 'express';
let router = new Router();
let conString = "postgres://user:pass@localhost/db_name";
router.get('/getStudents', function(req, res) {
var results = [];
pg.connect(conString, function(err, client, done) {
if (err) {
done();
console.log(err);
return res.status(500).json({success: false, data: err});
}
var query = client.query('SELECT first_name, last_name, email FROM students');
query.on('row', function(row) {
results.push(row);
});
query.on('end', function() {
done();
return res.json(results);
});
});
});
Run Code Online (Sandbox Code Playgroud)
在页面加载时,从商店调用此项来设置学生数组.这似乎出现了问题:
var request = require('super agent');
function getStudents() {
request
.get('/api/getStudents')
.set('Accept', 'application/json')
.end(function(err, res) …Run Code Online (Sandbox Code Playgroud) 我正在使用node-postgres生产应用程序,我想知道是否有任何我应该关注的事项?数据是否自动消毒node-postgres?
我在github页面上找不到任何关于它的信息:https://github.com/brianc/node-postgres
我刚刚使用node-postgres开始使用postgres来使用node.js.我试图做的一件事就是写一个简短的js来填充我的数据库,使用一个包含大约200,000个条目的文件.
我注意到在一段时间后(少于10秒),我开始得到"错误:连接终止".我不确定这是否是我使用node-postgres的问题,或者是因为我是垃圾邮件postgres.
无论如何,这是一个显示此行为的简单代码:
var pg = require('pg');
var connectionString = "postgres://xxxx:xxxx@localhost/xxxx";
pg.connect(connectionString, function(err,client,done){
if(err) {
return console.error('could not connect to postgres', err);
}
client.query("DROP TABLE IF EXISTS testDB");
client.query("CREATE TABLE IF NOT EXISTS testDB (id int, first int, second int)");
done();
for (i = 0; i < 1000000; i++){
client.query("INSERT INTO testDB VALUES (" + i.toString() + "," + (1000000-i).toString() + "," + (-i).toString() + ")", function(err,result){
if (err) {
return console.error('Error inserting query', err);
}
done();
});
}
}); …Run Code Online (Sandbox Code Playgroud) 我正在运行Node 7.6.0,它支持async/await.node-postgres客户端池支持async/await,这里有一个很好的例子.但是,node-postgres中的事务示例(此处)使用回调而不是async/await.尽管如此,我还是认为我会在快速测试中尝试使用async/await进行交易:
let client = null;
try {
client = await this.pool.connect();
} catch (error) {
console.log('A client pool error occurred:', error);
return error;
}
try {
await client.query('BEGIN');
await client.query('UPDATE foo SET bar = 1');
await client.query('UPDATE bar SET foo = 2');
await client.query('COMMIT');
} catch (error) {
try {
await client.query('ROLLBACK');
} catch (rollbackError) {
console.log('A rollback error occurred:', rollbackError);
}
console.log('An error occurred:', error);
return error;
} finally {
client.release();
}
return 'Success!'; …Run Code Online (Sandbox Code Playgroud) node-postgres ×10
node.js ×10
postgresql ×6
javascript ×2
json ×1
pg ×1
pg-promise ×1
reactjs ×1
sql ×1
superagent ×1
transactions ×1