1 सवाल: Knex, Postgres, और STRING_ARRAY: अलग-अलग परिणाम प्राप्त कर रहे हैं

पर बनाया गया सवाल Wed, May 8, 2019 12:00 AM

मैं STRING_ARRAY: http://sqliddle.com/# का उपयोग करके यहां एक क्वेरी का परीक्षण कर रहा था। ! 17/952405/1

यहां भी:

SELECT   to_char(workshop_date, 'YYYY-MM-DD') date, STRING_AGG(first_name || ' ' || last_name, ', ')
FROM     parents_workshops
JOIN     parents ON parents.id = ANY(parents_workshops.parents_id)
WHERE    teacher_id = 1
GROUP BY date

उपरोक्त कार्य अपेक्षा के अनुसार होता है। हालाँकि, जब मैं अपने Node.JS /एक्सप्रेस सर्वर पर Knex का उपयोग करता हूं, तो मुझे एक अजीब प्रतिक्रिया मिलती है।

यहां कोड है:

//teachers.js

const findParentWorkshops = id =>
    knex.raw(
        `SELECT to_char(workshop_date, 'YYYY-MM-DD') date, STRING_AGG(first_name || ' ' || last_name, ', ')FROM parents_workshops
        JOIN parents ON parents.id = ANY (parents_workshops.parents_id)
        WHERE teacher_id = ${id} GROUP BY date`
    );

//teacherController.js

const getParentWorkshops = (req, res, next) => {
    const teacherId = req.params.id;

    Teacher.findParentWorkshops(teacherId)
        .then(workshops => {    
            res.status(200).json({
                ok: true,
                status: 200,
                message: `Parents' workshops found`,
                length: workshops.length,
                workshops,
            });
        })
        .catch(next);
};

//teacherRoutes.js

router
    .route(`/teachers/:id/parents-workshops`)
    .get(getParentWorkshops)
    .post(postParentWorkshop);

मुझे उम्मीद थी कि ऊपर दिए गए sqlfield से भी यही आउटपुट मिलेगा। हालांकि, मुझे यह वापस मिल गया (एनबी, अपेक्षित डेटा को 'कार्यशालाओं' की:

के लिए मूल्य होना चाहिए
{
"ok": true,
"status": 200,
"message": "Parents' workshops found",
"workshops": {
"command": "SELECT",
"rowCount": 0,
"oid": null,
"rows": [],
"fields": [
{
"name": "date",
"tableID": 0,
"columnID": 0,
"dataTypeID": 25,
"dataTypeSize": -1,
"dataTypeModifier": -1,
"format": "text"
},
{
"name": "string_agg",
"tableID": 0,
"columnID": 0,
"dataTypeID": 25,
"dataTypeSize": -1,
"dataTypeModifier": -1,
"format": "text"
}
],
"_parsers": [
null,
null
],
"RowCtor": null,
"rowAsArray": false
}

}

मैंने थोड़ा खोजा है, और पाया कि यह वह प्रारूप है जिसमें INSERT क्वेरीज़ आमतौर पर नोड-पोस्टग्रेज के लिए लौटती हैं, हालाँकि मुझे अभी तक इसका समाधान नहीं मिला है। कोई विचार?

    
0
1 उत्तर                              1                         

ऐसा लगता है कि आपका फ़ंक्शन 06003509911001001350350 क्वेरी परिणाम के बजाय क्वेरी परिभाषा (वापसी) का हिस्सा है। तो यह वास्तव में निष्पादित नहीं है।

नीचे मैंने इसे स्पष्ट रूप से एक वादे में लपेटा है, और इसमें findParentWorkshops स्टेटमेंट शामिल हैं, और यह एक परिणाम का उत्पादन करता है। मैं नोड v6 का उपयोग कर रहा हूं, शायद आपका अधिक हाल का संस्करण थोड़ा अलग है, या आप अपने वादों के लिए ब्लूबर्ड का उपयोग कर रहे हैं?

इसके अलावा, return खंड पर ध्यान दें। मैं डिबगिंग करते समय इसका उपयोग करता हूं। यह सुनिश्चित करता है कि एसक्यूएल उत्पन्न होता है जो मैं उम्मीद करता हूं, और यह दर्शाता है कि क्वेरी वास्तव में निष्पादित हो रही है।

मैं अच्छे क्रम त्रुटि संकेत के लिए .on('query' खंड छोड़ता हूं, लेकिन वास्तव में एक फ़ाइल आधारित तंत्र के माध्यम से लॉग इन करता हूं।

.on('query-error'     
0
2019-05-09 18: 09: 58Z
function findParentWorkshops(id) {
    console.log('Debug 00 .findParentWorkshops');

    return Promise.resolve()
        .then( function() { 
            console.log('Debug 01');
            return db.raw( `SELECT to_char(workshop_date, 'YYYY-MM-DD') date, STRING_AGG(first_name || ' ' || last_name, ', ')FROM parents_workshops
                JOIN parents ON parents.id = ANY (parents_workshops.parents_id)
                WHERE teacher_id = ? GROUP BY date` , [id]) 
                // debug error reporting, remove for production.
                .on('query', function(data) {
                    console.log('Debug81 query:', data);
                })
                // runtime error reporting, execution is not interrupted.
                .on('query-error', function(ex, obj) {
                    console.log("Error89 .on.query-error", {"obj":obj, "ex":ex} );
                })
        })
};
स्रोत रखा गया यहाँ