Spanner PGAdapter unterstützt Anweisungen zur Sitzungsverwaltung, mit denen Sie den Status und das Verhalten Ihrer Verbindung ändern sowie Transaktionen und Batches von Anweisungen effizient ausführen können. Alle in diesem Dokument beschriebenen Anweisungen können mit jedem Client oder Treiber verwendet werden, der eine Verbindung zu PGAdapter herstellt.
Eine vollständige Liste der unterstützten PostgreSQL-Treiber und ORMs finden Sie hier. Die folgenden Befehle gelten für Datenbanken mit PostgreSQL-Dialekt.
Weitere Informationen zur Verwendung von PGAdapter finden Sie unter PGAdapter starten.
Verbindungsanweisungen
Mit den folgenden Anweisungen werden die Eigenschaften der aktuellen Verbindung geändert oder aufgerufen.
SPANNER.READONLY
Ein boolescher Wert, der angibt, ob sich die Verbindung im Lesemodus befindet. Der Standardwert von false ist.
SHOW [VARIABLE] SPANNER.READONLY
SET SPANNER.READONLY {TO|=} { true | false }
Sie können den Wert dieser Eigenschaft nur ändern, wenn keine aktive Transaktion vorhanden ist.
▶ Beispiel: Schreibgeschützte Transaktion (zum Maximieren klicken)
Im folgenden Beispiel wird gezeigt, wie Sie diese Eigenschaft verwenden, um schreibgeschützte Transaktionen in Spanner auszuführen.
SET SPANNER.READONLY = TRUE;
-- This transaction is a read-only transaction.
BEGIN TRANSACTION;
-- The following two queries both use the read-only transaction.
SELECT first_name, last_name
FROM singers
ORDER BY last_name;
SELECT first_name, last_name
FROM albums
ORDER BY title;
-- This shows the read timestamp that was used for the two queries.
SHOW SPANNER.READ_TIMESTAMP;
-- This marks the end of the read-only transaction. The next statement will
-- start a new read-only transaction.
COMMIT;
AUTOCOMMIT
Ein boolescher Wert, der angibt, ob sich die Verbindung im Autocommit-Modus befindet. Der Standardwert von true ist.
HINWEIS: Normalerweise müssen Sie den Wert dieser Variablen nicht ändern, wenn Sie einen PostgreSQL-Treiber mit PGAdapter verwenden. Diese Treiber verwalten Transaktionen automatisch für Sie, indem sie BEGIN und COMMIT bei Bedarf ausführen. Sie können autocommit deaktivieren, wenn Sie Befehlszeilentools wie psql verwenden, um zu verhindern, dass versehentliche Datenänderungen automatisch übernommen werden.
SHOW [VARIABLE] AUTOCOMMIT
SET AUTOCOMMIT {TO|=} { true | false }
Sie können den Wert dieser Property nur ändern, wenn keine aktive Transaktion vorhanden ist.
Wenn AUTOCOMMIT auf „false“ gesetzt ist, wird automatisch eine neue Transaktion initiiert, nachdem Sie COMMIT oder ROLLBACK ausgeführt haben. Die Transaktion wird mit der ersten Anweisung gestartet, die Sie ausführen.
▶ Beispiel: Autocommit (zum Maximieren klicken)
Das folgende Beispiel zeigt, wie das Attribut autocommit verwendet wird.
-- The default value for AUTOCOMMIT is true.
SHOW AUTOCOMMIT;
-- This insert statement is automatically committed after it is executed, as
-- the connection is in autocommit mode.
INSERT INTO T (id, col_a, col_b) VALUES (1, 100, 1);
-- Turning off autocommit means that a new transaction is automatically started
-- when the next statement is executed.
SET AUTOCOMMIT = FALSE;
-- The following statement starts a new transaction.
INSERT INTO T (id, col_a, col_b) VALUES (2, 200, 2);
-- This statement uses the same transaction as the previous statement.
INSERT INTO T (id, col_a, col_b) VALUES (3, 300, 3);
-- Commit the current transaction with the two INSERT statements.
COMMIT;
-- Transactions can also be executed in autocommit mode by executing the BEGIN
-- statement.
SET AUTOCOMMIT = TRUE;
-- Execute a transaction while in autocommit mode.
BEGIN;
INSERT INTO T (id, col_a, col_b) VALUES (4, 400, 4);
INSERT INTO T (id, col_a, col_b) VALUES (5, 500, 5);
COMMIT;
SPANNER.RETRY_ABORTS_INTERNALLY
Ein boolescher Wert, der angibt, ob die Verbindung abgebrochene Transaktionen automatisch wiederholt. Der Standardwert ist true.
SHOW [VARIABLE] SPANNER.RETRY_ABORTS_INTERNALLY
SET SPANNER.RETRY_ABORTS_INTERNALLY {TO|=} { true | false }
Sie können diesen Befehl nur ausführen, nachdem eine Transaktion gestartet wurde (siehe BEGIN
[TRANSACTION | WORK]) und bevor Anweisungen innerhalb der Transaktion ausgeführt werden.
Wenn Sie SPANNER.RETRY_ABORTS_INTERNALLY aktivieren, speichert die Verbindung eine Prüfsumme aller Daten, die die Verbindung an die Clientanwendung zurückgibt. Damit wird die Transaktion wiederholt, wenn sie von Spanner abgebrochen wird.
Diese Einstellung ist standardmäßig aktiviert. Wir empfehlen, diese Einstellung zu deaktivieren, wenn Ihre Anwendung bereits abgebrochene Transaktionen wiederholt.
SPANNER.AUTOCOMMIT_DML_MODE
Ein STRING-Attribut, das den Autocommit-Modus für Anweisungen in der Datenbearbeitungssprache (Data-Manipulation Language, DML) angibt.
SHOW [VARIABLE] SPANNER.AUTOCOMMIT_DML_MODE
SET SPANNER.AUTOCOMMIT_DML_MODE {TO|=} { 'TRANSACTIONAL' | 'PARTITIONED_NON_ATOMIC' }
Die möglichen Werte sind:
- Im
TRANSACTIONAL-Modus führt der Treiber DML-Anweisungen als separate atomare Transaktionen aus. Der Treiber erstellt eine neue Transaktion, führt die DML-Anweisung aus und lässt danach entweder bei erfolgreicher Ausführung ein Commit oder im Falle eines Fehlers ein Rollback der Transaktion durchführen. - Im
PARTITIONED_NON_ATOMIC-Modus führt der Treiber DML-Anweisungen als partitionierte Aktualisierungsanweisungen aus. Eine partitionierte Aktualisierungsanweisung kann als eine Reihe von mehreren Transaktionen ausgeführt werden, wobei jede davon eine Teilmenge der betroffenen Zeilen abdeckt. Die partitionierte Anweisung bietet eine schwache Semantik im Austausch für bessere Skalierbarkeit und Leistung.
Der Standardwert ist TRANSACTIONAL.
▶ Beispiel: Partitionierte DML (zum Maximieren klicken)
Im folgenden Beispiel wird gezeigt, wie partitionierte DML mit PGAdapter ausgeführt wird.
-- Change autocommit DML mode to use Partitioned DML.
SET SPANNER.AUTOCOMMIT_DML_MODE = 'PARTITIONED_NON_ATOMIC';
-- Delete all singers that have been marked as inactive.
-- This statement is executed using Partitioned DML.
DELETE
FROM singers
WHERE active=false;
-- Change DML mode back to standard `TRANSACTIONAL`.
SET SPANNER.AUTOCOMMIT_DML_MODE = 'TRANSACTIONAL';
STATEMENT_TIMEOUT
Eine Property vom Typ STRING, die den aktuellen Zeitlimitwert für Anweisungen angibt.
SHOW [VARIABLE] STATEMENT_TIMEOUT
SET STATEMENT_TIMEOUT {TO|=} { '<int8>{ s | ms | us | ns }' | <int8> | DEFAULT }
Der int8-Wert ist eine ganze Zahl, gefolgt von einem Suffix, das die Zeiteinheit angibt. Der Wert von DEFAULT gibt an, dass kein Zeitüberschreitungswert festgelegt ist. Wenn ein Zeitüberschreitungswert für Anweisungen festgelegt wurde, verursachen Anweisungen, die länger als das angegebene Zeitlimit dauern, einen Zeitüberschreitungsfehler und machen die Transaktion ungültig.
Folgende Zeiteinheiten werden unterstützt:
s: Sekundenms: Millisekundenus: Mikrosekundenns: Nanosekunden
Der DEFAULT beträgt 0 Sekunden, d. h., es gibt kein Zeitlimit. Eine int8-Zahl ohne Einheiten gibt int8 ms an. Mit den folgenden Befehlen wird das Zeitlimit für Anweisungen beispielsweise auf 2 Sekunden festgelegt.
SET STATEMENT_TIMEOUT TO 2000;
SET STATEMENT_TIMEOUT TO '2s';
Die Zeitüberschreitung einer Anweisung während einer Transaktion macht die Transaktion ungültig, alle nachfolgenden Anweisungen in der ungültigen Transaktion (außer ROLLBACK) schlagen fehl.
READ_ONLY_STALENESS
Eine Property vom Typ STRING, die die aktuelle Veralterungs-Leseeinstellung angibt, die Spanner für schreibgeschützte Transaktionen und Abfragen im AUTOCOMMIT-Modus verwendet.
SHOW [VARIABLE] SPANNER.READ_ONLY_STALENESS
SET SPANNER.READ_ONLY_STALENESS {TO|=}