标签: node-postgres

node.js,pg,postgresql和insert查询(app hangs)

我有以下简单的节点应用程序将数据插入postgres数据库:

var pg = require('pg');
var dbUrl = 'tcp://user:psw@localhost:5432/test-db';

pg.connect(dbUrl, function(err, client, done) {
    for (var i = 0; i < 1000; i++) {
        client.query(
            'INSERT into post1 (title, body, created_at) VALUES($1, $2, $3) RETURNING id', 
            ['title', 'long... body...', new Date()], 
            function(err, result) {
                if (err) {
                    console.log(err);
                } else {
                    console.log('row inserted with id: ' + result.rows[0].id);
                }

            });
    }
});
Run Code Online (Sandbox Code Playgroud)

在终端中运行节点app.js后,它会在数据库中插入1000行,然后应用程序挂起,并且不会终止.我做错了什么?我已经研究过pg模块的例子,但没有发现我做的事情不同......

node.js node-postgres

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

Node-Postgres查询方法未调用其回调函数

我有以下使用node-postgres的代码:

    var client = new pg.Client(conString);
    client.connect(function(err) {
        if(err) {

            throw new Error(console.error('could not connect to postgres '+  err));
        }

    });
    client.query('select * from public.spatial_ref_sys', function(err, result){ 
        console.log('ffdafda');
        throw new Error('kokpokopko');
    });
Run Code Online (Sandbox Code Playgroud)

我认为执行此代码时,“ ffdafda”将被打印到屏幕上,并抛出一条错误消息“ kokpokopko”。我什至在调试器中永不中断地插入了一个断点。由于这些事情永远不会发生,因此我假设从未调用过回调。

我需要某种选项来调用回调吗?我正在阅读文档,但看不到任何东西。

重要的是要注意client.query被调用。我已经通过检查其返回值证明了这一点。

非常感谢你!

javascript asynchronous callback node.js node-postgres

5
推荐指数
1
解决办法
1447
查看次数

节点postgres日期未准确保存

我正在使用Node.js,Postgres和node-postgres库.当我尝试使用如下代码插入当前日期的新记录时:

client.query('INSERT INTO ideas(date) VALUES($1)', [new Date()], ...);
Run Code Online (Sandbox Code Playgroud)

这样运行正常,没有错误.但是,当我对数据库运行select语句并记录结果时,我给出的日期显示为:

Wed Nov 20 2013 19:00:00 GMT-0500 (EST)
Run Code Online (Sandbox Code Playgroud)

这很好,除了当我插入记录时,它是11月21日星期四.时间是5:47,而不是7:00,因为输出会显示.

我再运行了几次代码,无论时间是什么,它都存储了相同的不准确日期,即使下一个小时开始也是如此.这让我相信,由于某种原因,它只存储日期而不是小时或分钟.此外,日期只有一天的事实表明问题可能与node-postgres处理日期的方式有关.

我知道Javascript在将它传递给查询时计算当前日期并不是问题,因为我记录了new Date()它并且它是准确的,日期,分钟,小时和秒.

任何有关这个问题的帮助将不胜感激.谢谢!

postgresql node.js node-postgres

5
推荐指数
1
解决办法
5640
查看次数

Node.js/Express - 如何在routes/index.js中的app.js中定义变量?

我是Node.js和Express的新手.

如何在"routes/index.js"中访问名为"pg"的"app.js"中创建的变量?

app.js

/**
 * Module dependencies.
 */

var express = require('express');
var routes = require('./routes');
var user = require('./routes/user');
var http = require('http');
var path = require('path');

var pg = require('pg');
var conString = "postgres://someuser:somepass@localhost/postgres"

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
Run Code Online (Sandbox Code Playgroud)

路线/ index.js

/*
 * GET home page.
 */

exports.index = function(req, res){

    var client = new pg.Client(conString);
    client.connect(function(err) { …
Run Code Online (Sandbox Code Playgroud)

node.js express node-postgres

5
推荐指数
2
解决办法
8800
查看次数

使用brianc/node-postgres批量插入Postgres

我在nodejs中使用以下代码使用pg(https://github.com/brianc/node-postgres)我的代码为员工创建订阅就是这样.

    client.query(
      'INSERT INTO subscriptions (subscription_guid, employer_guid, employee_guid) 
       values ($1,$2,$3)', [
        datasetArr[0].subscription_guid,
        datasetArr[0].employer_guid,
        datasetArr[0].employee_guid
      ],


      function(err, result) {
        done();

        if (err) {
          set_response(500, err, res);
          logger.error('error running query', err);
          return console.error('error running query', err);
        }

        logger.info('subscription with created');
        set_response(201);

      });
Run Code Online (Sandbox Code Playgroud)

您已经注意到datasetArr是一个数组.我想一次为多个员工创建大量订阅.但是我不想循环遍历数组.有没有办法用pg开箱即用?

postgresql node.js node-postgres

5
推荐指数
2
解决办法
5154
查看次数

node-postgres上的postgres复合类型

说我有以下postgreSQL复合类型:

CREATE TYPE myType AS(
  id  bigint,
  name  text,
);
Run Code Online (Sandbox Code Playgroud)

以及除该类型外的存储过程:

CREATE FUNCTION myFunction(mt myType){
//do some stuff
}
Run Code Online (Sandbox Code Playgroud)

我想使用node-postgres模块从Node-js调用此过程。

var pg = require('pg');
var connectionString = "connection string";
pg.connect(connectionString, function(err, client, done) {
   client.query('SELECT myFunction($1)', [some value],   
      function(err, result) {
      // do stuff
      done();
    });
});
Run Code Online (Sandbox Code Playgroud)

如何在JS中创建这样的类型?有没有一种方法可以将类型从Node传递到Postgres存储过程?

postgresql node.js node-postgres

5
推荐指数
1
解决办法
555
查看次数

将postgres与nodejs一起用于连接池

我正在使用nodejs作为我的REST api主机。整体功能非常基础。也就是说,进行一个REST调用,该调用应该执行postgres db查询并返回数据。我遇到的问题是整个代码的组织。

我有具有基本初始化的server.js。现在,我应该在哪里放置postgres连接,并在需要时调用它来查询db。当前结构如下。所以我认为我应该将postgres连接代码移到server.js?什么是正确的结构

server.js

"use strict";

 var express = require('express'),
  app = express(),
  port = process.env.PORT || 4001,
  bodyParser = require('body-parser');

  app.use(bodyParser.urlencoded({ extended: true }));
  app.use(bodyParser.json());
  app.use(function (req, res, next) {

    // Website you wish to allow to connect
    res.setHeader('Access-Control-Allow-Origin', '*')
    // Request methods you wish to allow
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
    // Request headers you wish to allow
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
    // Set to true if you need the website to include cookies in the requests …
Run Code Online (Sandbox Code Playgroud)

node.js node-postgres

5
推荐指数
1
解决办法
8933
查看次数

Node - 使用 node-postgres 设置 Postgres 驱动程序

我正在尝试集成node-postgres驱动程序并学习做一个简单的 CRUD 操作。在我的app.js,我做这样的事情:

...
var postgres = require('./adapters/postgres')
var postClient = new postgres(conf);
...
postClient.connect(function (dbconn) {
    app.dbconn = dbconn;
    app.conf = conf;

    console.log("************************************************************");
    console.log(new Date() + ' | CRUD Server Listening on ' + conf['web']['port']);
    console.log("************************************************************");

    server.listen(conf['web']['port']);

    var Routes = require('./routes/http-routes');
    new Routes(app);
});
Run Code Online (Sandbox Code Playgroud)

在我的adapters/postgres.js文件中,我有以下内容:

const Client = require('pg');
const postClient = new Client(conf)({
    host: conf['postgres'].host,
    port: conf['postgres'].port,
    dbname: conf['postgres'].dbname,
    username: conf['postgres'].username,
    password: conf['postgres'].password,
    dbconn: null,
});
module.exports = postClient;
postClient.prototype.connect = function …
Run Code Online (Sandbox Code Playgroud)

postgresql node.js node-postgres

5
推荐指数
1
解决办法
652
查看次数

如何使用 node-postgres 设置架构

我正在尝试DOCUMENT使用node-postgres查询在我的 postgres 数据库中调用的模式。

我似乎无法针对指定的架构运行查询。

此查询使用 psql 直接针对 postgres 运行良好

SELECT * FROM "DOCUMENT".document_metadata m 
LEFT OUTER JOIN "DOCUMENT".document_attributes a 
ON a.document_id = m.id
Run Code Online (Sandbox Code Playgroud)

此代码产生以下错误

SELECT * FROM "DOCUMENT".document_metadata m 
LEFT OUTER JOIN "DOCUMENT".document_attributes a 
ON a.document_id = m.id
Run Code Online (Sandbox Code Playgroud)

错误

error: relation "DOCUMENT.document_metadata" does not exist
    at Connection.parseE (/usr/src/app/node_modules/pg/lib/connection.js:602:11)
    at Connection.parseMessage (/usr/src/app/node_modules/pg/lib/connection.js:399:19)
    at Socket.<anonymous> (/usr/src/app/node_modules/pg/lib/connection.js:121:22)
    at Socket.emit (events.js:189:13)
    at addChunk (_stream_readable.js:284:12)
    at readableAddChunk (_stream_readable.js:265:11)
    at Socket.Readable.push (_stream_readable.js:220:10)
    at TCP.onStreamRead [as onread] (internal/stream_base_commons.js:94:17)
Run Code Online (Sandbox Code Playgroud)

我也试过这个

const query = `SELECT …
Run Code Online (Sandbox Code Playgroud)

javascript postgresql node.js node-postgres

5
推荐指数
1
解决办法
7732
查看次数

Node.js - PostgreSQL (pg):客户端已连接。您不能重复使用客户端

我只是想编写简单的注册/登录系统。我正在尝试查找用户名是否存在。步骤如下:

  1. 转到localhost:3000/users/register页面
  2. 填写所有字段并单击注册按钮
  3. 检查我的命令行如果用户名存在,它应该使用 console.log 打印它

到目前为止一切正常。

当我返回注册页面时,我再次填写所有字段并单击注册按钮。然后它把它扔到命令行中:

Error: Client has already been connected. You cannot reuse a client.
at Client._connect (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\pg\lib\client.js:91:17)
at C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\pg\lib\client.js:310:10
at new Promise (<anonymous>)
at Client.connect (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\pg\lib\client.js:309:10)
at Object.module.exports.findUserById (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\database\register_sql.js:8:22)
at C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\routes\users.js:37:29
at Layer.handle [as handle_request] (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\route.js:137:13)
at next (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\route.js:131:14)
at Route.dispatch (C:\Users\Hasan\Desktop\Projeler\node-ogreniyorum\node_modules\express\lib\router\route.js:112:3)  
Run Code Online (Sandbox Code Playgroud)

我不明白,因为在调用我的方法后我已经结束了我的客户端。

register_sql.js


module.exports.findUserById =(async (username) =>{
    try {
        await client.connect();
        console.log('Connected successfuly');
        const result = await client.query("select * from users where username = ($1)", [username]);
        console.log(result.rows[0]['username']);
        await …
Run Code Online (Sandbox Code Playgroud)

javascript postgresql node.js express node-postgres

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