GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
App::Netdisco::DB::ExplicitLocking(3) User Contributed Perl Documentation App::Netdisco::DB::ExplicitLocking(3)

App::Netdisco::DB::ExplicitLocking - Support for PostgreSQL Lock Modes

In your DBIx::Class schema:

 package My::Schema;
 __PACKAGE__->load_components('+App::Netdisco::DB::ExplicitLocking');

Then, in your application code:

 use App::Netdisco::DB::ExplicitLocking ':modes';
 $schema->txn_do_locked($table, MODE_NAME, sub { ... });

This also works for the ResultSet:

 package My::Schema::ResultSet::TableName;
 __PACKAGE__->load_components('+App::Netdisco::DB::ExplicitLocking');

Then, in your application code:

 use App::Netdisco::DB::ExplicitLocking ':modes';
 $schema->resultset('TableName')->txn_do_locked(MODE_NAME, sub { ... });

This DBIx::Class component provides an easy way to execute PostgreSQL table locks before a transaction block.

You can load the component in either the Schema class or ResultSet class (or both) and then use an interface very similar to "DBIx::Class"'s "txn_do()".

The package also exports constants for each of the table lock modes supported by PostgreSQL, which must be used if specifying the mode (default mode is "ACCESS EXCLUSIVE").

With the ":modes" tag (as in SYNOPSIS above) the following constants are exported and must be used if specifying the lock mode:
  • "ACCESS_SHARE"
  • "ROW_SHARE"
  • "ROW_EXCLUSIVE"
  • "SHARE_UPDATE_EXCLUSIVE"
  • "SHARE"
  • "SHARE_ROW_EXCLUSIVE"
  • "EXCLUSIVE"
  • "ACCESS_EXCLUSIVE"

This is the method signature used when the component is loaded into your Schema class. The reason you might want to use this over the ResultSet version (below) is to specify multiple tables to be locked before the transaction.

The first argument is one or more tables, and is required. Note that these are the real table names in PostgreSQL, and not "DBIx::Class" ResultSet aliases or anything like that.

The mode name is optional, and defaults to "ACCESS EXCLUSIVE". You must use one of the exported constants in this parameter.

Finally pass a subroutine reference, just as you would to the normal "DBIx::Class" "txn_do()" method. Note that additional arguments are not supported.

This is the method signature used when the component is loaded into your ResultSet class. If you don't yet have a ResultSet class (which is the default - normally only Result classes are created) then you can create a stub which simply loads this component (and inherits from "DBIx::Class::ResultSet").

This is the simplest way to use this module if you only want to lock one table before your transaction block.

The first argument is the optional mode name, which defaults to "ACCESS EXCLUSIVE". You must use one of the exported constants in this parameter.

The second argument is a subroutine reference, just as you would pass to the normal "DBIx::Class" "txn_do()" method. Note that additional arguments are not supported.

2022-06-08 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.