>source

postgresql-db를 사용하여nodejs프로젝트를 개발 중입니다. 일부 테이블이있는 db에 대해스키마를 작성했으며 이제는 준비 할 데이터 (여러 행)를 삽입하여 파일을 작성했습니다. 이를 위해이 항목의 지침을 따랐습니다. pg-promise를 사용한 다중 행 삽입 .

문제는 다음과 같은 오류가 발생한다는 것입니다.{error : relation "tenantx.ObjectGroup"이 (가) 없습니다... 그러나 발생합니다. 또한 내 API에서 테이블 내용을 읽으려고 할 때 빈 객체를 반환한다는 것을 알 수 있습니다. "schema.table"선언이 그 이유 일 수 있습니까?

준비된 데이터의 코드는 다음과 같습니다.

   'use strict';
     const pgp = require('pg-promise')({
                // Initialization Options
            });
        const csObjectGroup = new pgp.helpers.ColumnSet(['objectgroup', 'description'], {
                    table: 'tenantx.ObjectGroup'
                });
                // data input values:
                const valuesObjectGroup = [{
                    objectgroup: 'bla',
                    description: 'bla'
                }, {
                    objectgroup: 'blu',
                    description: 'blu'
                }, {
                    objectgroup: 'bla',
                    description: 'bla'
                }];
module.exports = {
    csObjectGroup: csObjectGroup,
    valuesObjectGroup: valuesObjectGroup
}

그리고 API에서 컨텐츠 설정을 위해 호출되는 코드 : // 준비된 데이터를 테이블에 삽입

function initializeData(pTenantId, dbUri) {
    var dbPostgres = dbUri;
    const datafile = require("./../Data/data_" + pTenantId);
    var statements = [];
    var valuesObjectGroup = datafile.valuesObjectGroup;
    var csObjectGroup = datafile.csObjectGroup;
    statements.push(valuesObjectGroup, csObjectGroup);
    var i, query;
    for (i = 0; i < statements.length - 1; i += 2) {
        query = pgp.helpers.insert(statements[i], statements[i + 1]);
        dbPostgres.none(query)
            .then(data => {
                console.log("+++++ Data successfully initialized.");
            })
            .catch(err => {
                console.log("----- Data could not be initialized.");
                console.log(err);
            });
    }
    return true;
}

테이블을 만들었습니다 :

const createObjectGroupTable =
    'CREATE TABLE IF NOT EXISTS tenantx.ObjectGroup \
            ( \
                id serial, \
                objectgroup varchar(50), \
                description varchar(100), \
                PRIMARY KEY (id) \
            )';


  • 답변 # 1

    주의를 기울여보고 된 오류를 보는 경우 :

    와이즈 비즈 이건

    { error: relation "tenantx.ObjectGroup" does not exist ...

    가 아닙니다 , 그것은 단지 하나의 테이블 이름 "tenantx"."ObjectGroup" 입니다 .

    그리고 문제는 테이블을 선언하는 방식에서 비롯됩니다 :

    "tenantx.ObjectGroup"
    
    

    스키마 + 테이블 이름을 제공하는 대신 모두 테이블 이름으로 지정하면 그에 따라 이스케이프됩니다.

    스키마 + 테이블을 지정하는 올바른 방법은 다음 방법 중 하나로 수행 할 수 있습니다.

    const csObjectGroup = new pgp.helpers.ColumnSet(['objectgroup', 'description'], {
                        table: 'tenantx.ObjectGroup'
                    });
    
    

    또는 :

    table: {schema: 'tenantx', table: 'ObjectGroup'}
    
    

    또는 :

    table: new pgp.helpers.TableName('ObjectGroup', 'tenantx')
    
    

    API : TableName을 참조하십시오.

    table: new pgp.helpers.TableName({table: 'ObjectGroup', schema: 'tenantx'})

관련 자료

  • 이전 amazon web services - AWS에서 loadByUsername 호출을 의심
  • 다음 sql - 단일 Insert 문을 사용하여 수십만 개의 레코드를 어떻게 삽입 할 수 있습니까?