1

我试图让 pg-promise 在 NodeJS 中工作以允许我连接到我的 PostgreSQL 数据库。node 和 postgre 都在运行 Ubuntu 的 codeanywhere 节点框中运行。

以下是相关代码:

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打印以下内容:

 { [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/log/postgresql/postgresql-9.3-main.log

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) 

这种关系确实存在。

我错过了什么?

4

1 回答 1

2

该错误告诉您数据库中没有users表。您需要先创建表,然后才能从中进行选择。请记住,表名区分大小写,因此如果您创建了Users表,则查询将不起作用。

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

您应该尝试在命令行上使用psql -d usersusers在这种情况下是您的数据库的名称,不要与您的同名表混淆)连接到您的数据库。从那里您可以编写查询以独立于您的应用程序代码来测试它们。如果您在连接users数据库时遇到问题,您始终可以使用 psql 连接到默认数据库并键入\l\list列出 postgres 知道的所有数据库。

请注意,Postgres 本身有一个名为的内置数据库postgres,它有自己的users表来管理对其他数据库的访问控制。您可以通过查看命令提示符来判断您在 psql 中连接到哪个数据库;如果它说,postgres=那么你在 postgres 数据库中,而不是你自己的。

于 2016-09-30T04:47:27.963 回答