我在 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) 有没有办法从带有$参数的查询中获取可执行查询。实际上它很奇怪,但是我想在数据库中存储可执行查询。没有参数的完整查询($ 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) 我在 Node.js 后端使用PostgreSQL和objection.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) 正如标题所示,我在使用时遇到语法错误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
我正在使用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) 给定一个自定义枚举:
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
我正在尝试如何使用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 执行此操作的正确方法?