标签: node-postgres

knex migrate 抛出错误关系已经存在

我在 node.js 应用程序中使用Heroku Postgres数据库和knexjs作为 SQL 查询构建器。我尝试运行最新的knex 迁移,但出现错误relation already exists。当我尝试通过 sql 命令创建表时CREATE TABLE,它可以正常工作。

knexfile.js

// Update with your config settings.

require('dotenv').config({ path: require('find-config')('.env') });

module.exports = {
  development: {
    client: 'pg',
    useNullAsDefault: true,
    connection: process.env.DATABASE_URL,
    searchPath: ['knex', 'public'],
  },

  staging: {
    client: 'postgresql',
    connection: {
      database: 'my_db',
      user: 'username',
      password: 'password'
    },
    pool: {
      min: 2,
      max: 10
    },
    migrations: {
      tableName: 'knex_migrations'
    }
  },

  production: {
    client: 'postgresql',
    connection: { …
Run Code Online (Sandbox Code Playgroud)

postgresql heroku node-postgres heroku-postgres knex.js

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

postgres:从带有参数的查询中获取可执行查询

有没有办法从带有$参数的查询中获取可执行查询。实际上它很奇怪,但是我想在数据库中存储可执行查询。没有参数的完整查询($ 1,$ 2,$ 3)

我正在使用node-postgres

pg.connect(conString, function(err, client, done) {

console.log('Executing Insert query');

client.query('insert into tablename(column1,column2,column3) values($1,$2,$3)',["data1","data2","data3"],  function(err, result) {

    done();

    console.log('finished executing Insert query');
    });
});
Run Code Online (Sandbox Code Playgroud)

这就是我所需要的

insert into tablename(column1,column2,column3) values("data1","data2","data3")
Run Code Online (Sandbox Code Playgroud)

postgresql node-postgres

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

ORM - 拒绝错误:列“id”不存在

我在 Node.js 后端使用PostgreSQLobjection.js for ORM。我只有两个具有一对一关系的简单表。我无法在表中插入新记录。

我有一个带有员工和工资表的简单数据库模式:

CREATE TABLE employee (
    employee_id SERIAL PRIMARY KEY,
    employee_name VARCHAR
);

INSERT INTO employee (employee_name) VALUES ('james');

CREATE TABLE salary (
  salary_id SERIAL PRIMARY KEY,
  employee_id SERIAL UNIQUE,
  FOREIGN KEY (employee_id) REFERENCES employee (employee_id),
  amount integer
);
Run Code Online (Sandbox Code Playgroud)

如果我想通过 objection.js 创建新的工资记录:

Salary.query()
          .insert({ employee_id: 1, amount: 10 })
          .then((data) => {
            console.log(data);
          })
          .catch((err) => {
            throw err;
          });
Run Code Online (Sandbox Code Playgroud)

我得到错误:

Unhandled rejection error: column "id" does not exist
at Connection.parseE (./node_modules/pg/lib/connection.js:546:11)
at …
Run Code Online (Sandbox Code Playgroud)

postgresql orm node.js node-postgres objection.js

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

Nodejs postgres pg语法错误

正如标题所示,我在使用时遇到语法错误node-postgres。代码如下所示

const {Pool, Client} = require('pg')
const pool = new Pool({
  user: '<user>',
  host: '<host>',
  database: '<database>',
  password: '<pw>',
  port: <port>
})

let query = `SELECT * FROM user JOIN notifications ON user.user_id = notifications.user_id WHERE user_id=$1`

let values = ["123"]

pool.query(query, values)
  .then(() => { /* do something */} )
  .catch((err) => { console.log(err)} )
Run Code Online (Sandbox Code Playgroud)

根据此查询,我收到以下消息的语法错误

syntax error at or near "."
Run Code Online (Sandbox Code Playgroud)

由于相同的查询在 pgAdmin 中运行良好,我的猜测是它是特定于模块的,但我还没有弄清楚问题是什么。

非常感谢任何帮助!

编辑:添加了缺失的括号,感谢 Sreeragh AR

postgresql node.js node-postgres

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

在node-postgres中使用Async / Await

我正在使用node-postgres查询我的数据库,并想知道如何使用async / await并正确处理错误

我的使用示例在这里带有一个非常简单的查询

const { Pool } = require('pg');

let config;
if (process.env.NODE_ENV === 'production' || process.env.NODE_ENV === 'staging') {
  config = { connectionString: process.env.DATABASE_URL, ssl: true };
} else {
  config = {
    host: 'localhost',
    user: 'myuser',
    database: 'mydatabase',
  };
}

const pool = new Pool(config);

async function getAllUsers() {
  let response;
  try {
    response = await pool.query('select * FROM users');
  } catch (error) {
    throw error;
  }
  return response.rows;
}
Run Code Online (Sandbox Code Playgroud)

routes.js我有

app.get('/all_users', async (req, res) …
Run Code Online (Sandbox Code Playgroud)

postgresql node.js node-postgres

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

类型枚举的数组从Postgres作为字符串返回

给定一个自定义枚举: CREATE TYPE vehicle AS ENUM ('car', 'truck', 'bicycle');

像这样的表:

CREATE TABLE vehicle_events (
  timestamp timestamptz NOT NULL DEFAULT current_timestamp,
  labels vehicle[] NOT NULL,
  mentions int4[] NOT NULL DEFAULT '{}'
);
Run Code Online (Sandbox Code Playgroud)

当这样从我们的节点应用程序中查询时:

SELECT * FROM vehicle_events;

这将返回一个json结构,如下所示:

[{"timestamp": "January, 06 2016 23:04:56", "labels": "{'car'}", "mentions": [1,2,3,4]}]

我的问题确实是,为什么labels数组以字符串形式返回(还请注意,提到的base类型的数组不是)?这是因为它是一个数组ENUM吗?如果是这样,如何将其强制放入常规数组中?为什么postgres以这种方式退回它?

sqlfiddle链接:http ://sqlfiddle.com/#!15/637ce/1

postgresql node.js node-postgres

0
推荐指数
1
解决办法
528
查看次数

使用带有 IN 子句的 node-postgres select 的正确方法

我正在尝试如何使用node-postgres将逗号分隔的值字符串传递到子句查询中的postgres select中,但不幸的是似乎无法让它工作并且找不到任何示例。

我有以下代码:

function getUser() {
  let inList = "'qwerty', 'qaz'";

  const result = await pgPool.query("SELECT name FROM my_table WHERE info IN ($1)", [inList]);  
  if (result.rowCount == 1) return result.rows.map(row => row.name)
  return false
}
Run Code Online (Sandbox Code Playgroud)

基本上希望处理最终结果查询:

SELECT name FROM my_table WHERE info IN ('qwerty', 'qaz')

不确定这是否真的是使用 pgPool 执行此操作的正确方法?

postgresql node.js express node-postgres

0
推荐指数
1
解决办法
2970
查看次数