Wo (oder wie) soll ich das Schema in einer select-Anweisung definieren, wenn PostgreSQL mit?

StackOverflow https://stackoverflow.com/questions/651527

Frage

Ich habe eine Anwendung gebaut auf ASP.NET 3.5 und PostgreSQL 8.3. Meine Datenbank hat 3 Benutzer, ein Datum Inhaber (xxx-Inhaber), ein Dateneditor (xxx-Editor) und ein Datum-Viewer (xxx-Viewer). Jeder Benutzer verfügt über ihr eigenes Schema xxx-Schema, xxx-Editor-Schema und xxx-Viewer-Schema genannt. Alle Daten werden in xxx-Schema gespeichert.

Dies erfordert, dass ich das Schema angeben, wenn auf die Datenbank entweder als xxx-Editor oder xxx-Viewer Benutzer verbinden, wie im folgenden Ausschnitt gezeigt.

NpgsqlCommand pgCommand = new NpgsqlCommand();
pgCommand.CommandText = @"SELECT 
                        bldg_id,
                        bldg_name,
                        bldg_no,
                        FROM " + this.schema + @".buildings
                        WHERE UPPER(bldg_id) LIKE UPPER(@id);";

pgCommand.Parameters.Add("@id", "%" + id + "%");
pgCommand.Connection = pgConnection;

Wenn ich diesem Weg folgen wäre, würde ich das Schema in der Web.config angeben. Doch es muss ein besserer Weg, um festzulegen, welches Schema verwendet werden soll. Ich möchte in der Lage sein, die String-Verkettung vollständig zu entfernen, wenn möglich.

Was ist der beste Weg, um das Schema zu definieren, die in der SQL-Anweisung verwendet werden?


EDIT

Die folgenden von der PostgreSQL Benutzerhandbuch sieht vielversprechend aus.

  

SearchPath -. Ändert Suchpfad angegeben und öffentliches Schema

Aus meinen begrenzten Tests funktioniert es gut in meiner Situation. Dies ist jedoch eine PostgreSQL einzige Lösung. Gibt es vielleicht eine Datenbank unabhängige Lösung, die meisten Datenbanken, sofern diese Funktionalität?


EDIT 2

Ich habe die Antwort markiert, unter dem ich führt das Schema-Lookup, um auf Datenbankebene zu ändern. Mit der folgenden Änderung muß ich nicht Code in meinen SQL-Anweisungen hinzuzufügen.

ALTER USER xxx-viewer SET search_path TO '$user', xxx, public, sde
War es hilfreich?

Lösung

Sie können den Schema-Suchpfad auf einer Pro-Sitzung Basis eingestellt werden:

SET search_path TO myschema

Wenn Sie zurück an das öffentliche Schema fallen wollen, könnten Sie verwenden:

SET search_path TO myschema, public

Andere Tipps

Sie können auch tun:

SET SCHEMA 'myschema';

Diese Aussage ist das gleiche, die SET search_path TO myschema, public aber mehr

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top