Verwenden von Babelfish-Funktionen mit eingeschränkter Implementierung - Amazon Aurora

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden von Babelfish-Funktionen mit eingeschränkter Implementierung

Jede neue Version von Babelfish bietet Unterstützung für weitere Funktionen, die besser auf die T-SQL-Funktionalität und das -Verhalten ausgerichtet sind. Dennoch gibt es einige nicht unterstützte Funktionen und Unterschiede in der aktuellen Implementierung. Im Folgenden finden Sie Informationen zu funktionalen Unterschieden zwischen Babelfish und T-SQL mit einigen Problemumgehungen oder Nutzungshinweisen.

Ab Version 1.2.0 von Babelfish haben die folgenden Funktionen derzeit eingeschränkte Implementierungen:

  • SQL Server-Kataloge (Systemansichten) – Die Kataloge sys.sysconfigures, sys.syscurconfigs und sys.configurations unterstützen nur eine einzige schreibgeschützte Konfiguration. sp_configure wird zurzeit nicht unterstützt. Weitere Informationen zu den anderen von Babelfish implementierten SQL-Server-Ansichten finden Sie unter Abrufen von Informationen aus dem Babelfish-Systemkatalog.

  • GRANT-Berechtigungen – GRANT...TO PUBLIC wird unterstützt, GRANT…TO PUBLIC WITH GRANT OPTION derzeit hingegen nicht.

  • SQL-Server-Eigentumskette und Beschränkung des Berechtigungsmechanismus – In Babelfish funktioniert die SQL-Server-Eigentumskette für Ansichten, aber nicht für gespeicherte Prozeduren. Dies bedeutet, dass Prozeduren expliziten Zugriff auf andere Objekte gewährt werden muss, die demselben Eigentümer gehören wie die aufrufenden Prozeduren. In SQL Server reicht es aus, dem Aufrufer EXECUTE-Berechtigungen für die Prozedur zu erteilen, um andere Objekte aufzurufen, die demselben Eigentümer gehören. In Babelfish müssen dem Aufrufer auch Berechtigungen für die Objekte erteilt werden, auf die die Prozedur zugreift.

  • Auflösung unqualifizierter (ohne Schemanamen) Objektreferenzen – Wenn ein SQL-Objekt (Prozedur, Ansicht, Funktion oder Trigger) auf ein Objekt verweist, ohne es mit einem Schemanamen zu qualifizieren, löst SQL Server den Schemanamen des Objekts unter Verwendung des Schemanamens des SQL-Objekts auf, in dem die Referenz auftritt. Derzeit weicht die Auflösung in Babelfish davon ab. Hier wird das Standardschema des Datenbankbenutzers verwendet, der die Prozedur ausführt.

  • Standardschemaänderungen, Sitzungen und Verbindungen – Wenn Benutzer ihr Standardschema mit ALTER USER...WITH DEFAULT SCHEMA ändern, wird die Änderung in dieser Sitzung sofort wirksam. Für andere derzeit verbundenen Sitzungen, die demselben Benutzer gehören, unterscheidet sich das Timing jedoch wie folgt:

    • Für SQL Server: Die Änderung wird für diesen Benutzer sofort über alle anderen Verbindungen wirksam.

    • Für Babelfish: Die Änderung wird für diesen Benutzer nur für neue Verbindungen wirksam.

  • ROWVERSION- und TIMESTAMP-Datentypimplementierung und Escape-Schraffureinstellung – Die ROWVERSION- und TIMESTAMP-Datentypen werden jetzt in Babelfish unterstützt. Um ROWVERSION oder TIMESTAMP in Babelfish zu verwenden, müssen Sie die Einstellung für die Escape-Schraffur babelfishpg_tsql.escape_hatch_rowversion von seinem Standardwert (strict) in ignore ändern. Die Babelfish-Implementierung der ROWVERSION- und TIMESTAMP-Datentypen ist meist semantisch identisch mit SQL Server, mit folgenden Ausnahmen:

    • Die integrierte @@DBTS-Funktion verhält sich ähnlich wie SQL Server, weist jedoch kleine Unterschiede auf. Anstatt den zuletzt verwendeten Wert für SELECT @@DBTS zurückzugeben, generiert Babelfish aufgrund der zugrunde liegenden PostgreSQL-Datenbank-Engine und seiner Multi-Version Concurrency Control (MVCC) einen neuen Zeitstempel.

    • In SQL Server erhält jede eingefügte oder aktualisierte Zeile einen eindeutigen ROWVERSION/TIMESTAMP-Wert. In Babelfish wird jeder eingefügten Zeile, die durch dieselbe Anweisung aktualisiert wurde, derselbe ROWVERSION/TIMESTAMP-Wert zugewiesen.

      Wenn sich beispielsweise eine UPDATE- oder INSERT-SELECT-Anweisung auf mehrere Zeilen auswirkt, haben die betroffenen Zeilen in SQL Server alle unterschiedliche Werte in ihrer ROWVERSION/TIMESTAMP-Spalte. In Babelfish (PostgreSQL) haben die Zeilen denselben Wert.

    • Wenn Sie in SQL Server eine neue Tabelle mit SELECT-INTO erstellen, können Sie einen expliziten Wert (wie NULL) in eine zu erstellende ROWVERSION/TIMESTAMP-Spalte umwandeln. Wenn Sie denselben Vorgang in Babelfish ausführen, wird jeder Zeile in der neuen Tabelle von Babelfish ein tatsächlicher ROWVERSION/TIMESTAMP-Wert zugewiesen.

    Diese geringfügigen Unterschiede in ROWVERSION/TIMESTAMP-Datentypen sollten keine nachteiligen Auswirkungen auf Anwendungen haben, die in Babelfish ausgeführt werden.

Schemaerstellung, Eigentümerschaft und Berechtigungen – Berechtigungen zum Erstellen von Objekten in einem Schema, das einem Nicht-DBO-Benutzer gehört (mit CREATE SCHEMA schema name AUTHORIZATION user name), unterscheiden sich für Nicht-DBO-Benutzer von SQL Server und Babelfish, wie in der folgenden Tabelle dargestellt:

Der Datenbankbenutzer (Nicht-DBO), der Eigentümer des Schemas ist, kann folgende Vorgänge ausführen: SQL Server Babelfish

Objekte im Schema ohne zusätzliche Erteilungen durch den DBO erstellen?

Nein

Ja

Zugriff auf von DBO erstellte Objekte im Schema ohne zusätzliche Erteilungen?

Ja

Nein