标签: node-postgres

query.on不是一个函数

我正在尝试学习如何使用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)

javascript node.js node-postgres postgresql-9.6

14
推荐指数
2
解决办法
1万
查看次数

node-postgres与Nodejs应用程序的pg-promise

我将使用Postgresql构建一个Nodejs应用程序作为后端.我不打算使用像Sequelize这样的ORM,因为文档和性能问题不好或任何其他ORM - ORM是一种反模式.

我发现node-postgrespg-promise在这方面是候选者.因此,任何人都可以澄清其中一个工具比另一个工具更好的方案,或者哪个工具更适合描述,前提是node-postgres自2010年以来一直在发展,并且自2015年以来一直是pg-promise.

postgresql node.js node-postgres pg-promise

12
推荐指数
1
解决办法
4679
查看次数

如何在服务器中使用node-postgres?

我正在编写一个使用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服务器并将其恢复来模拟它.)

那么我该怎么做呢?

  1. 正确地组合Postgres连接,这样我每次都可以"重新连接",而不会耗尽内存.
  2. 在网络出现故障后,全局客户端会自动重新连接.

node.js node-postgres

11
推荐指数
1
解决办法
7643
查看次数

如何使用node-postgres将多行正确插入PG?

可以像这样插入一行:

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字符串运算符手动编译这些行,但后来我需要以某种方式添加特殊字符转义.

javascript sql postgresql node.js node-postgres

11
推荐指数
3
解决办法
1万
查看次数

在node-postgres模块上显示带有时区的日期类型

我已将输入数据以日期格式存储在 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,但是为了获取日期需要做很多工作

postgresql node.js node-postgres

11
推荐指数
2
解决办法
7646
查看次数

Node-Postgres 错误:尝试连接时超时

我们有一个生产部署的 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)

有人可以告诉我们为什么这种情况会如此频繁地发生吗?目前,这种情况每周都会发生。只有在应用程序重新启动后我们才能解决它。这可能会释放池并终止空闲连接。但我们已经通过应用程序做到了。

postgresql node.js node-postgres

11
推荐指数
1
解决办法
5785
查看次数

在应用程序中发出GET请求时ECONNREFUSED,但API成功返回JSON

我正在使用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)

json node.js superagent node-postgres reactjs

10
推荐指数
1
解决办法
2万
查看次数

pg(node-postgres)是否自动清理数据

我正在使用node-postgres生产应用程序,我想知道是否有任何我应该关注的事项?数据是否自动消毒node-postgres

我在github页面上找不到任何关于它的信息:https://github.com/brianc/node-postgres

node.js pg node-postgres

10
推荐指数
3
解决办法
5917
查看次数

具有大量查询的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)

postgresql node.js node-postgres

9
推荐指数
1
解决办法
1万
查看次数

使用回调或async/await的node-postgres事务?

我正在运行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)

postgresql transactions node.js node-postgres

9
推荐指数
1
解决办法
5104
查看次数