1 Soru: Knex, Postgres ve STRING_ARRAY: farklı sonuçlar almak

tarafından oluşturulan soru Wed, May 8, 2019 12:00 AM

STRING_ARRAY kullanarak bir sorguyu test ediyordum: http://sqlfiddle.com/# ! 17/952405/1

Ayrıca burada:

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

Yukarıdakiler beklendiği gibi çalışır. Ancak, Node.JS /Express sunucumda Knex kullanarak çalıştırdığımda garip bir yanıt alıyorum.

İşte kod:

//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);

Yukarıdaki sqlfiddle ile aynı çıktı bekleniyordu. Ancak bunu geri aldım (NB, beklenen veri 'atölye çalışmaları' anahtarının değeri olmalı:

{
"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
}

}

Biraz aradım ve bunun INSERT sorgularının tipik olarak düğüm postgres için döndürdüğü biçim olduğunu keşfettim, ancak henüz bir çözüm bulamadım. Herhangi bir fikrin var mı?

    
0
1 Yanıtlar                              1                         

0600350991111110010101035062 işleviniz, sorgu sonucundan ziyade, sorgu tanımını döndürüyor (bir parçası) gibi görünüyor. Yani aslında yürütülmüyor.

Aşağıda, açıkça bir söze sarıldım ve findParentWorkshops ifadelerini dahil ettim ve bir sonuç üretti. V6 düğümünü kullanıyorum, belki de daha yeni sürümünüz biraz farklı çalışıyor veya sözlerinizde bluebird kullanıyor musunuz?

Ayrıca, 06003509911110000101035062 maddesine dikkat edin. Bunu hata ayıklama sırasında kullanıyorum. Oluşturulan SQL'in beklediğim gibi olmasını sağlar ve sorgunun gerçekten yürütülmekte olduğunu gösterir.

İyi çalışma zamanı hata ipuçları için 06003509911110010101035062 yan tümcesini bırakın, ancak aslında dosya tabanlı bir mekanizma kullanarak oturum açıyorum.

return     
0
2019-05-09 18: 09: 58Z
.on('query'
kaynak yerleştirildi İşte