it-swarm.com.de

Was sind die gültigen Formate eines PostgreSQL-Schemanamens?

Ich kann anscheinend keine Dokumentation finden, die die gültigen Formate eines PostgreSQL-Schemanamens beschreibt. Ich weiß, dass ein Schemaname nicht:

  • beginnen Sie mit einer Zahl
  • leerzeichen haben
  • beginnen mit pg_

Was sonst? Wo soll ich suchen?

14
Ramon Tayag

Laut der Geldstrafe Dokumentation denke ich , dass dies das sein könnte, wonach Sie suchen.

SQL-Bezeichner und Schlüsselwörter müssen mit einem Buchstaben (a-z, aber auch Buchstaben mit diakritischen Zeichen und nicht-lateinischen Buchstaben) oder einem Unterstrich (_) beginnen. Nachfolgende Zeichen in einem Bezeichner oder Schlüsselwort können Buchstaben, Unterstriche, Ziffern (0-9) oder Dollarzeichen ($) sein. Beachten Sie, dass Dollarzeichen in Bezeichnern gemäß dem Buchstaben des SQL-Standards nicht zulässig sind, sodass ihre Verwendung Anwendungen möglicherweise weniger portabel macht ...

17
gsiems

Laut Dokumentation kann es auch nicht mit pg_ Beginnen, da es reserviert ist. Davon abgesehen sieht es ziemlich frei aus.

5
Nathan C

Die richtige Antwort ist die von gsiems. Ich möchte jedoch darauf hinweisen, dass PostgreSQL Regeln für zitierte Bezeichner enthält, die Sie möglicherweise berücksichtigen. "Bezeichner in Anführungszeichen können ein beliebiges Zeichen enthalten, mit Ausnahme des Zeichens mit dem Code Null. (Um ein doppeltes Anführungszeichen einzuschließen, schreiben Sie zwei doppelte Anführungszeichen.)" ... Es gibt auch einige Einschränkungen für den Fall, den Sie möglicherweise betrachten möchten.

Wenn Sie also Ihre Bezeichner angeben, können Sie ein beliebiges Zeichen verwenden (mit Ausnahme von\0). Wenn Sie Ihre Bezeichner jedoch nicht angeben, müssen Sie die auf dieser Seite aufgeführten Regeln befolgen.

Ich wollte darauf hinweisen, vor allem, weil es mich schon einmal gebissen hat, insbesondere die Regeln für Groß- und Kleinschreibung in nicht zitierten Bezeichnern (und Schemanamen gelten als Bezeichner).

PDATE :

Als Beispiel (nicht speziell für Schemakennungen, aber gleichermaßen für sie):

    DROP TABLE "tbluser"; -- assuming it exists
    DROP TABLE "TBLUSER"; -- assuming it exists; incidentally, they are two different tables
    CREATE TABLE "TBLUSER" ( username text ); 
    INSERT INTO "TBLUSER" VALUES ( 'joe' ); 
    SELECT * FROM TBLUSER; -- this returns an error that the tbluser relation does not exist
    SELECT * FROM "TBLUSER"; -- works fine

Dies ist möglicherweise ein zu erwartendes Verhalten für diejenigen, die Erfahrung mit PostgreSQL (und möglicherweise den SQL-Standards) haben, aber jemand, der neu in PG ist und vom Standpunkt anderer Datenbankserver (z. B. SQL Server oder Oracle) stammt, kann auf dieses Verhalten stoßen und Ich frage mich, warum die Tabelle, die sie gerade erstellt haben, fehlt.

Vielleicht empfehlen einige Handbücher die Verwendung von Bezeichnern in Anführungszeichen, aber Tatsache ist, dass Anführungszeichen in Anführungszeichen zur Verfügung stehen und und darüber hinaus viele Pakete verwendet werden können Machen Sie es sich zur Richtlinie, beim Erstellen und Zugreifen auf Beziehungen, die nicht ganz in Kleinbuchstaben geschrieben sind, z. B. PGAdmin III, immer Anführungszeichen in Anführungszeichen zu verwenden.

Dies ist beispielsweise das Skript, das von PGAdmin III beim Erstellen einer Tabelle über die Benutzeroberfläche generiert wird:

    CREATE TABLE public."TBLUSER"
    (
      username text
    ) 
    WITH (
      OIDS = FALSE
    )
    ;

Daher kann ein Benutzer in einer Abfrage nur auf diese Tabelle zugreifen, indem er sich auf seine in Anführungszeichen stehende Kennung bezieht, d. H. "TBLUSER". Der Versuch, in einer Abfrage mit einem nicht zitierten Bezeichner auf diese Tabelle zuzugreifen, führt dazu, dass die Beziehung nicht gefunden werden kann, d. H. TBLUSER.

3
efesar