2017-07-15 10 views
0

ノード7.2.1でPostgreSQL 9.4でpg-promiseを使用しています。私は、PostgreSQLサーバに接続するために以下のコードを使用しています:pg-promiseとpostgresqlで関係が存在しません?

// pg-promise connection elements. 

// Database initialization options. 
const pg_options = { 
    // Initialization options. 
}; 

// Create an instance of the pg-promise library. 
const g_pg_promise = require('pg-promise')(pg_options); 

// Connection string for a local connection to the 'summarize' database. 
const g_pg_connection = 
{ 
    host: 'localhost', 
    port: 5432, 
    database: 'db_stats', 
    user: 'db_user', 
    password: '{password here}' 
} 

// Connect to the database. 
const g_pg_database = g_pg_promise(g_pg_connection); 

// Expose the database object globally. The database object should only 
// be instantiated once and then shared. 
module.exports = { 
    g_pg_promise: g_pg_promise, 
    g_pg_database: g_pg_database 
}; 

は、私は同じPostgreSQLサーバに接続するために、他の非Node.jsのアプリで正確に同じ値を使用するため、接続パラメータが有効である知っています。私はまたdb_statsが有効なデータベース名であることを知っています。私は他のNode.JS以外のアプリケーションやpgAdmin 3.xを使って、そのデータベースを使ってかなりの作業をしてきました。

私はPG-約束を使用して接続しようとしたときしかし、私は次のエラーを取得する:

error: relation "db_stats" does not exist 

私はSO下記の投稿見ました:

Unable to query PostgreSQL database in NodeJS using pg-promise - "relation does not exist"

をしかし、その記事がありませんでしたpg-promiseの作者、Vitalyが、テーブルを持っていないことをポスターに伝えていたと信じているので、私には意味をなさない。ユーザー、whそれはポスターがというユーザーという名前のデータベースにアクセスしようとしていて、その名前のデータベースを持っていたことがわかります。いずれの場合においても

、私は間違いなくので、私は、なぜ私はこのエラーを取得していますかわからないdb_statsをという名前のデータベースを持っている。これをどうすれば解決できますか?

+1

エラーは*データベース*のdb_statsという名前ではなく、その名前の*関係*(a *テーブル*または*ビュー*のいずれか)です。つまり、 'db_stats'はおそらく' SELECT'クエリの 'FROM'節に現れます。 – joanolo

+1

@joanoloありがとうございました。私は結論に焦点を当てて、私はそれについて考えなかった。あなたのコメントを返信にアップスケールしたいのであれば、私はそれを "受け入れたい"と思います。 –

答えて

3

error: relation "db_stats" does not exist

あなたは、PostgreSQLから取得エラーが"db_stats"という名前データベースを参照するが、その名前の関係(どちらかテーブルまたはビュー)にされていません。ある

(それはまたINSERTUPDATEDELETE、...かもしれないが)、db_statsはおそらくSELECTクエリのFROM句に表示されます。

データベースにdb_statsテーブルもビューもありません。または、おそらく存在しているかもしれませんが、現在のsearch_pathではないの一部であるスキーマに存在します。

、見つける二つのことを確認するには:

SELECT 
    * 
FROM 
    information_schema.tables 
WHERE 
    table_name = 'db_stats' ; 

テーブルが存在する場合...あなたはすでにそれ/それらを含んでいるスキーマ(複数可)を知っています。その後 、によって、このスキーマは、あなたのsearch_pathの一部であることを確認してください:あなたは、あなたのアプリケーションに十分なコードを追加することで、このSQL文を実行する必要があり、中に返されるかどうか確認するためにデバッガを使用する場合があります

SHOW search_path ; 

その環境。

関連する問題