Pg-promessa e diferenciação de maiúsculas e minúsculas em nomes de coluna

Então você estava usando inocentemente pg-promisee tudo estava bom, mas um dia adicionou eg userIdcoluna ao seu banco de dados, e: db.any('select * from products')retornou ao [{ userid: 1 }]invés de [{ userId: 1 }].

A razão para isso é o downcasing do PostgreSQL nos nomes das colunas em todas as nossas consultas. Poderíamos evitar esse comportamento colocando os nomes das colunas entre aspas ( select "userId" from products), mas isso tornaria nosso código um pouco pesado.

Então vamos:

  1. renomear todas as colunas do nosso banco de dados de userId (camelCase) para user_id (sublinhado)
  2. adicionar receivepropriedade às opções da página:

    const pgOptions = {
    receive
    : (data, result, e) => {
    camelizeColumns
    (data);
    }
    };

    const camelizeColumns = (data) => {
    const template = data[0];
    for (let prop in template) {
    const camel = pgPromise.utils.camelize(prop);
    if (!(camel in template)) {
    for (let i = 0; i < data.length; i++) {
    let d = data[i];
    d
    [camel] = d[prop];
    delete d[prop];
    }
    }
    }
    }

    const pgPackage = pgPromise.default(pgOptions);

    Aqui estão os documentos para a opção de recebimento . Ele pega quais querymétodos retornariam e os transforma antes de retornar.

  3. mude tudo

    db.any('select * from products where userId = ${userId}', { userId })

    para

    db.any('select * from products where user_id = ${userId}', { userId })

É isso aí! Agora você estará recebendo { userId: 1 }consultas como db.any('select user_id from products').