1

NodeJS で pg-promise を動作させて、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私が必要としているものではありません...

問題として大文字化について言及している他のスタックオーバーフローの質問を見てきました。具体的には、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 usersコマンド ラインで(usersこの場合、 はデータベースの名前です。同じ名前のテーブルと混同しないでください)を使用して、データベースに接続してみてください。そこからクエリを記述して、アプリケーション コードから独立してテストできます。データベースへの接続に問題がある場合usersは、いつでも psql を使用して既定のデータベースに接続し、\lpostgres\listが認識しているすべてのデータベースを一覧表示することができます。

Postgres 自体には、他のデータベースへのアクセス制御を管理するためpostgresの独自のusersテーブルを持つ という名前のデータベースが組み込まれていることに注意してください。コマンド プロンプトを見ると、psql で接続しているデータベースがわかります。表示されている場合はpostgres=、自分のデータベースではなく、postgres データベースにいます。

于 2016-09-30T04:47:27.963 に答える