2016-09-30 4 views
0

NodeJS에서 pg-promise를 작동시켜 PostgreSQL 데이터베이스에 연결할 수있게하려고합니다. 노드와 포스트그레시 모두 Ubuntu를 실행하는 codeanywhere 노드 상자에서 실행됩니다.pg-promise를 사용하여 NodeJS에서 PostgreSQL 데이터베이스를 쿼리 할 수 ​​없습니다 - "관계가 없습니다"

여기에 관련 코드는 다음 /var/log/postgresql/postgresql-9.3-main.log에 다음

{ [error: relation "users" does not exist]          
    name: 'error',                 
    length: 96,                 
    severity: 'ERROR',                
    code: '42P01',                 
    detail: undefined,                
    hint: undefined,                
    position: '15',                
    internalPosition: undefined,             
    internalQuery: undefined,              
    where: undefined,                
    schema: undefined,                
    table: undefined,                
    column: undefined,                
    dataType: undefined,               
    constraint: undefined,               
    file: 'parse_relation.c',              
    line: '984',                 
    routine: 'parserOpenTable' } 

그리고 인쇄 :

var pgp = require('pg-promise')(); 
var bot = new TelegramBot(token, { polling: true }); 
var db = pgp({ 
    host: 'localhost', 
    port: 5432, 
    database: 'users', 
    user: 'postgres', 
    password: '(pass here)' 
}); 
db.any("select * from users") 
    .then(function (data) { 
     console.log(data); 
    }) 
    .catch(function (error) { 
     console.log(error); 
    }); 

다음 node bot.js 인쇄를 실행

2016-09-29 23:09:29 EDT ERROR: relation "users" does not exist at character 15 

내가 무슨 일을 했는가? 다음과 같은 코드가 작동처럼 나는 그것이 db.any() 뭔가해야 같아요

//db.any("select * from users") 
db.connect() 
    .then(function (data) { 
     console.log(data); 
    }) 
    .catch(function (error) { 
     console.log(error); 
    }); 

출력은 약 db 물체처럼 보이는 무언가의 반환은,하지만 그건 내가 원하는 게 아니에요 ..

대문자 사용 문제를 언급하는 다른 stackoverflow 질문을 보았습니다. 특별히, 그들은 postgresql이 큰 따옴표없이 여러분의 모든 입력을 소문자로 만들 것이라고 말합니다. 이와 같은 관련성을 없애는 방법 :

postgres=# \dt                        
     List of relations                     
Schema | Name | Type | Owner                   
--------+-------+-------+----------                   
public | users | table | postgres                   
(1 row) 

관계가 반드시 존재합니다.

무엇이 누락 되었습니까?

답변

1

데이터베이스에 users 테이블이 없다는 오류가 발생했습니다. 테이블을 선택하기 전에 테이블을 작성해야합니다. 테이블 이름은 대소 문자를 구분하므로 테이블을 만들면 Users 쿼리가 작동하지 않습니다. 당신은 psql -d users 사용하여 데이터베이스에 연결을 시도한다

CREATE TABLE Users (...); 
SELECT * FROM users; -- this will cause an error 

명령 행에서 (이 경우 users하지 동일한 이름의 테이블과 혼동 할 데이터베이스의 이름입니다). 거기에서 응용 프로그램 코드와 독립적으로 쿼리를 작성할 수 있습니다. users 데이터베이스에 연결하는 데 문제가있는 경우 언제든지 psql을 사용하여 기본 데이터베이스에 연결하고 또는 \list을 입력하여 postgres가 알고있는 모든 데이터베이스를 나열 할 수 있습니다.

Postgres 자체에는 다른 데이터베이스에 대한 액세스 제어를 관리하는 테이블이있는 postgres이라는 데이터베이스가 내장되어 있습니다. 명령 프롬프트를 보면 psql에 연결된 데이터베이스를 알 수 있습니다. 그것이 postgres=이라면 당신은 자신의 것이 아닌 포스트그레스 데이터베이스에 있습니다.

+0

편집 참조; 테이블을 'users'라고 부른다. – Menasheh

+0

당신이리스트하고있는 것은 데이터베이스가 아니라'postgres' 데이터베이스에있는'users' 테이블입니다. 'postgres ='프롬프트 때문에 postgres db에 있다는 것을 알 수 있습니다. – Soviut

+0

한숨 ... 그래서 그것은 사용자 이름 이었기 때문에 자동적으로 포스트그레스라고 불렀습니다. – Menasheh