Laden...

PostgreSQL Verbindung mit C# - greift nicht auf Schema zu

Erstellt von Hellfire76 vor 11 Jahren Letzter Beitrag vor 11 Jahren 3.872 Views
H
Hellfire76 Themenstarter:in
21 Beiträge seit 2012
vor 11 Jahren
PostgreSQL Verbindung mit C# - greift nicht auf Schema zu

Hallo,

ich bin gerade dabei ein neues Projekt umzusetzen. Aus Lizenzgründen möchte ich erstmals PostgreSQL einsetzen. Dazu habe ich mir eine virtuelle Kiste mit ner postgresql Datenbank aufgesetzt und sehe jetzt schon die unterschiedliche Handhabung zu anderen Datenbanken.

Standardmäßig ist in postgresql die Datenbank "postgres" erstellt. Daraufhin habe ich mir eine neue Datenbank erstellt, um ein bischen für Ordnung zu sorgen. Innerhalb dieser Datenbank habe ich ein Schema erstellt. Innerhalb des selbst erstellten Schemas habe ich Tabellen erstellt.

Wenn ich jetzt mit C# darauf zugreifen will bekomme ich immer die Meldung, dass das Schema nicht existiert. Ich vermute mal, er sucht das Schema in der postgres Datenbank ? Ich verbinde aber auf die selbst erstellte Datenbank,

Beispiel:

                NpgsqlConnection conn = new NpgsqlConnection("Server=192.168.0.254;Port=5432;User Id=postgres;Password=123;Database=PrinterAdmin;");
                conn.Open();


                try
                {
                    NpgsqlCommand command = new NpgsqlCommand("select * from PrinterAdmin.users", conn);
                    NpgsqlDataReader reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        MessageBox.Show(reader["username"].ToString());
                    }
                }

                finally
                {
                    conn.Close();
                }

Ich verbinde im Connection String auf die selbst erstellte Datenbank, so dass ich denke dass er das Schema innerhalb dieser Datenbank sehen sollte. Zusätzlich habe ich den "search_path" auf "printeradmin,public" gesetzt.

Was habe ich übersehen ? Ich würde mich über einen Denkanstoss freuen.

Gruß

16.842 Beiträge seit 2008
vor 11 Jahren

from PrinterAdmin.users sieht für mich falsch aus. Deine Datenbank hast Du ja bereits im ConnectionString definiert. Was sagt er wenn Du nur from users abfragst..?

H
Hellfire76 Themenstarter:in
21 Beiträge seit 2012
vor 11 Jahren

Das war auch mein erster Versuch, aber wenn ich nur users angebe, dann sagt er mir:
Relation does not exist

Ja, die users Tabelle steckt auch nicht in postgres.public.users sondern in printeradmin.printeradmin.users (datenbank.schema.tabelle)

Er scheint die im public von postgres weiter zu suchen, sonst hätte er die ja finden müssen ? Ich wollte jetzt public ungerne vollstopfen, weil das bei vielen Tabellen doch recht unschön ist - und unsauber.

H
Hellfire76 Themenstarter:in
21 Beiträge seit 2012
vor 11 Jahren

siehe Anhang: PostgreSQL Übersicht

Wenn ich an die Datenbank postgres verbinde, dann findet er das Schema printeradmin und liest mir die Tabelle aus. Wenn ich an die Datenbank PrinterAdmin verbinde und dort das die Tabelle im Schema auslesen will dann sagt er mir, dass es das Schema nicht gibt.

Der Eigentümer der neuen printeradmin Datenbank ist auch postgres und ich habe auch soweit mir ersichtlich war alle Rechte gesetzt.

Für mich sieht das trotzdem aber irgendwie noch nach einem Rechteproblem aus. Ich finde dazu jedoch nichts was ich noch einstellen könnte. In der einen Datenbank findet er Schema und Tabelle, in der anderen Datenbank mit dem gleichen Skript nicht.

Benutzt noch wer postgres und hat Erfahrung mit diesem Problem ?

106 Beiträge seit 2011
vor 11 Jahren

Hallo Hellfire76,

schau mal ob dir das weiterhilft: Where (or how) should I define the schema in a select statement when using PostgreSQL?

MfG
Rabban

H
Hellfire76 Themenstarter:in
21 Beiträge seit 2012
vor 11 Jahren

Danke Rabban.

Mit dem search_path habe ich bereits rumexperimentiert und in der cmd auch direkt gesetzt. Jetzt habe ich den Tip in dem Link ausprobiert und den search_path mal zur Laufzeit gesetzt. Das Ergebnis ist:

Fehler: 42P01: Relation users existiert nicht

Genau den selben Fehler erhalte ich wenn ich den search_path nicht setze.

Ich arbeite jetzt erstmal mit einem Schema in der Datenbank postgres, ohne eine eigene Datenbank zu nutzen - das funktioniert - ich darf halt nur keine eigene Datenbank benutzen. Ich finde es allerdings trotzdem verwunderlich und bleibe am Ball. Es interessiert mich einfach, wo da der Denkfehler ist.