tôi cần có bảng trong db của mình chứa một cột duy nhất là một mảng các đối tượng uuid (uuid [] type)cách chèn bản ghi với mảng uuid vào bảng pg bằng cách sử dụng thư viện pj-promise nodejs
nhưng khi tôi cố gắng để chèn vào nó sử dụng một thư viện nodejs tên pg-hứa nó không
tôi nhận được thông báo lỗi sau đây nói với tôi tôi cần phải viết lại các diễn viên hoặc các biểu hiện
{"name":"error","length":206,"severity":"ERROR","code":"42804","hint":"You will need to rewrite or cast the expression.","position":"230","file":"src\\backend\\parse
r\\parse_target.c","line":"510","routine":"transformAssignedExpr"}
này lạ là vì tôi hoàn toàn không có vấn đề gì khi tôi cố gắng nhập một uuid duy nhất vào cột khác trên cùng một bảng chính xác (nghĩa là tôi không có vấn đề gì với đại diện uuid, btw i tạo chúng dưới dạng biến văn bản từ một lib khác, nhưng chúng là các biến văn bản cũ)
Tôi cũng không gặp vấn đề khi tôi cố gắng nhập một mảng các đối tượng TEXT vào cùng một cột (trong trường hợp tôi thay đổi bảng để có cột TEXT [] thay vì cột UUID [])
đây là mã của tôi
////////////////
var Promise = require('bluebird');
var pgpLib = require('pg-promise');
var pgp = pgpLib();
var cn = confUtil.pgDbConnectionConfiguration();
var db = pgp(cn);
//////////////////
var newEntity={};
newEntity.hash = uuid.v4();
newEntity.location = {X:2394876,Y:2342342};
newEntity.mother = uuid.v4();
newEntity.timestamp = Date.now();
newEntity.content = {content:"blah"};
newEntity.sobList = [uuid.v4(),uuid.v4(),uuid.v4()];
addEntity (newEntity);
////////////////////
function addEntity(newEntity) {
var insertEntityQueryPrefix='insert into entities (';
var insertEntityQueryMiddle=') values (';
var insertEntityQueryPostfix="";
var insertEntityQuery="";
Object.keys(newEntity).forEach(function(key){
insertEntityQueryPrefix=insertEntityQueryPrefix+'"'+key+'",';
insertEntityQueryPostfix=insertEntityQueryPostfix+'${'+key+'},';
});
insertEntityQueryPrefix=insertEntityQueryPrefix.slice(0,-1);
insertEntityQueryPostfix=insertEntityQueryPostfix.slice(0,-1)+")";
insertEntityQuery=insertEntityQueryPrefix+insertEntityQueryMiddle+insertEntityQueryPostfix;
//longStoryShort this is how the query template i used looked like
/*
"insert into entities ("hash","location","mother","timestamp","content","sobList") values (${hash},${location},${mother},${timestamp},${content},${sobList})"
*/
//and this is the parameters object i fed to the query i ran it when it failed
/*
{
"hash": "912f6d85-8b47-4d44-98a2-0bbef3727bbd",
"location": {
"X": 2394876,
"Y": 2342342
},
"mother": "87312241-3781-4d7c-bf0b-2159fb6f7f74",
"timestamp": 1440760511354,
"content": {
"content": "bla"
},
"sobList": [
"6f2417e1-b2a0-4e21-8f1d-31e64dea6358",
"417ade4b-d438-4565-abd3-a546713be194",
"e4681d92-0c67-4bdf-973f-2c6a900a5fe4"
]
}
*/
return db.tx(function() {
var processedInsertEntityQuery = this.any(insertEntityQuery,newEntity);
return Promise.all([processedInsertEntityQuery])
})
.then(
function (data) {
return newEntity;
},
function (reason) {
throw new Error(reason);
});
}
nhờ một Vitaly rất nhiều. đây chính là vấn đề. tôi có cảm giác đó là sự reasion, nhưng không biết cách thêm cú pháp. – Tal
bây giờ tôi nghĩ về nó. bạn cũng là người đã viết pg-promise, đúng không? tốt, làm tốt lắm !!! :) lib tuyệt vời (mặc dù như bạn nhận thấy, tôi chỉ bắt đầu sử dụng nó, và chủ yếu là cách sai) nhưng toàn bộ lời hứa hỗ trợ trực tiếp từ lib là rất tốt. – Tal
vâng, đó là tôi :) vui lòng đặt câu hỏi trên trang web của dự án: [pg-promise] (https://github.com/vitaly-t/pg-promise) –