将多个值插入 PostgreSQL - pg
Inserting multiple values to PostreSQL - pg
我有 2 个变量:
let x = 2;
let y = [1,3,4];
我想将此数据写入用户 table,如下所示:
user1 - user2
+---+---+
| 2 | 1 |
+---+---+
| 2 | 3 |
+---+---+
| 2 | 4 |
+---+---+
我有一个客户端对象来进行查询,但我不知道如何给值和查询?:
Client.query("INSERT INTO users (user1, user2) VALUES (, )", []);
是这样的吗?
INSERT INTO users (user1, user2)
SELECT 2 AS user1
, UNNEST(ARRAY[1,3,4]) AS user2;
我不熟悉node.js,帮不了你。
一种可能的方法,在 sql-语句中使用@FrankHeikens 可靠的答案;)
pgconfig.json:
{"user":"myUSerDB","host":"10.220.100.102","database":"mydb","password":"mySuperStrongPassword","port":"5432"}
node-pg-sql.js:
var fs = require('file-system');
var fileNameConfigPGSQL = require('./config/pgconfig.json');
const { Pool } = require('pg');
const pool = new Pool(fileNameConfigPGSQL);
module.exports = {
query: (text, params, callback) => {
const start = Date.now()
return pool.query(text, params, (err, res) => {
const duration = Date.now() - start
// console.log('executed query', { text, duration, rows: res.rowCount })
callback(err, res)
})
},
getClient: (callback) => {
pool.connect((err, client, done) => {
const query = client.query.bind(client)
// monkey patch for the querie method to return last query
client.query = () => {
client.lastQuery = arguments
client.query.apply(client, arguments)
}
// Timeout of 5 secs
const timeout = setTimeout(() => {
// console.error('A client has been checked out for more than 5 seconds!')
// console.error(`The last executed query on this client was: ${client.lastQuery}`)
}, 5000)
const release = (err) => {
// calling 'done' method - returns client to the pool
done(err)
// Clear Timeouts
clearTimeout(timeout)
// Reset query before the Monkey Patch
client.query = query
}
callback(err, client, done)
})
}
}
someNodeModule.js
const db = require('../../../node-pg-sql');
....
...
..
let x = 2;
let y = [1,3,4];
let sqlInsert=`INSERT INTO users (user1, user2)
SELECT ${x} AS user1
, UNNEST(ARRAY${y}) AS user2;`
db.query(sqlInsert, (errÌnsert, resInsert) => {
if (errÌnsert) {
// handle error
}
else {
// handle success
}
})
我有 2 个变量:
let x = 2;
let y = [1,3,4];
我想将此数据写入用户 table,如下所示:
user1 - user2
+---+---+
| 2 | 1 |
+---+---+
| 2 | 3 |
+---+---+
| 2 | 4 |
+---+---+
我有一个客户端对象来进行查询,但我不知道如何给值和查询?:
Client.query("INSERT INTO users (user1, user2) VALUES (, )", []);
是这样的吗?
INSERT INTO users (user1, user2)
SELECT 2 AS user1
, UNNEST(ARRAY[1,3,4]) AS user2;
我不熟悉node.js,帮不了你。
一种可能的方法,在 sql-语句中使用@FrankHeikens 可靠的答案;)
pgconfig.json:
{"user":"myUSerDB","host":"10.220.100.102","database":"mydb","password":"mySuperStrongPassword","port":"5432"}
node-pg-sql.js:
var fs = require('file-system');
var fileNameConfigPGSQL = require('./config/pgconfig.json');
const { Pool } = require('pg');
const pool = new Pool(fileNameConfigPGSQL);
module.exports = {
query: (text, params, callback) => {
const start = Date.now()
return pool.query(text, params, (err, res) => {
const duration = Date.now() - start
// console.log('executed query', { text, duration, rows: res.rowCount })
callback(err, res)
})
},
getClient: (callback) => {
pool.connect((err, client, done) => {
const query = client.query.bind(client)
// monkey patch for the querie method to return last query
client.query = () => {
client.lastQuery = arguments
client.query.apply(client, arguments)
}
// Timeout of 5 secs
const timeout = setTimeout(() => {
// console.error('A client has been checked out for more than 5 seconds!')
// console.error(`The last executed query on this client was: ${client.lastQuery}`)
}, 5000)
const release = (err) => {
// calling 'done' method - returns client to the pool
done(err)
// Clear Timeouts
clearTimeout(timeout)
// Reset query before the Monkey Patch
client.query = query
}
callback(err, client, done)
})
}
}
someNodeModule.js
const db = require('../../../node-pg-sql');
....
...
..
let x = 2;
let y = [1,3,4];
let sqlInsert=`INSERT INTO users (user1, user2)
SELECT ${x} AS user1
, UNNEST(ARRAY${y}) AS user2;`
db.query(sqlInsert, (errÌnsert, resInsert) => {
if (errÌnsert) {
// handle error
}
else {
// handle success
}
})