Locks a table.
procedure LockTable(LockType: TPSQLLockType; NoWait: boolean);
LockTable obtains a table-level lock, waiting if necessary for any conflicting locks to be
released. If NoWait is True, LockTable does not wait to acquire the desired lock: if it cannot
be acquired immediately, the command is aborted and an error is emitted. Once obtained, the lock is held
for the remainder of the current transaction.
|Since there is no UNLOCK TABLE command, locks are always released at transaction end. Thus to prevent
one-command locks TPSQLTable will check if it's Database component is in transaction state. If not, error event
Table-level lock modes may be set in LockType:
Conflicts with the ACCESS EXCLUSIVE lock mode only. The SELECT command acquires a lock of this mode
on referenced tables. In general, any query that only reads a table and does not modify it will acquire this lock mode.
Conflicts with the EXCLUSIVE and ACCESS EXCLUSIVE lock modes. The SELECT FOR UPDATE and SELECT FOR
SHARE commands acquire a lock of this mode on the target table(s) (in addition to ACCESS SHARE locks on any other
tables that are referenced but not selected FOR UPDATE/FOR SHARE).
Conflicts with the SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, and ACCESS EXCLUSIVE lock modes.
The commands UPDATE, DELETE, and INSERT acquire this lock mode on the target table (in addition to ACCESS SHARE
locks on any other referenced tables). In general, this lock mode will be acquired by any command that modifies the data in a table.
Conflicts with the SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE, and
ACCESS EXCLUSIVE lock modes. This mode protects a table against concurrent schema changes and VACUUM runs.
Acquired by VACUUM (without FULL), ANALYZE, and CREATE INDEX CONCURRENTLY.
Conflicts with the ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE ROW EXCLUSIVE, EXCLUSIVE,
and ACCESS EXCLUSIVE lock modes. This mode protects a table against concurrent data changes.
Acquired by CREATE INDEX (without CONCURRENTLY).
Conflicts with the ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE, EXCLUSIVE,
and ACCESS EXCLUSIVE lock modes.
This lock mode is not automatically acquired by any PostgreSQL command.
Conflicts with the ROW SHARE, ROW EXCLUSIVE, SHARE UPDATE EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE,
EXCLUSIVE, and ACCESS EXCLUSIVE lock modes. This mode allows only concurrent ACCESS SHARE locks,
i.e., only reads from the table can proceed in parallel with a transaction holding this lock mode.
This lock mode is not automatically acquired on user tables by any PostgreSQL command. However it is
acquired on certain system catalogs in some operations.
Conflicts with locks of all modes. This mode guarantees that the holder is the only transaction
accessing the table in any way. Acquired by the ALTER TABLE, DROP TABLE, TRUNCATE, REINDEX, CLUSTER, and VACUUM FULL
|Only an ltAccessExclusive lock blocks a SELECT (without FOR UPDATE/SHARE) statement.|
|For additional information see "Concurency Control. Explicit Locking" chapter from original PostgreSQL manual.|