2017-07-15 7 views
0

Ich benutze pg-Versprechen auf Knoten 7.2.1 mit PostgreSQL 9.4. Ich verwende den folgenden Code an den PostgreSQL-Server zu verbinden:Beziehung existiert nicht Fehler mit Pg-Versprechen und 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 
}; 

Ich weiß, dass die Verbindungsparameter gültig sind, weil ich genau die gleichen Werte in anderen nicht-Node.JS Apps nutzen, auf den gleichen PostgreSQL-Server zu verbinden. Ich weiß auch, dass db_stats ein gültiger Datenbankname ist. Ich habe mit dieser Datenbank eine ganze Weile mit anderen nicht Node.JS-Anwendungen und über pgAdmin 3.x gearbeitet.

Allerdings, wenn ich versuchen, mit pg-Versprechen verbinden ich die folgende Fehlermeldung erhalten:

error: relation "db_stats" does not exist 

ich unten schreiben sah das SO:

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

Aber das Post tat nicht Sinn für mich, weil ich glaube, Vitaly, der Autor von PG-Versprechen, sagte dem Plakat, dass er keine TabelleBenutzer, wh de es sieht für mich aus, dass das plakat versuchte, auf die datenbank namens benutzer zuzugreifen und er hatte definitiv eine datenbank mit diesem namen.

In jedem Fall ich auf jeden Fall eine Datenbank db_stats so bin ich nicht sicher, warum ich immer diese Fehlermeldung genannt haben. Wie kann ich das lösen?

+1

Der Fehler ist * nicht * sprechen über eine * Datenbank * namens '" db_stats "', sondern eine * Relation * (entweder eine * Tabelle * oder eine * Ansicht *) mit diesem Namen.Das heißt, "db_stats" erscheint am wahrscheinlichsten in der FROM-Klausel einer SELECT-Abfrage. – joanolo

+1

@joanolo Danke das war es. Ich war so konzentriert auf die Verbindungserklärung, dass ich nicht darüber nachdachte. Wenn Sie Ihren Kommentar auf eine Antwort hochskalieren möchten, möchte ich ihn "akzeptieren". –

Antwort

3

error: relation "db_stats" does not exist

Der Fehler von PostgreSQL erhalten bezieht sich nicht auf eine Datenbank"db_stats" genannt, aber auf eine Beziehung (entweder eine Tabelle oder Ansicht) mit diesem Namen.

Das heißt, db_stats wahrscheinlich erscheint in der FROM-Klausel einer Abfrage SELECT (obwohl es kann auch ein INSERT, UPDATE, DELETE, sein ...).

In Ihrer Datenbank befindet sich weder eine db_stats Tabelle noch eine Ansicht. Oder vielleicht existiert es, aber es existiert in einem Schema, das nicht Teil Ihrer aktuellen search_path ist.

Um das herauszufinden, überprüfen zwei Dinge:

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

Wenn es einen Tisch gibt es ... Sie wissen schon, welche Schema (en) enthält es/sie. Dann stellen Sie sicher, dass dieses Schema Teil Ihres search_path mittels ist:

SHOW search_path ; 

Sie diese SQL-Anweisungen haben könnte auszuführen, um den angemessenen Code zu Ihrer Anwendung hinzufügen und einen Debugger verwenden, um zu überprüfen, was in zurückgegeben diese Umgebung.

Verwandte Themen