You're Invited:Meet the Socket Team at RSAC and BSidesSF 2026, March 23–26.RSVP
Socket
Book a DemoSign in
Socket

py-postgresql

Package Overview
Dependencies
Maintainers
1
Versions
16
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

py-postgresql - pypi Package Compare versions

Comparing version
1.0.1
to
1.0.2
+7
postgresql/documentation/cluster.py
##
# .documentation.cluster
##
__doc__ = open(__file__[:__file__.rfind('.')] + '.txt').read()
__docformat__ = 'reStructuredText'
if __name__ == '__main__':
help(__name__)
.. _cluster_management:
******************
Cluster Management
******************
py-postgresql provides cluster management tools in order to give the user
fine-grained control over a PostgreSQL cluster and access to information about an
installation of PostgreSQL.
.. _installation:
Installations
=============
`postgresql.installation.Installation` objects are primarily used to
access PostgreSQL installation information. Normally, they are created using a
dictionary constructed from the output of the pg_config_ executable::
from postgresql.installation import Installation, pg_config_dictionary
pg_install = Installation(pg_config_dictionary('/usr/local/pgsql/bin/pg_config'))
The extraction of pg_config_ information is isolated from Installation
instantiation in order to allow Installations to be created from arbitrary
dictionaries. This can be useful in cases where the installation layout is
inconsistent with the standard PostgreSQL installation layout, or if a faux
Installation needs to be created for testing purposes.
Installation Interface Points
-----------------------------
``Installation(info)``
Instantiate an Installation using the given information. Normally, this
information is extracted from a pg_config_ executable using
`postgresql.installation.pg_config_dictionary`::
info = pg_config_dictionary('/usr/local/pgsql/bin/pg_config')
pg_install = Installation(info)
``Installation.version``
The installation's version string::
pg_install.version
'PostgreSQL 9.0devel'
``Installation.version_info``
A tuple containing the version's ``(major, minor, patch, state, level)``.
Where ``major``, ``minor``, ``patch``, and ``level`` are `int` objects, and
``state`` is a `str` object::
pg_install.version_info
(9, 0, 0, 'devel', 0)
``Installation.ssl``
A `bool` indicating whether or not the installation has SSL support.
``Installation.configure_options``
The options given to the ``configure`` script that built the installation. The
options are represented using a dictionary object whose keys are normalized
long option names, and whose values are the option's argument. If the option
takes no argument, `True` will be used as the value.
The normalization of the long option names consists of removing the preceding
dashes, lowering the string, and replacing any dashes with underscores. For
instance, ``--enable-debug`` will be ``enable_debug``::
pg_install.configure_options
{'enable_debug': True, 'with_libxml': True,
'enable_cassert': True, 'with_libedit_preferred': True,
'prefix': '/src/build/pg90', 'with_openssl': True,
'enable_integer_datetimes': True, 'enable_depend': True}
``Installation.paths``
The paths of the installation as a dictionary where the keys are the path
identifiers and the values are the absolute file system paths. For instance,
``'bindir'`` is associated with ``$PREFIX/bin``, ``'libdir'`` is associated
with ``$PREFIX/lib``, etc. The paths included in this dictionary are
listed on the class' attributes: `Installation.pg_directories` and
`Installation.pg_executables`.
The keys that point to installation directories are: ``bindir``, ``docdir``,
``includedir``, ``pkgincludedir``, ``includedir_server``, ``libdir``,
``pkglibdir``, ``localedir``, ``mandir``, ``sharedir``, and ``sysconfdir``.
The keys that point to installation executables are: ``pg_config``, ``psql``,
``initdb``, ``pg_resetxlog``, ``pg_controldata``, ``clusterdb``, ``pg_ctl``,
``pg_dump``, ``pg_dumpall``, ``postgres``, ``postmaster``, ``reindexdb``,
``vacuumdb``, ``ipcclean``, ``createdb``, ``ecpg``, ``createuser``,
``createlang``, ``droplang``, ``dropuser``, and ``pg_restore``.
.. note:: If the executable does not exist, the value will be `None` instead
of an absoluate path.
To get the path to the psql_ executable::
from postgresql.installation import Installation
pg_install = Installation('/usr/local/pgsql/bin/pg_config')
psql_path = pg_install.paths['psql']
Clusters
========
`postgresql.cluster.Cluster` is the class used to manage a PostgreSQL
cluster--a data directory created by initdb_. A Cluster represents a data
directory with respect to a given installation of PostgreSQL, so
creating a `postgresql.cluster.Cluster` object requires a
`postgresql.installation.Installation`, and a
file system path to the data directory.
In part, a `postgresql.cluster.Cluster` is the Python programmer's variant of
the pg_ctl_ command. However, it goes beyond the basic process control
functionality and extends into initialization and configuration as well.
A Cluster manages the server process using the `subprocess` module and
signals. The `subprocess.Popen` object, ``Cluster.daemon_process``, is
retained when the Cluster starts the server process itself. This gives
the Cluster access to the result code of server process when it exits, and the
ability to redirect stderr and stdout to a parameterized file object using
subprocess features.
Despite its use of `subprocess`, Clusters can control a server process
that was *not* started by the Cluster's ``start`` method.
Initializing Clusters
---------------------
`postgresql.cluster.Cluster` provides a method for initializing a
`Cluster`'s data directory, ``init``. This method provides a Python interface to
the PostgreSQL initdb_ command.
``init`` is a regular method and accepts a few keyword parameters. Normally,
parameters are directly mapped to initdb_ command options. However, ``password``
makes use of initdb's capability to read the superuser's password from a file.
To do this, a temporary file is allocated internally by the method::
from postgresql.installation import Installation, pg_config_dictionary
from postgresql.cluster import Cluster
pg_install = Installation(pg_config_dictionary('/usr/local/pgsql/bin/pg_config'))
pg_cluster = Cluster(pg_install, 'pg_data')
pg_cluster.init(user = 'pg', password = 'secret', encoding = 'utf-8')
The init method will block until the initdb command is complete. Once
initialized, the Cluster may be configured.
Configuring Clusters
--------------------
A Cluster's `configuration file`_ can be manipulated using the
`Cluster.settings` mapping. The mapping's methods will always access the
configuration file, so it may be desirable to cache repeat reads. Also, if
multiple settings are being applied, using the ``update()`` method may be
important to avoid writing the entire file multiple times::
pg_cluster.settings.update({'listen_addresses' : 'localhost', 'port' : '6543'})
Similarly, to avoid opening and reading the entire file multiple times,
`Cluster.settings.getset` should be used to retrieve multiple settings::
d = pg_cluster.settings.getset(set(('listen_addresses', 'port')))
d
{'listen_addresses' : 'localhost', 'port' : '6543'}
Values contained in ``settings`` are always Python strings::
assert pg_cluster.settings['max_connections'].__class__ is str
The ``postgresql.conf`` file is only one part of the server configuration.
Structured access and manipulation of the pg_hba_ file is not
supported. Clusters only provide the file path to the pg_hba_ file::
hba = open(pg_cluster.hba_file)
If the configuration of the Cluster is altered while the server process is
running, it may be necessary to signal the process that configuration changes
have been made. This signal can be sent using the ``Cluster.reload()`` method.
``Cluster.reload()`` will send a SIGHUP signal to the server process. However,
not all changes to configuration settings can go into effect after calling
``Cluster.reload()``. In those cases, the server process will need to be
shutdown and started again.
Controlling Clusters
--------------------
The server process of a Cluster object can be controlled with the ``start()``,
``stop()``, ``shutdown()``, ``kill()``, and ``restart()`` methods.
These methods start the server process, signal the server process, or, in the
case of restart, a combination of the two.
When a Cluster starts the server process, it's ran as a subprocess. Therefore,
if the current process exits, the server process will exit as well. ``start()``
does *not* automatically daemonize the server process.
.. note:: Under Microsoft Windows, above does not hold true. The server process
will continue running despite the exit of the parent process.
To terminate a server process, one of these three methods should be called:
``stop``, ``shutdown``, or ``kill``. ``stop`` is a graceful shutdown and will
*wait for all clients to disconnect* before shutting down. ``shutdown`` will
close any open connections and safely shutdown the server process.
``kill`` will immediately terminate the server process leading to recovery upon
starting the server process again.
.. note:: Using ``kill`` may cause shared memory to be leaked.
Normally, `Cluster.shutdown` is the appropriate way to terminate a server
process.
Cluster Interface Points
------------------------
Methods and properties available on `postgresql.cluster.Cluster` instances:
``Cluster(installation, data_directory)``
Create a `postgresql.cluster.Cluster` object for the specified
`postgresql.installation.Installation`, and ``data_directory``.
The ``data_directory`` must be an absoluate file system path. The directory
does *not* need to exist. The ``init()`` method may later be used to create
the cluster.
``Cluster.installation``
The Cluster's `postgresql.installation.Installation` instance.
``Cluster.data_directory``
The absolute path to the PostgreSQL data directory.
This directory may not exist.
``Cluster.init([encoding = None[, user = None[, password = None]]])``
Run the `initdb`_ executable of the configured installation to initialize the
cluster at the configured data directory, `Cluster.data_directory`.
``encoding`` is mapped to ``-E``, the default database encoding. By default,
the encoding is determined from the environment's locale.
``user`` is mapped to ``-U``, the database superuser name. By default, the
current user's name.
``password`` is ultimately mapped to ``--pwfile``. The argument given to the
long option is actually a path to the temporary file that holds the given
password.
Raises `postgresql.cluster.InitDBError` when initdb_ returns a non-zero result
code.
Raises `postgresql.cluster.ClusterInitializationError` when there is no
initdb_ in the Installation.
``Cluster.initialized()``
Whether or not the data directory exists, *and* if it looks like a PostgreSQL
data directory. Meaning, the directory must contain a ``postgresql.conf`` file
and a ``base`` directory.
``Cluster.drop()``
Shutdown the Cluster's server process and completely remove the
`Cluster.data_directory` from the file system.
``Cluster.pid()``
The server's process identifier as a Python `int`. `None` if there is no
server process running.
This is a method rather than a property as it may read the PID from a file
in cases where the server process was not started by the Cluster.
``Cluster.start([logfile = None[, settings = None]])``
Start the PostgreSQL server process for the Cluster if it is not
already running. This will execute postgres_ as a subprocess.
If ``logfile``, an opened and writable file object, is given, stderr and
stdout will be redirected to that file. By default, both stderr and stdout are
closed.
If ``settings`` is given, the mapping or sequence of pairs will be used as
long options to the subprocess. For each item, ``--{key}={value}`` will be
given as an argument to the subprocess.
``Cluster.running()``
Whether or not the cluster's server process is running. Returns `True` or
`False`. Even if `True` is returned, it does *not* mean that the server
process is ready to accept connections.
``Cluster.ready_for_connections()``
Whether or not the Cluster is ready to accept connections. Usually called
after `Cluster.start`.
Returns `True` when the Cluster can accept connections, `False` when it
cannot, and `None` if the Cluster's server process is not running at all.
``Cluster.wait_until_started([timeout = 10[, delay = 0.05]])``
Blocks the process until the cluster is identified as being ready for
connections. Usually called after ``Cluster.start()``.
Raises `postgresql.cluster.ClusterNotRunningError` if the server process is
not running at all.
Raises `postgresql.cluster.ClusterTimeoutError` if
`Cluster.ready_for_connections()` does not return `True` within the given
`timeout` period.
Raises `postgresql.cluster.ClusterStartupError` if the server process
terminates while polling for readiness.
``timeout`` and ``delay`` are both in seconds. Where ``timeout`` is the
maximum time to wait for the Cluster to be ready for connections, and
``delay`` is the time to sleep between calls to
`Cluster.ready_for_connections()`.
``Cluster.stop()``
Signal the cluster to shutdown when possible. The *server* will wait for all
clients to disconnect before shutting down.
``Cluster.shutdown()``
Signal the cluster to shutdown immediately. Any open client connections will
be closed.
``Cluster.kill()``
Signal the absolute destruction of the server process(SIGKILL).
*This will require recovery when the cluster is started again.*
*Shared memory may be leaked.*
``Cluster.wait_until_stopped([timeout = 10[, delay = 0.05]])``
Blocks the process until the cluster is identified as being shutdown. Usually
called after `Cluster.stop` or `Cluster.shutdown`.
Raises `postgresql.cluster.ClusterTimeoutError` if
`Cluster.ready_for_connections` does not return `None` within the given
`timeout` period.
``Cluster.reload()``
Signal the server that it should reload its configuration files(SIGHUP).
Usually called after manipulating `Cluster.settings` or modifying the
contents of `Cluster.hba_file`.
``Cluster.restart([logfile = None[, settings = None[, timeout = 10]]])``
Stop the server process, wait until it is stopped, start the server
process, and wait until it has started.
.. note:: This calls ``Cluster.stop()``, so it will wait until clients
disconnect before starting up again.
The ``logfile`` and ``settings`` parameters will be given to `Cluster.start`.
``timeout`` will be given to `Cluster.wait_until_stopped` and
`Cluster.wait_until_started`.
``Cluster.settings``
A `collections.Mapping` interface to the ``postgresql.conf`` file of the
cluster.
A notable extension to the mapping interface is the ``getset`` method. This
method will return a dictionary object containing the settings whose names
were contained in the `set` object given to the method.
This method should be used when multiple settings need to be retrieved from
the configuration file.
``Cluster.hba_file``
The path to the cluster's pg_hba_ file. This property respects the HBA file
location setting in ``postgresql.conf``. Usually, ``$PGDATA/pg_hba.conf``.
``Cluster.daemon_path``
The path to the executable to use to start the server process.
``Cluster.daemon_process``
The `subprocess.Popen` instance of the server process. `None` if the server
process was not started or was not started using the Cluster object.
.. _pg_hba: http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html
.. _pg_config: http://www.postgresql.org/docs/current/static/app-pgconfig.html
.. _initdb: http://www.postgresql.org/docs/current/static/app-initdb.html
.. _psql: http://www.postgresql.org/docs/current/static/app-psql.html
.. _postgres: http://www.postgresql.org/docs/current/static/app-postgres.html
.. _pg_ctl: http://www.postgresql.org/docs/current/static/app-pg-ctl.html
.. _configuration file: http://www.postgresql.org/docs/current/static/runtime-config.html
.. _cluster_management:
******************
Cluster Management
******************
py-postgresql provides cluster management tools in order to give the user
fine-grained control over a PostgreSQL cluster and access to information about an
installation of PostgreSQL.
.. _installation:
Installations
=============
`postgresql.installation.Installation` objects are primarily used to
access PostgreSQL installation information. Normally, they are created using a
dictionary constructed from the output of the pg_config_ executable::
from postgresql.installation import Installation, pg_config_dictionary
pg_install = Installation(pg_config_dictionary('/usr/local/pgsql/bin/pg_config'))
The extraction of pg_config_ information is isolated from Installation
instantiation in order to allow Installations to be created from arbitrary
dictionaries. This can be useful in cases where the installation layout is
inconsistent with the standard PostgreSQL installation layout, or if a faux
Installation needs to be created for testing purposes.
Installation Interface Points
-----------------------------
``Installation(info)``
Instantiate an Installation using the given information. Normally, this
information is extracted from a pg_config_ executable using
`postgresql.installation.pg_config_dictionary`::
info = pg_config_dictionary('/usr/local/pgsql/bin/pg_config')
pg_install = Installation(info)
``Installation.version``
The installation's version string::
pg_install.version
'PostgreSQL 9.0devel'
``Installation.version_info``
A tuple containing the version's ``(major, minor, patch, state, level)``.
Where ``major``, ``minor``, ``patch``, and ``level`` are `int` objects, and
``state`` is a `str` object::
pg_install.version_info
(9, 0, 0, 'devel', 0)
``Installation.ssl``
A `bool` indicating whether or not the installation has SSL support.
``Installation.configure_options``
The options given to the ``configure`` script that built the installation. The
options are represented using a dictionary object whose keys are normalized
long option names, and whose values are the option's argument. If the option
takes no argument, `True` will be used as the value.
The normalization of the long option names consists of removing the preceding
dashes, lowering the string, and replacing any dashes with underscores. For
instance, ``--enable-debug`` will be ``enable_debug``::
pg_install.configure_options
{'enable_debug': True, 'with_libxml': True,
'enable_cassert': True, 'with_libedit_preferred': True,
'prefix': '/src/build/pg90', 'with_openssl': True,
'enable_integer_datetimes': True, 'enable_depend': True}
``Installation.paths``
The paths of the installation as a dictionary where the keys are the path
identifiers and the values are the absolute file system paths. For instance,
``'bindir'`` is associated with ``$PREFIX/bin``, ``'libdir'`` is associated
with ``$PREFIX/lib``, etc. The paths included in this dictionary are
listed on the class' attributes: `Installation.pg_directories` and
`Installation.pg_executables`.
The keys that point to installation directories are: ``bindir``, ``docdir``,
``includedir``, ``pkgincludedir``, ``includedir_server``, ``libdir``,
``pkglibdir``, ``localedir``, ``mandir``, ``sharedir``, and ``sysconfdir``.
The keys that point to installation executables are: ``pg_config``, ``psql``,
``initdb``, ``pg_resetxlog``, ``pg_controldata``, ``clusterdb``, ``pg_ctl``,
``pg_dump``, ``pg_dumpall``, ``postgres``, ``postmaster``, ``reindexdb``,
``vacuumdb``, ``ipcclean``, ``createdb``, ``ecpg``, ``createuser``,
``createlang``, ``droplang``, ``dropuser``, and ``pg_restore``.
.. note:: If the executable does not exist, the value will be `None` instead
of an absoluate path.
To get the path to the psql_ executable::
from postgresql.installation import Installation
pg_install = Installation('/usr/local/pgsql/bin/pg_config')
psql_path = pg_install.paths['psql']
Clusters
========
`postgresql.cluster.Cluster` is the class used to manage a PostgreSQL
cluster--a data directory created by initdb_. A Cluster represents a data
directory with respect to a given installation of PostgreSQL, so
creating a `postgresql.cluster.Cluster` object requires a
`postgresql.installation.Installation`, and a
file system path to the data directory.
In part, a `postgresql.cluster.Cluster` is the Python programmer's variant of
the pg_ctl_ command. However, it goes beyond the basic process control
functionality and extends into initialization and configuration as well.
A Cluster manages the server process using the `subprocess` module and
signals. The `subprocess.Popen` object, ``Cluster.daemon_process``, is
retained when the Cluster starts the server process itself. This gives
the Cluster access to the result code of server process when it exits, and the
ability to redirect stderr and stdout to a parameterized file object using
subprocess features.
Despite its use of `subprocess`, Clusters can control a server process
that was *not* started by the Cluster's ``start`` method.
Initializing Clusters
---------------------
`postgresql.cluster.Cluster` provides a method for initializing a
`Cluster`'s data directory, ``init``. This method provides a Python interface to
the PostgreSQL initdb_ command.
``init`` is a regular method and accepts a few keyword parameters. Normally,
parameters are directly mapped to initdb_ command options. However, ``password``
makes use of initdb's capability to read the superuser's password from a file.
To do this, a temporary file is allocated internally by the method::
from postgresql.installation import Installation, pg_config_dictionary
from postgresql.cluster import Cluster
pg_install = Installation(pg_config_dictionary('/usr/local/pgsql/bin/pg_config'))
pg_cluster = Cluster(pg_install, 'pg_data')
pg_cluster.init(user = 'pg', password = 'secret', encoding = 'utf-8')
The init method will block until the initdb command is complete. Once
initialized, the Cluster may be configured.
Configuring Clusters
--------------------
A Cluster's `configuration file`_ can be manipulated using the
`Cluster.settings` mapping. The mapping's methods will always access the
configuration file, so it may be desirable to cache repeat reads. Also, if
multiple settings are being applied, using the ``update()`` method may be
important to avoid writing the entire file multiple times::
pg_cluster.settings.update({'listen_addresses' : 'localhost', 'port' : '6543'})
Similarly, to avoid opening and reading the entire file multiple times,
`Cluster.settings.getset` should be used to retrieve multiple settings::
d = pg_cluster.settings.getset(set(('listen_addresses', 'port')))
d
{'listen_addresses' : 'localhost', 'port' : '6543'}
Values contained in ``settings`` are always Python strings::
assert pg_cluster.settings['max_connections'].__class__ is str
The ``postgresql.conf`` file is only one part of the server configuration.
Structured access and manipulation of the pg_hba_ file is not
supported. Clusters only provide the file path to the pg_hba_ file::
hba = open(pg_cluster.hba_file)
If the configuration of the Cluster is altered while the server process is
running, it may be necessary to signal the process that configuration changes
have been made. This signal can be sent using the ``Cluster.reload()`` method.
``Cluster.reload()`` will send a SIGHUP signal to the server process. However,
not all changes to configuration settings can go into effect after calling
``Cluster.reload()``. In those cases, the server process will need to be
shutdown and started again.
Controlling Clusters
--------------------
The server process of a Cluster object can be controlled with the ``start()``,
``stop()``, ``shutdown()``, ``kill()``, and ``restart()`` methods.
These methods start the server process, signal the server process, or, in the
case of restart, a combination of the two.
When a Cluster starts the server process, it's ran as a subprocess. Therefore,
if the current process exits, the server process will exit as well. ``start()``
does *not* automatically daemonize the server process.
.. note:: Under Microsoft Windows, above does not hold true. The server process
will continue running despite the exit of the parent process.
To terminate a server process, one of these three methods should be called:
``stop``, ``shutdown``, or ``kill``. ``stop`` is a graceful shutdown and will
*wait for all clients to disconnect* before shutting down. ``shutdown`` will
close any open connections and safely shutdown the server process.
``kill`` will immediately terminate the server process leading to recovery upon
starting the server process again.
.. note:: Using ``kill`` may cause shared memory to be leaked.
Normally, `Cluster.shutdown` is the appropriate way to terminate a server
process.
Cluster Interface Points
------------------------
Methods and properties available on `postgresql.cluster.Cluster` instances:
``Cluster(installation, data_directory)``
Create a `postgresql.cluster.Cluster` object for the specified
`postgresql.installation.Installation`, and ``data_directory``.
The ``data_directory`` must be an absoluate file system path. The directory
does *not* need to exist. The ``init()`` method may later be used to create
the cluster.
``Cluster.installation``
The Cluster's `postgresql.installation.Installation` instance.
``Cluster.data_directory``
The absolute path to the PostgreSQL data directory.
This directory may not exist.
``Cluster.init([encoding = None[, user = None[, password = None]]])``
Run the `initdb`_ executable of the configured installation to initialize the
cluster at the configured data directory, `Cluster.data_directory`.
``encoding`` is mapped to ``-E``, the default database encoding. By default,
the encoding is determined from the environment's locale.
``user`` is mapped to ``-U``, the database superuser name. By default, the
current user's name.
``password`` is ultimately mapped to ``--pwfile``. The argument given to the
long option is actually a path to the temporary file that holds the given
password.
Raises `postgresql.cluster.InitDBError` when initdb_ returns a non-zero result
code.
Raises `postgresql.cluster.ClusterInitializationError` when there is no
initdb_ in the Installation.
``Cluster.initialized()``
Whether or not the data directory exists, *and* if it looks like a PostgreSQL
data directory. Meaning, the directory must contain a ``postgresql.conf`` file
and a ``base`` directory.
``Cluster.drop()``
Shutdown the Cluster's server process and completely remove the
`Cluster.data_directory` from the file system.
``Cluster.pid()``
The server's process identifier as a Python `int`. `None` if there is no
server process running.
This is a method rather than a property as it may read the PID from a file
in cases where the server process was not started by the Cluster.
``Cluster.start([logfile = None[, settings = None]])``
Start the PostgreSQL server process for the Cluster if it is not
already running. This will execute postgres_ as a subprocess.
If ``logfile``, an opened and writable file object, is given, stderr and
stdout will be redirected to that file. By default, both stderr and stdout are
closed.
If ``settings`` is given, the mapping or sequence of pairs will be used as
long options to the subprocess. For each item, ``--{key}={value}`` will be
given as an argument to the subprocess.
``Cluster.running()``
Whether or not the cluster's server process is running. Returns `True` or
`False`. Even if `True` is returned, it does *not* mean that the server
process is ready to accept connections.
``Cluster.ready_for_connections()``
Whether or not the Cluster is ready to accept connections. Usually called
after `Cluster.start`.
Returns `True` when the Cluster can accept connections, `False` when it
cannot, and `None` if the Cluster's server process is not running at all.
``Cluster.wait_until_started([timeout = 10[, delay = 0.05]])``
Blocks the process until the cluster is identified as being ready for
connections. Usually called after ``Cluster.start()``.
Raises `postgresql.cluster.ClusterNotRunningError` if the server process is
not running at all.
Raises `postgresql.cluster.ClusterTimeoutError` if
`Cluster.ready_for_connections()` does not return `True` within the given
`timeout` period.
Raises `postgresql.cluster.ClusterStartupError` if the server process
terminates while polling for readiness.
``timeout`` and ``delay`` are both in seconds. Where ``timeout`` is the
maximum time to wait for the Cluster to be ready for connections, and
``delay`` is the time to sleep between calls to
`Cluster.ready_for_connections()`.
``Cluster.stop()``
Signal the cluster to shutdown when possible. The *server* will wait for all
clients to disconnect before shutting down.
``Cluster.shutdown()``
Signal the cluster to shutdown immediately. Any open client connections will
be closed.
``Cluster.kill()``
Signal the absolute destruction of the server process(SIGKILL).
*This will require recovery when the cluster is started again.*
*Shared memory may be leaked.*
``Cluster.wait_until_stopped([timeout = 10[, delay = 0.05]])``
Blocks the process until the cluster is identified as being shutdown. Usually
called after `Cluster.stop` or `Cluster.shutdown`.
Raises `postgresql.cluster.ClusterTimeoutError` if
`Cluster.ready_for_connections` does not return `None` within the given
`timeout` period.
``Cluster.reload()``
Signal the server that it should reload its configuration files(SIGHUP).
Usually called after manipulating `Cluster.settings` or modifying the
contents of `Cluster.hba_file`.
``Cluster.restart([logfile = None[, settings = None[, timeout = 10]]])``
Stop the server process, wait until it is stopped, start the server
process, and wait until it has started.
.. note:: This calls ``Cluster.stop()``, so it will wait until clients
disconnect before starting up again.
The ``logfile`` and ``settings`` parameters will be given to `Cluster.start`.
``timeout`` will be given to `Cluster.wait_until_stopped` and
`Cluster.wait_until_started`.
``Cluster.settings``
A `collections.Mapping` interface to the ``postgresql.conf`` file of the
cluster.
A notable extension to the mapping interface is the ``getset`` method. This
method will return a dictionary object containing the settings whose names
were contained in the `set` object given to the method.
This method should be used when multiple settings need to be retrieved from
the configuration file.
``Cluster.hba_file``
The path to the cluster's pg_hba_ file. This property respects the HBA file
location setting in ``postgresql.conf``. Usually, ``$PGDATA/pg_hba.conf``.
``Cluster.daemon_path``
The path to the executable to use to start the server process.
``Cluster.daemon_process``
The `subprocess.Popen` instance of the server process. `None` if the server
process was not started or was not started using the Cluster object.
.. _pg_hba: http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html
.. _pg_config: http://www.postgresql.org/docs/current/static/app-pgconfig.html
.. _initdb: http://www.postgresql.org/docs/current/static/app-initdb.html
.. _psql: http://www.postgresql.org/docs/current/static/app-psql.html
.. _postgres: http://www.postgresql.org/docs/current/static/app-postgres.html
.. _pg_ctl: http://www.postgresql.org/docs/current/static/app-pg-ctl.html
.. _configuration file: http://www.postgresql.org/docs/current/static/runtime-config.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Cluster Management &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '',
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<link rel="next" title="Categories and Libraries" href="lib.html" />
<link rel="prev" title="Advisory Locks" href="alock.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="lib.html" title="Categories and Libraries"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="alock.html" title="Advisory Locks"
accesskey="P">previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="cluster-management">
<span id="id1"></span><h1>Cluster Management<a class="headerlink" href="#cluster-management" title="Permalink to this headline">¶</a></h1>
<p>py-postgresql provides cluster management tools in order to give the user
fine-grained control over a PostgreSQL cluster and access to information about an
installation of PostgreSQL.</p>
<div class="section" id="installations">
<span id="installation"></span><h2>Installations<a class="headerlink" href="#installations" title="Permalink to this headline">¶</a></h2>
<p><cite>postgresql.installation.Installation</cite> objects are primarily used to
access PostgreSQL installation information. Normally, they are created using a
dictionary constructed from the output of the <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-pgconfig.html">pg_config</a> executable:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">postgresql.installation</span> <span class="kn">import</span> <span class="n">Installation</span><span class="p">,</span> <span class="n">pg_config_dictionary</span>
<span class="n">pg_install</span> <span class="o">=</span> <span class="n">Installation</span><span class="p">(</span><span class="n">pg_config_dictionary</span><span class="p">(</span><span class="s">&#39;/usr/local/pgsql/bin/pg_config&#39;</span><span class="p">))</span>
</pre></div>
</div>
<p>The extraction of <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-pgconfig.html">pg_config</a> information is isolated from Installation
instantiation in order to allow Installations to be created from arbitrary
dictionaries. This can be useful in cases where the installation layout is
inconsistent with the standard PostgreSQL installation layout, or if a faux
Installation needs to be created for testing purposes.</p>
<div class="section" id="installation-interface-points">
<h3>Installation Interface Points<a class="headerlink" href="#installation-interface-points" title="Permalink to this headline">¶</a></h3>
<blockquote>
<dl class="docutils">
<dt><tt class="docutils literal"><span class="pre">Installation(info)</span></tt></dt>
<dd><p class="first">Instantiate an Installation using the given information. Normally, this
information is extracted from a <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-pgconfig.html">pg_config</a> executable using
<cite>postgresql.installation.pg_config_dictionary</cite>:</p>
<div class="last highlight-python"><div class="highlight"><pre><span class="n">info</span> <span class="o">=</span> <span class="n">pg_config_dictionary</span><span class="p">(</span><span class="s">&#39;/usr/local/pgsql/bin/pg_config&#39;</span><span class="p">)</span>
<span class="n">pg_install</span> <span class="o">=</span> <span class="n">Installation</span><span class="p">(</span><span class="n">info</span><span class="p">)</span>
</pre></div>
</div>
</dd>
<dt><tt class="docutils literal"><span class="pre">Installation.version</span></tt></dt>
<dd><p class="first">The installation&#8217;s version string:</p>
<div class="last highlight-python"><div class="highlight"><pre><span class="n">pg_install</span><span class="o">.</span><span class="n">version</span>
<span class="s">&#39;PostgreSQL 9.0devel&#39;</span>
</pre></div>
</div>
</dd>
<dt><tt class="docutils literal"><span class="pre">Installation.version_info</span></tt></dt>
<dd><p class="first">A tuple containing the version&#8217;s <tt class="docutils literal"><span class="pre">(major,</span> <span class="pre">minor,</span> <span class="pre">patch,</span> <span class="pre">state,</span> <span class="pre">level)</span></tt>.
Where <tt class="docutils literal"><span class="pre">major</span></tt>, <tt class="docutils literal"><span class="pre">minor</span></tt>, <tt class="docutils literal"><span class="pre">patch</span></tt>, and <tt class="docutils literal"><span class="pre">level</span></tt> are <cite>int</cite> objects, and
<tt class="docutils literal"><span class="pre">state</span></tt> is a <cite>str</cite> object:</p>
<div class="last highlight-python"><div class="highlight"><pre><span class="n">pg_install</span><span class="o">.</span><span class="n">version_info</span>
<span class="p">(</span><span class="mi">9</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s">&#39;devel&#39;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
</pre></div>
</div>
</dd>
<dt><tt class="docutils literal"><span class="pre">Installation.ssl</span></tt></dt>
<dd>A <cite>bool</cite> indicating whether or not the installation has SSL support.</dd>
<dt><tt class="docutils literal"><span class="pre">Installation.configure_options</span></tt></dt>
<dd><p class="first">The options given to the <tt class="docutils literal"><span class="pre">configure</span></tt> script that built the installation. The
options are represented using a dictionary object whose keys are normalized
long option names, and whose values are the option&#8217;s argument. If the option
takes no argument, <cite>True</cite> will be used as the value.</p>
<p>The normalization of the long option names consists of removing the preceding
dashes, lowering the string, and replacing any dashes with underscores. For
instance, <tt class="docutils literal"><span class="pre">--enable-debug</span></tt> will be <tt class="docutils literal"><span class="pre">enable_debug</span></tt>:</p>
<div class="last highlight-python"><div class="highlight"><pre><span class="n">pg_install</span><span class="o">.</span><span class="n">configure_options</span>
<span class="p">{</span><span class="s">&#39;enable_debug&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">&#39;with_libxml&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
<span class="s">&#39;enable_cassert&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">&#39;with_libedit_preferred&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
<span class="s">&#39;prefix&#39;</span><span class="p">:</span> <span class="s">&#39;/src/build/pg90&#39;</span><span class="p">,</span> <span class="s">&#39;with_openssl&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span>
<span class="s">&#39;enable_integer_datetimes&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">&#39;enable_depend&#39;</span><span class="p">:</span> <span class="bp">True</span><span class="p">}</span>
</pre></div>
</div>
</dd>
<dt><tt class="docutils literal"><span class="pre">Installation.paths</span></tt></dt>
<dd><p class="first">The paths of the installation as a dictionary where the keys are the path
identifiers and the values are the absolute file system paths. For instance,
<tt class="docutils literal"><span class="pre">'bindir'</span></tt> is associated with <tt class="docutils literal"><span class="pre">$PREFIX/bin</span></tt>, <tt class="docutils literal"><span class="pre">'libdir'</span></tt> is associated
with <tt class="docutils literal"><span class="pre">$PREFIX/lib</span></tt>, etc. The paths included in this dictionary are
listed on the class&#8217; attributes: <cite>Installation.pg_directories</cite> and
<cite>Installation.pg_executables</cite>.</p>
<p>The keys that point to installation directories are: <tt class="docutils literal"><span class="pre">bindir</span></tt>, <tt class="docutils literal"><span class="pre">docdir</span></tt>,
<tt class="docutils literal"><span class="pre">includedir</span></tt>, <tt class="docutils literal"><span class="pre">pkgincludedir</span></tt>, <tt class="docutils literal"><span class="pre">includedir_server</span></tt>, <tt class="docutils literal"><span class="pre">libdir</span></tt>,
<tt class="docutils literal"><span class="pre">pkglibdir</span></tt>, <tt class="docutils literal"><span class="pre">localedir</span></tt>, <tt class="docutils literal"><span class="pre">mandir</span></tt>, <tt class="docutils literal"><span class="pre">sharedir</span></tt>, and <tt class="docutils literal"><span class="pre">sysconfdir</span></tt>.</p>
<p>The keys that point to installation executables are: <tt class="docutils literal"><span class="pre">pg_config</span></tt>, <tt class="docutils literal"><span class="pre">psql</span></tt>,
<tt class="docutils literal"><span class="pre">initdb</span></tt>, <tt class="docutils literal"><span class="pre">pg_resetxlog</span></tt>, <tt class="docutils literal"><span class="pre">pg_controldata</span></tt>, <tt class="docutils literal"><span class="pre">clusterdb</span></tt>, <tt class="docutils literal"><span class="pre">pg_ctl</span></tt>,
<tt class="docutils literal"><span class="pre">pg_dump</span></tt>, <tt class="docutils literal"><span class="pre">pg_dumpall</span></tt>, <tt class="docutils literal"><span class="pre">postgres</span></tt>, <tt class="docutils literal"><span class="pre">postmaster</span></tt>, <tt class="docutils literal"><span class="pre">reindexdb</span></tt>,
<tt class="docutils literal"><span class="pre">vacuumdb</span></tt>, <tt class="docutils literal"><span class="pre">ipcclean</span></tt>, <tt class="docutils literal"><span class="pre">createdb</span></tt>, <tt class="docutils literal"><span class="pre">ecpg</span></tt>, <tt class="docutils literal"><span class="pre">createuser</span></tt>,
<tt class="docutils literal"><span class="pre">createlang</span></tt>, <tt class="docutils literal"><span class="pre">droplang</span></tt>, <tt class="docutils literal"><span class="pre">dropuser</span></tt>, and <tt class="docutils literal"><span class="pre">pg_restore</span></tt>.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">If the executable does not exist, the value will be <cite>None</cite> instead
of an absoluate path.</p>
</div>
<p>To get the path to the <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-psql.html">psql</a> executable:</p>
<div class="last highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">postgresql.installation</span> <span class="kn">import</span> <span class="n">Installation</span>
<span class="n">pg_install</span> <span class="o">=</span> <span class="n">Installation</span><span class="p">(</span><span class="s">&#39;/usr/local/pgsql/bin/pg_config&#39;</span><span class="p">)</span>
<span class="n">psql_path</span> <span class="o">=</span> <span class="n">pg_install</span><span class="o">.</span><span class="n">paths</span><span class="p">[</span><span class="s">&#39;psql&#39;</span><span class="p">]</span>
</pre></div>
</div>
</dd>
</dl>
</blockquote>
</div>
</div>
<div class="section" id="clusters">
<h2>Clusters<a class="headerlink" href="#clusters" title="Permalink to this headline">¶</a></h2>
<p><cite>postgresql.cluster.Cluster</cite> is the class used to manage a PostgreSQL
cluster&#8211;a data directory created by <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-initdb.html">initdb</a>. A Cluster represents a data
directory with respect to a given installation of PostgreSQL, so
creating a <cite>postgresql.cluster.Cluster</cite> object requires a
<cite>postgresql.installation.Installation</cite>, and a
file system path to the data directory.</p>
<p>In part, a <cite>postgresql.cluster.Cluster</cite> is the Python programmer&#8217;s variant of
the <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-pg-ctl.html">pg_ctl</a> command. However, it goes beyond the basic process control
functionality and extends into initialization and configuration as well.</p>
<p>A Cluster manages the server process using the <cite>subprocess</cite> module and
signals. The <cite>subprocess.Popen</cite> object, <tt class="docutils literal"><span class="pre">Cluster.daemon_process</span></tt>, is
retained when the Cluster starts the server process itself. This gives
the Cluster access to the result code of server process when it exits, and the
ability to redirect stderr and stdout to a parameterized file object using
subprocess features.</p>
<p>Despite its use of <cite>subprocess</cite>, Clusters can control a server process
that was <em>not</em> started by the Cluster&#8217;s <tt class="docutils literal"><span class="pre">start</span></tt> method.</p>
<div class="section" id="initializing-clusters">
<h3>Initializing Clusters<a class="headerlink" href="#initializing-clusters" title="Permalink to this headline">¶</a></h3>
<p><cite>postgresql.cluster.Cluster</cite> provides a method for initializing a
<cite>Cluster</cite>&#8216;s data directory, <tt class="docutils literal"><span class="pre">init</span></tt>. This method provides a Python interface to
the PostgreSQL <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-initdb.html">initdb</a> command.</p>
<p><tt class="docutils literal"><span class="pre">init</span></tt> is a regular method and accepts a few keyword parameters. Normally,
parameters are directly mapped to <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-initdb.html">initdb</a> command options. However, <tt class="docutils literal"><span class="pre">password</span></tt>
makes use of initdb&#8217;s capability to read the superuser&#8217;s password from a file.
To do this, a temporary file is allocated internally by the method:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="kn">from</span> <span class="nn">postgresql.installation</span> <span class="kn">import</span> <span class="n">Installation</span><span class="p">,</span> <span class="n">pg_config_dictionary</span>
<span class="kn">from</span> <span class="nn">postgresql.cluster</span> <span class="kn">import</span> <span class="n">Cluster</span>
<span class="n">pg_install</span> <span class="o">=</span> <span class="n">Installation</span><span class="p">(</span><span class="n">pg_config_dictionary</span><span class="p">(</span><span class="s">&#39;/usr/local/pgsql/bin/pg_config&#39;</span><span class="p">))</span>
<span class="n">pg_cluster</span> <span class="o">=</span> <span class="n">Cluster</span><span class="p">(</span><span class="n">pg_install</span><span class="p">,</span> <span class="s">&#39;pg_data&#39;</span><span class="p">)</span>
<span class="n">pg_cluster</span><span class="o">.</span><span class="n">init</span><span class="p">(</span><span class="n">user</span> <span class="o">=</span> <span class="s">&#39;pg&#39;</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="s">&#39;secret&#39;</span><span class="p">,</span> <span class="n">encoding</span> <span class="o">=</span> <span class="s">&#39;utf-8&#39;</span><span class="p">)</span>
</pre></div>
</div>
<p>The init method will block until the initdb command is complete. Once
initialized, the Cluster may be configured.</p>
</div>
<div class="section" id="configuring-clusters">
<h3>Configuring Clusters<a class="headerlink" href="#configuring-clusters" title="Permalink to this headline">¶</a></h3>
<p>A Cluster&#8217;s <a class="reference external" href="http://www.postgresql.org/docs/current/static/runtime-config.html">configuration file</a> can be manipulated using the
<cite>Cluster.settings</cite> mapping. The mapping&#8217;s methods will always access the
configuration file, so it may be desirable to cache repeat reads. Also, if
multiple settings are being applied, using the <tt class="docutils literal"><span class="pre">update()</span></tt> method may be
important to avoid writing the entire file multiple times:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">pg_cluster</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s">&#39;listen_addresses&#39;</span> <span class="p">:</span> <span class="s">&#39;localhost&#39;</span><span class="p">,</span> <span class="s">&#39;port&#39;</span> <span class="p">:</span> <span class="s">&#39;6543&#39;</span><span class="p">})</span>
</pre></div>
</div>
<p>Similarly, to avoid opening and reading the entire file multiple times,
<cite>Cluster.settings.getset</cite> should be used to retrieve multiple settings:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">d</span> <span class="o">=</span> <span class="n">pg_cluster</span><span class="o">.</span><span class="n">settings</span><span class="o">.</span><span class="n">getset</span><span class="p">(</span><span class="nb">set</span><span class="p">((</span><span class="s">&#39;listen_addresses&#39;</span><span class="p">,</span> <span class="s">&#39;port&#39;</span><span class="p">)))</span>
<span class="n">d</span>
<span class="p">{</span><span class="s">&#39;listen_addresses&#39;</span> <span class="p">:</span> <span class="s">&#39;localhost&#39;</span><span class="p">,</span> <span class="s">&#39;port&#39;</span> <span class="p">:</span> <span class="s">&#39;6543&#39;</span><span class="p">}</span>
</pre></div>
</div>
<p>Values contained in <tt class="docutils literal"><span class="pre">settings</span></tt> are always Python strings:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="k">assert</span> <span class="n">pg_cluster</span><span class="o">.</span><span class="n">settings</span><span class="p">[</span><span class="s">&#39;max_connections&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">__class__</span> <span class="ow">is</span> <span class="nb">str</span>
</pre></div>
</div>
<p>The <tt class="docutils literal"><span class="pre">postgresql.conf</span></tt> file is only one part of the server configuration.
Structured access and manipulation of the <a class="reference external" href="http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html">pg_hba</a> file is not
supported. Clusters only provide the file path to the <a class="reference external" href="http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html">pg_hba</a> file:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">hba</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">pg_cluster</span><span class="o">.</span><span class="n">hba_file</span><span class="p">)</span>
</pre></div>
</div>
<p>If the configuration of the Cluster is altered while the server process is
running, it may be necessary to signal the process that configuration changes
have been made. This signal can be sent using the <tt class="docutils literal"><span class="pre">Cluster.reload()</span></tt> method.
<tt class="docutils literal"><span class="pre">Cluster.reload()</span></tt> will send a SIGHUP signal to the server process. However,
not all changes to configuration settings can go into effect after calling
<tt class="docutils literal"><span class="pre">Cluster.reload()</span></tt>. In those cases, the server process will need to be
shutdown and started again.</p>
</div>
<div class="section" id="controlling-clusters">
<h3>Controlling Clusters<a class="headerlink" href="#controlling-clusters" title="Permalink to this headline">¶</a></h3>
<p>The server process of a Cluster object can be controlled with the <tt class="docutils literal"><span class="pre">start()</span></tt>,
<tt class="docutils literal"><span class="pre">stop()</span></tt>, <tt class="docutils literal"><span class="pre">shutdown()</span></tt>, <tt class="docutils literal"><span class="pre">kill()</span></tt>, and <tt class="docutils literal"><span class="pre">restart()</span></tt> methods.
These methods start the server process, signal the server process, or, in the
case of restart, a combination of the two.</p>
<p>When a Cluster starts the server process, it&#8217;s ran as a subprocess. Therefore,
if the current process exits, the server process will exit as well. <tt class="docutils literal"><span class="pre">start()</span></tt>
does <em>not</em> automatically daemonize the server process.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Under Microsoft Windows, above does not hold true. The server process
will continue running despite the exit of the parent process.</p>
</div>
<p>To terminate a server process, one of these three methods should be called:
<tt class="docutils literal"><span class="pre">stop</span></tt>, <tt class="docutils literal"><span class="pre">shutdown</span></tt>, or <tt class="docutils literal"><span class="pre">kill</span></tt>. <tt class="docutils literal"><span class="pre">stop</span></tt> is a graceful shutdown and will
<em>wait for all clients to disconnect</em> before shutting down. <tt class="docutils literal"><span class="pre">shutdown</span></tt> will
close any open connections and safely shutdown the server process.
<tt class="docutils literal"><span class="pre">kill</span></tt> will immediately terminate the server process leading to recovery upon
starting the server process again.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">Using <tt class="docutils literal"><span class="pre">kill</span></tt> may cause shared memory to be leaked.</p>
</div>
<p>Normally, <cite>Cluster.shutdown</cite> is the appropriate way to terminate a server
process.</p>
</div>
<div class="section" id="cluster-interface-points">
<h3>Cluster Interface Points<a class="headerlink" href="#cluster-interface-points" title="Permalink to this headline">¶</a></h3>
<p>Methods and properties available on <cite>postgresql.cluster.Cluster</cite> instances:</p>
<blockquote>
<dl class="docutils">
<dt><tt class="docutils literal"><span class="pre">Cluster(installation,</span> <span class="pre">data_directory)</span></tt></dt>
<dd><p class="first">Create a <cite>postgresql.cluster.Cluster</cite> object for the specified
<cite>postgresql.installation.Installation</cite>, and <tt class="docutils literal"><span class="pre">data_directory</span></tt>.</p>
<p class="last">The <tt class="docutils literal"><span class="pre">data_directory</span></tt> must be an absoluate file system path. The directory
does <em>not</em> need to exist. The <tt class="docutils literal"><span class="pre">init()</span></tt> method may later be used to create
the cluster.</p>
</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.installation</span></tt></dt>
<dd>The Cluster&#8217;s <cite>postgresql.installation.Installation</cite> instance.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.data_directory</span></tt></dt>
<dd>The absolute path to the PostgreSQL data directory.
This directory may not exist.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.init([encoding</span> <span class="pre">=</span> <span class="pre">None[,</span> <span class="pre">user</span> <span class="pre">=</span> <span class="pre">None[,</span> <span class="pre">password</span> <span class="pre">=</span> <span class="pre">None]]])</span></tt></dt>
<dd><p class="first">Run the <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-initdb.html">initdb</a> executable of the configured installation to initialize the
cluster at the configured data directory, <cite>Cluster.data_directory</cite>.</p>
<p><tt class="docutils literal"><span class="pre">encoding</span></tt> is mapped to <tt class="docutils literal"><span class="pre">-E</span></tt>, the default database encoding. By default,
the encoding is determined from the environment&#8217;s locale.</p>
<p><tt class="docutils literal"><span class="pre">user</span></tt> is mapped to <tt class="docutils literal"><span class="pre">-U</span></tt>, the database superuser name. By default, the
current user&#8217;s name.</p>
<p><tt class="docutils literal"><span class="pre">password</span></tt> is ultimately mapped to <tt class="docutils literal"><span class="pre">--pwfile</span></tt>. The argument given to the
long option is actually a path to the temporary file that holds the given
password.</p>
<p>Raises <cite>postgresql.cluster.InitDBError</cite> when <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-initdb.html">initdb</a> returns a non-zero result
code.</p>
<p class="last">Raises <cite>postgresql.cluster.ClusterInitializationError</cite> when there is no
<a class="reference external" href="http://www.postgresql.org/docs/current/static/app-initdb.html">initdb</a> in the Installation.</p>
</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.initialized()</span></tt></dt>
<dd>Whether or not the data directory exists, <em>and</em> if it looks like a PostgreSQL
data directory. Meaning, the directory must contain a <tt class="docutils literal"><span class="pre">postgresql.conf</span></tt> file
and a <tt class="docutils literal"><span class="pre">base</span></tt> directory.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.drop()</span></tt></dt>
<dd>Shutdown the Cluster&#8217;s server process and completely remove the
<cite>Cluster.data_directory</cite> from the file system.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.pid()</span></tt></dt>
<dd>The server&#8217;s process identifier as a Python <cite>int</cite>. <cite>None</cite> if there is no
server process running.
This is a method rather than a property as it may read the PID from a file
in cases where the server process was not started by the Cluster.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.start([logfile</span> <span class="pre">=</span> <span class="pre">None[,</span> <span class="pre">settings</span> <span class="pre">=</span> <span class="pre">None]])</span></tt></dt>
<dd><p class="first">Start the PostgreSQL server process for the Cluster if it is not
already running. This will execute <a class="reference external" href="http://www.postgresql.org/docs/current/static/app-postgres.html">postgres</a> as a subprocess.</p>
<p>If <tt class="docutils literal"><span class="pre">logfile</span></tt>, an opened and writable file object, is given, stderr and
stdout will be redirected to that file. By default, both stderr and stdout are
closed.</p>
<p class="last">If <tt class="docutils literal"><span class="pre">settings</span></tt> is given, the mapping or sequence of pairs will be used as
long options to the subprocess. For each item, <tt class="docutils literal"><span class="pre">--{key}={value}</span></tt> will be
given as an argument to the subprocess.</p>
</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.running()</span></tt></dt>
<dd>Whether or not the cluster&#8217;s server process is running. Returns <cite>True</cite> or
<cite>False</cite>. Even if <cite>True</cite> is returned, it does <em>not</em> mean that the server
process is ready to accept connections.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.ready_for_connections()</span></tt></dt>
<dd><p class="first">Whether or not the Cluster is ready to accept connections. Usually called
after <cite>Cluster.start</cite>.</p>
<p class="last">Returns <cite>True</cite> when the Cluster can accept connections, <cite>False</cite> when it
cannot, and <cite>None</cite> if the Cluster&#8217;s server process is not running at all.</p>
</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.wait_until_started([timeout</span> <span class="pre">=</span> <span class="pre">10[,</span> <span class="pre">delay</span> <span class="pre">=</span> <span class="pre">0.05]])</span></tt></dt>
<dd><p class="first">Blocks the process until the cluster is identified as being ready for
connections. Usually called after <tt class="docutils literal"><span class="pre">Cluster.start()</span></tt>.</p>
<p>Raises <cite>postgresql.cluster.ClusterNotRunningError</cite> if the server process is
not running at all.</p>
<p>Raises <cite>postgresql.cluster.ClusterTimeoutError</cite> if
<cite>Cluster.ready_for_connections()</cite> does not return <cite>True</cite> within the given
<cite>timeout</cite> period.</p>
<p>Raises <cite>postgresql.cluster.ClusterStartupError</cite> if the server process
terminates while polling for readiness.</p>
<p class="last"><tt class="docutils literal"><span class="pre">timeout</span></tt> and <tt class="docutils literal"><span class="pre">delay</span></tt> are both in seconds. Where <tt class="docutils literal"><span class="pre">timeout</span></tt> is the
maximum time to wait for the Cluster to be ready for connections, and
<tt class="docutils literal"><span class="pre">delay</span></tt> is the time to sleep between calls to
<cite>Cluster.ready_for_connections()</cite>.</p>
</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.stop()</span></tt></dt>
<dd>Signal the cluster to shutdown when possible. The <em>server</em> will wait for all
clients to disconnect before shutting down.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.shutdown()</span></tt></dt>
<dd>Signal the cluster to shutdown immediately. Any open client connections will
be closed.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.kill()</span></tt></dt>
<dd>Signal the absolute destruction of the server process(SIGKILL).
<em>This will require recovery when the cluster is started again.</em>
<em>Shared memory may be leaked.</em></dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.wait_until_stopped([timeout</span> <span class="pre">=</span> <span class="pre">10[,</span> <span class="pre">delay</span> <span class="pre">=</span> <span class="pre">0.05]])</span></tt></dt>
<dd><p class="first">Blocks the process until the cluster is identified as being shutdown. Usually
called after <cite>Cluster.stop</cite> or <cite>Cluster.shutdown</cite>.</p>
<p class="last">Raises <cite>postgresql.cluster.ClusterTimeoutError</cite> if
<cite>Cluster.ready_for_connections</cite> does not return <cite>None</cite> within the given
<cite>timeout</cite> period.</p>
</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.reload()</span></tt></dt>
<dd>Signal the server that it should reload its configuration files(SIGHUP).
Usually called after manipulating <cite>Cluster.settings</cite> or modifying the
contents of <cite>Cluster.hba_file</cite>.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.restart([logfile</span> <span class="pre">=</span> <span class="pre">None[,</span> <span class="pre">settings</span> <span class="pre">=</span> <span class="pre">None[,</span> <span class="pre">timeout</span> <span class="pre">=</span> <span class="pre">10]]])</span></tt></dt>
<dd><p class="first">Stop the server process, wait until it is stopped, start the server
process, and wait until it has started.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">This calls <tt class="docutils literal"><span class="pre">Cluster.stop()</span></tt>, so it will wait until clients
disconnect before starting up again.</p>
</div>
<p class="last">The <tt class="docutils literal"><span class="pre">logfile</span></tt> and <tt class="docutils literal"><span class="pre">settings</span></tt> parameters will be given to <cite>Cluster.start</cite>.
<tt class="docutils literal"><span class="pre">timeout</span></tt> will be given to <cite>Cluster.wait_until_stopped</cite> and
<cite>Cluster.wait_until_started</cite>.</p>
</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.settings</span></tt></dt>
<dd><p class="first">A <cite>collections.Mapping</cite> interface to the <tt class="docutils literal"><span class="pre">postgresql.conf</span></tt> file of the
cluster.</p>
<p class="last">A notable extension to the mapping interface is the <tt class="docutils literal"><span class="pre">getset</span></tt> method. This
method will return a dictionary object containing the settings whose names
were contained in the <cite>set</cite> object given to the method.
This method should be used when multiple settings need to be retrieved from
the configuration file.</p>
</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.hba_file</span></tt></dt>
<dd>The path to the cluster&#8217;s <a class="reference external" href="http://www.postgresql.org/docs/current/static/auth-pg-hba-conf.html">pg_hba</a> file. This property respects the HBA file
location setting in <tt class="docutils literal"><span class="pre">postgresql.conf</span></tt>. Usually, <tt class="docutils literal"><span class="pre">$PGDATA/pg_hba.conf</span></tt>.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.daemon_path</span></tt></dt>
<dd>The path to the executable to use to start the server process.</dd>
<dt><tt class="docutils literal"><span class="pre">Cluster.daemon_process</span></tt></dt>
<dd>The <cite>subprocess.Popen</cite> instance of the server process. <cite>None</cite> if the server
process was not started or was not started using the Cluster object.</dd>
</dl>
</blockquote>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Cluster Management</a><ul>
<li><a class="reference internal" href="#installations">Installations</a><ul>
<li><a class="reference internal" href="#installation-interface-points">Installation Interface Points</a></li>
</ul>
</li>
<li><a class="reference internal" href="#clusters">Clusters</a><ul>
<li><a class="reference internal" href="#initializing-clusters">Initializing Clusters</a></li>
<li><a class="reference internal" href="#configuring-clusters">Configuring Clusters</a></li>
<li><a class="reference internal" href="#controlling-clusters">Controlling Clusters</a></li>
<li><a class="reference internal" href="#cluster-interface-points">Cluster Interface Points</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="alock.html"
title="previous chapter">Advisory Locks</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="lib.html"
title="next chapter">Categories and Libraries</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/cluster.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="lib.html" title="Categories and Libraries"
>next</a> |</li>
<li class="right" >
<a href="alock.html" title="Advisory Locks"
>previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

Sorry, the diff of this file is not supported yet

+1
-4

@@ -1,5 +0,3 @@

Primary Developers:
Contributors:
James William Pye <x@jwp.name>
Contributors:
Elvis Pranskevichus

@@ -11,3 +9,2 @@ William Grzybowski [subjective paramstyle]

Further Credits

@@ -14,0 +11,0 @@ ===============

+1
-1
Metadata-Version: 1.0
Name: py-postgresql
Version: 1.0.1
Version: 1.0.2
Summary: PostgreSQL driver and tools library.

@@ -5,0 +5,0 @@ Home-page: http://python.projects.postgresql.org/

##
# copyright 2009, James William Pye
# py-postgresql root package
# http://python.projects.postgresql.org

@@ -4,0 +4,0 @@ ##

@@ -231,2 +231,4 @@ ##

2 : 'FROM_END',
3 : 'FORWARD',
4 : 'BACKWARD'
}

@@ -297,2 +299,6 @@ _direction_map = {

Absolute from end.
``3`` or ``"FORWARD"``
Relative forward.
``4`` or ``"BACKWARD"``
Relative backward.

@@ -709,6 +715,2 @@ Direction effects whence. If direction is BACKWARD, ABSOLUTE positioning

def __context__(self):
'Return self.'
return self
@abstractmethod

@@ -1118,3 +1120,3 @@ def __exit__(self, typ, obj, tb):

"""
return self.driver.connection(self)
return self.driver.connection(self, *args, **kw)

@@ -1205,8 +1207,2 @@ def __init__(self,

@abstractmethod
def __context__(self):
"""
Returns the connection object, self.
"""
class Driver(Element):

@@ -1380,5 +1376,2 @@ """

def __context__(self):
return self
@abstractmethod

@@ -1385,0 +1378,0 @@ def __exit__(self, exc, val, tb):

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .clientparameters
##

@@ -5,0 +4,0 @@ """

@@ -70,12 +70,7 @@ ##

'encoding' : '-E',
'locale' : '--locale',
'collate' : '--lc-collate',
'ctype' : '--lc-ctype',
'monetary' : '--lc-monetary',
'numeric' : '--lc-numeric',
'time' : '--lc-time',
'authentication' : '-A',
'user' : '-U',
# pwprompt is not supported.
# Cluster.init is *not* intended for interactive use.
# interactive use should be implemented by the application
# calling Cluster.init()
}

@@ -222,3 +217,3 @@

details = {
'detail' : "The installation had neither 'initdb' nor 'pg_ctl'had neither 'initdb' nor 'pg_ctl'",
'detail' : "The installation does not have 'initdb' or 'pg_ctl'.",
},

@@ -591,5 +586,5 @@ creator = self

r = self.daemon_process.returncode
if r is not None and r != 0:
if r is not None:
raise ClusterStartupError(
"postgres daemon exited with non-zero status",
"postgres daemon terminated",
details = {

@@ -596,0 +591,0 @@ 'RESULT' : r,

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .configfile
##

@@ -5,0 +4,0 @@ 'PostgreSQL configuration file parser and editor functions.'

@@ -836,3 +836,3 @@ ##

"""
cm = CopyManager(
cm = CopyManager(
StatementProducer(producer),

@@ -839,0 +839,0 @@ *[x if isinstance(x, Receiver) else StatementReceiver(x) for x in receivers]

Changes
=======
1.0.2 released on 2010-09-18
----------------------------
* Add support for DOMAINs in registered composites. (Elvis Pranskevichus)
* Properly raise StopIteration in Cursor.__next__. (Elvis Pranskevichus)
* Add Cluster Management documentation.
* Release savepoints after rolling them back.
* Fix Startup() usage for Python 3.2.
* Emit deprecation warning when 'gid' is given to xact().
* Compensate for Python3.2's ElementTree API changes.
1.0.1 released on 2010-04-24

@@ -5,0 +16,0 @@ ----------------------------

@@ -99,5 +99,5 @@ Gotchas

This exception is raised by a generic processing routine whose funcitonality
This exception is raised by a generic processing routine whose functionality
is abstract in nature, so the message is abstract as well. It essentially means
that a tuple in the sequence given to the loading method had too many or too few
items.
Changes
=======
1.0.2 released on 2010-09-18
----------------------------
* Add support for DOMAINs in registered composites. (Elvis Pranskevichus)
* Properly raise StopIteration in Cursor.__next__. (Elvis Pranskevichus)
* Add Cluster Management documentation.
* Release savepoints after rolling them back.
* Fix Startup() usage for Python 3.2.
* Emit deprecation warning when 'gid' is given to xact().
* Compensate for Python3.2's ElementTree API changes.
1.0.1 released on 2010-04-24

@@ -5,0 +16,0 @@ ----------------------------

@@ -99,5 +99,5 @@ Gotchas

This exception is raised by a generic processing routine whose funcitonality
This exception is raised by a generic processing routine whose functionality
is abstract in nature, so the message is abstract as well. It essentially means
that a tuple in the sequence given to the loading method had too many or too few
items.

@@ -22,2 +22,3 @@ py-postgresql

alock
cluster
lib

@@ -24,0 +25,0 @@ clientparameters

@@ -45,4 +45,4 @@ Categories and Libraries

<Preface>
[symbol:type:method]
<symbol statement>
[name:type:method]
<statement>
...

@@ -49,0 +49,0 @@

@@ -1,4 +0,10 @@

/**
* Sphinx stylesheet -- basic theme
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/*
* basic.css
* ~~~~~~~~~
*
* Sphinx stylesheet -- basic theme.
*
* :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/

@@ -130,2 +136,6 @@

table.indextable {
width: 100%;
}
table.indextable td {

@@ -156,2 +166,16 @@ text-align: left;

div.modindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
div.genindex-jumpbox {
border-top: 1px solid #ddd;
border-bottom: 1px solid #ddd;
margin: 1em 0 1em 0;
padding: 0.4em;
}
/* -- general body styles --------------------------------------------------- */

@@ -194,2 +218,15 @@

.align-left {
text-align: left;
}
.align-center {
clear: both;
text-align: center;
}
.align-right {
text-align: right;
}
/* -- sidebars -------------------------------------------------------------- */

@@ -258,3 +295,3 @@

table.docutils td, table.docutils th {
padding: 1px 8px 1px 0;
padding: 1px 8px 1px 5px;
border-top: 0;

@@ -279,4 +316,33 @@ border-left: 0;

table.citation {
border-left: solid 1px gray;
margin-left: 1px;
}
table.citation td {
border-bottom: none;
}
/* -- other body styles ----------------------------------------------------- */
ol.arabic {
list-style: decimal;
}
ol.loweralpha {
list-style: lower-alpha;
}
ol.upperalpha {
list-style: upper-alpha;
}
ol.lowerroman {
list-style: lower-roman;
}
ol.upperroman {
list-style: upper-roman;
}
dl {

@@ -300,3 +366,3 @@ margin-bottom: 15px;

dt:target, .highlight {
dt:target, .highlighted {
background-color: #fbe54e;

@@ -341,2 +407,26 @@ }

.line-block {
display: block;
margin-top: 1em;
margin-bottom: 1em;
}
.line-block .line-block {
margin-top: 0;
margin-bottom: 0;
margin-left: 1.5em;
}
.guilabel, .menuselection {
font-family: sans-serif;
}
.accelerator {
text-decoration: underline;
}
.classifier {
font-style: oblique;
}
/* -- code displays --------------------------------------------------------- */

@@ -382,2 +472,16 @@

.viewcode-link {
float: right;
}
.viewcode-back {
float: right;
font-family: sans-serif;
}
div.viewcode-block:target {
margin: -1px -10px;
padding: 0 10px;
}
/* -- math display ---------------------------------------------------------- */

@@ -403,3 +507,3 @@

div.bodywrapper {
margin: 0;
margin: 0 !important;
width: 100%;

@@ -406,0 +510,0 @@ }

@@ -1,4 +0,10 @@

/**
* Sphinx stylesheet -- default theme
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/*
* default.css_t
* ~~~~~~~~~~~~~
*
* Sphinx stylesheet -- default theme.
*
* :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/

@@ -110,4 +116,5 @@

/* -- body styles ----------------------------------------------------------- */
/* -- hyperlink styles ------------------------------------------------------ */
a {

@@ -118,2 +125,7 @@ color: #355f7c;

a:visited {
color: #355f7c;
text-decoration: none;
}
a:hover {

@@ -123,7 +135,6 @@ text-decoration: underline;

div.body p, div.body dd, div.body li {
text-align: justify;
line-height: 130%;
}
/* -- body styles ----------------------------------------------------------- */
div.body h1,

@@ -172,2 +183,14 @@ div.body h2,

div.admonition p {
margin-bottom: 5px;
}
div.admonition pre {
margin-bottom: 5px;
}
div.admonition ul, div.admonition ol {
margin-bottom: 5px;
}
div.note {

@@ -214,2 +237,24 @@ background-color: #eee;

font-size: 0.95em;
}
th {
background-color: #ede;
}
.warning tt {
background: #efc2c2;
}
.note tt {
background: #d6d6d6;
}
.viewcode-back {
font-family: sans-serif;
}
div.viewcode-block:target {
background-color: #f4debf;
border-top: 1px solid #ac9;
border-bottom: 1px solid #ac9;
}

@@ -1,14 +0,29 @@

/// XXX: make it cross browser
/*
* doctools.js
* ~~~~~~~~~~~
*
* Sphinx JavaScript utilties for all documentation.
*
* :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**
* select a different prefix for underscore
*/
$u = _.noConflict();
/**
* make the code below compatible with browsers without
* an installed firebug like debugger
*/
if (!window.console || !console.firebug) {
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
"profile", "profileEnd"];
window.console = {};
for (var i = 0; i < names.length; ++i)
window.console[names[i]] = function() {}
window.console[names[i]] = function() {};
}
*/

@@ -47,3 +62,3 @@ /**

return result;
}
};

@@ -60,3 +75,3 @@ /**

return false;
}
};

@@ -72,3 +87,3 @@ /**

var pos = val.toLowerCase().indexOf(text);
if (pos >= 0 && !jQuery.className.has(node.parentNode, className)) {
if (pos >= 0 && !jQuery(node.parentNode).hasClass(className)) {
var span = document.createElement("span");

@@ -85,3 +100,3 @@ span.className = className;

jQuery.each(node.childNodes, function() {
highlight(this)
highlight(this);
});

@@ -93,3 +108,3 @@ }

});
}
};

@@ -104,3 +119,3 @@ /**

this.highlightSearchWords();
this.initModIndex();
this.initIndexTable();
},

@@ -116,3 +131,3 @@

// gettext and ngettext don't access this so that the functions
// can savely bound to a different name (_ = Documentation.gettext)
// can safely bound to a different name (_ = Documentation.gettext)
gettext : function(string) {

@@ -177,3 +192,3 @@ var translated = Documentation.TRANSLATIONS[string];

$.each(terms, function() {
body.highlightText(this.toLowerCase(), 'highlight');
body.highlightText(this.toLowerCase(), 'highlighted');
});

@@ -188,9 +203,9 @@ }, 10);

/**
* init the modindex toggle buttons
* init the domain index toggle buttons
*/
initModIndex : function() {
initIndexTable : function() {
var togglers = $('img.toggler').click(function() {
var src = $(this).attr('src');
var idnum = $(this).attr('id').substr(7);
console.log($('tr.cg-' + idnum).toggle());
$('tr.cg-' + idnum).toggle();
if (src.substr(-9) == 'minus.png')

@@ -201,3 +216,3 @@ $(this).attr('src', src.substr(0, src.length-9) + 'plus.png');

}).css('display', '');
if (DOCUMENTATION_OPTIONS.COLLAPSE_MODINDEX) {
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
togglers.click();

@@ -212,3 +227,3 @@ }

$('.sidebar .this-page-menu li.highlight-link').fadeOut(300);
$('span.highlight').removeClass('highlight');
$('span.highlighted').removeClass('highlighted');
},

@@ -215,0 +230,0 @@

@@ -0,1 +1,12 @@

/*
* searchtools.js
* ~~~~~~~~~~~~~~
*
* Sphinx JavaScript utilties for the full-text search.
*
* :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
* :license: BSD, see LICENSE for details.
*
*/
/**

@@ -23,3 +34,3 @@ * helper function to return a node containing the

$.each(hlwords, function() {
rv = rv.highlightText(this, 'highlight');
rv = rv.highlightText(this, 'highlighted');
});

@@ -230,5 +241,7 @@ return rv;

/**
* Sets the index
*/
loadIndex : function(url) {
$.ajax({type: "GET", url: url, data: null, success: null,
dataType: "script", cache: true});
},
setIndex : function(index) {

@@ -292,4 +305,9 @@ var q;

query : function(query) {
// stem the searchterms and add them to the
// correct list
var stopwords = ['and', 'then', 'into', 'it', 'as', 'are', 'in',
'if', 'for', 'no', 'there', 'their', 'was', 'is',
'be', 'to', 'that', 'but', 'they', 'not', 'such',
'with', 'by', 'a', 'on', 'these', 'of', 'will',
'this', 'near', 'the', 'or', 'at'];
// stem the searchterms and add them to the correct list
var stemmer = new PorterStemmer();

@@ -302,2 +320,7 @@ var searchterms = [];

for (var i = 0; i < tmp.length; i++) {
if ($u.indexOf(stopwords, tmp[i]) != -1 || tmp[i].match(/^\d+$/) ||
tmp[i] == "") {
// skip this "word"
continue;
}
// stem the word

@@ -320,5 +343,5 @@ var word = stemmer.stemWord(tmp[i]).toLowerCase();

console.debug('SEARCH: searching for:');
console.info('required: ', searchterms);
console.info('excluded: ', excluded);
// console.debug('SEARCH: searching for:');
// console.info('required: ', searchterms);
// console.info('excluded: ', excluded);

@@ -329,9 +352,12 @@ // prepare search

var terms = this._index.terms;
var descrefs = this._index.descrefs;
var modules = this._index.modules;
var desctypes = this._index.desctypes;
var objects = this._index.objects;
var objtypes = this._index.objtypes;
var objnames = this._index.objnames;
var fileMap = {};
var files = null;
// different result priorities
var importantResults = [];
var objectResults = [];
var regularResults = [];
var unimportantResults = [];
$('#search-progress').empty();

@@ -341,16 +367,16 @@

if (object != null) {
for (var module in modules) {
if (module.indexOf(object) > -1) {
fn = modules[module];
descr = _('module, in ') + titles[fn];
objectResults.push([filenames[fn], module, '#module-'+module, descr]);
}
}
for (var prefix in descrefs) {
for (var name in descrefs[prefix]) {
for (var prefix in objects) {
for (var name in objects[prefix]) {
var fullname = (prefix ? prefix + '.' : '') + name;
if (fullname.toLowerCase().indexOf(object) > -1) {
match = descrefs[prefix][name];
descr = desctypes[match[1]] + _(', in ') + titles[match[0]];
objectResults.push([filenames[match[0]], fullname, '#'+fullname, descr]);
match = objects[prefix][name];
descr = objnames[match[1]] + _(', in ') + titles[match[0]];
// XXX the generated anchors are not generally correct
// XXX there may be custom prefixes
result = [filenames[match[0]], fullname, '#'+fullname, descr];
switch (match[2]) {
case 1: objectResults.push(result); break;
case 0: importantResults.push(result); break;
case 2: unimportantResults.push(result); break;
}
}

@@ -366,3 +392,11 @@ }

importantResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
unimportantResults.sort(function(a, b) {
return (a[1] > b[1]) ? -1 : ((a[1] < b[1]) ? 1 : 0);
});
// perform the search on the required terms

@@ -422,4 +456,5 @@ for (var i = 0; i < searchterms.length; i++) {

// combine both
var results = regularResults.concat(objectResults);
// combine all results
var results = unimportantResults.concat(regularResults)
.concat(objectResults).concat(importantResults);

@@ -444,8 +479,11 @@ // print the results

} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
$.get('_sources/' + item[0] + '.txt', function(data) {
listItem.append($.makeSearchSummary(data, searchterms, hlterms));
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
$.get(DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' +
item[0] + '.txt', function(data) {
if (data != '') {
listItem.append($.makeSearchSummary(data, searchterms, hlterms));
Search.output.append(listItem);
listItem.slideDown(5, function() {
displayNextItem();
});
}
});

@@ -452,0 +490,0 @@ } else {

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Administration &mdash; py-postgresql v1.0.1 documentation</title>
<title>Administration &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,4 +25,5 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<link rel="next" title="Driver" href="driver.html" />

@@ -42,3 +45,3 @@ <link rel="prev" title="py-postgresql" href="index.html" />

accesskey="P">previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -96,7 +99,7 @@ </div>

<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="">Administration</a><ul>
<li><a class="reference external" href="#installation">Installation</a></li>
<li><a class="reference external" href="#environment">Environment</a></li>
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Administration</a><ul>
<li><a class="reference internal" href="#installation">Installation</a></li>
<li><a class="reference internal" href="#environment">Environment</a></li>
</ul>

@@ -106,26 +109,26 @@ </li>

<h4>Previous topic</h4>
<p class="topless"><a href="index.html"
title="previous chapter">py-postgresql</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="driver.html"
title="next chapter">Driver</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/admin.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="index.html"
title="previous chapter">py-postgresql</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="driver.html"
title="next chapter">Driver</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/admin.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -147,11 +150,11 @@ </div>

>previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Advisory Locks &mdash; py-postgresql v1.0.1 documentation</title>
<title>Advisory Locks &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,5 +25,6 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="next" title="Categories and Libraries" href="lib.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<link rel="next" title="Cluster Management" href="cluster.html" />
<link rel="prev" title="Notification Management" href="notifyman.html" />

@@ -37,3 +40,3 @@ </head>

<li class="right" >
<a href="lib.html" title="Categories and Libraries"
<a href="cluster.html" title="Cluster Management"
accesskey="N">next</a> |</li>

@@ -43,3 +46,3 @@ <li class="right" >

accesskey="P">previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -65,3 +68,3 @@ </div>

<p>Advisory locks can be used by directly executing the stored procedures in the
database or by using the <tt class="xref docutils literal"><span class="pre">postgresql.alock.ALock</span></tt> subclasses, which
database or by using the <tt class="xref py py-class docutils literal"><span class="pre">postgresql.alock.ALock</span></tt> subclasses, which
provides a context manager that uses those stored procedures.</p>

@@ -72,4 +75,4 @@ <p>Currently, only two subclasses exist. Each represents the lock mode

<ul class="simple">
<li><tt class="xref docutils literal"><span class="pre">postgresql.alock.ShareLock</span></tt></li>
<li><tt class="xref docutils literal"><span class="pre">postgresql.alock.ExclusiveLock</span></tt></li>
<li><tt class="xref py py-class docutils literal"><span class="pre">postgresql.alock.ShareLock</span></tt></li>
<li><tt class="xref py py-class docutils literal"><span class="pre">postgresql.alock.ExclusiveLock</span></tt></li>
</ul>

@@ -91,3 +94,3 @@ </blockquote>

</div>
<p><tt class="xref docutils literal"><span class="pre">postgresql.alock.ALock</span></tt> is similar to <tt class="xref docutils literal"><span class="pre">threading.RLock</span></tt>; in
<p><tt class="xref py py-class docutils literal"><span class="pre">postgresql.alock.ALock</span></tt> is similar to <tt class="xref py py-class docutils literal"><span class="pre">threading.RLock</span></tt>; in
order for an ALock to be released, it must be released the number of times it

@@ -130,3 +133,3 @@ has been acquired. ALocks are associated with and survived by their session.

<h3>ALock Interface Points<a class="headerlink" href="#alock-interface-points" title="Permalink to this headline">¶</a></h3>
<p>Methods and properties available on <tt class="xref docutils literal"><span class="pre">postgresql.alock.ALock</span></tt> instances:</p>
<p>Methods and properties available on <tt class="xref py py-class docutils literal"><span class="pre">postgresql.alock.ALock</span></tt> instances:</p>
<blockquote>

@@ -164,8 +167,8 @@ <dl class="docutils">

<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="">Advisory Locks</a><ul>
<li><a class="reference external" href="#acquiring-alocks">Acquiring ALocks</a></li>
<li><a class="reference external" href="#alocks">ALocks</a><ul>
<li><a class="reference external" href="#alock-interface-points">ALock Interface Points</a></li>
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Advisory Locks</a><ul>
<li><a class="reference internal" href="#acquiring-alocks">Acquiring ALocks</a></li>
<li><a class="reference internal" href="#alocks">ALocks</a><ul>
<li><a class="reference internal" href="#alock-interface-points">ALock Interface Points</a></li>
</ul>

@@ -177,26 +180,26 @@ </li>

<h4>Previous topic</h4>
<p class="topless"><a href="notifyman.html"
title="previous chapter">Notification Management</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="lib.html"
title="next chapter">Categories and Libraries</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/alock.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="notifyman.html"
title="previous chapter">Notification Management</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="cluster.html"
title="next chapter">Cluster Management</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/alock.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -213,3 +216,3 @@ </div>

<li class="right" >
<a href="lib.html" title="Categories and Libraries"
<a href="cluster.html" title="Cluster Management"
>next</a> |</li>

@@ -219,11 +222,11 @@ <li class="right" >

>previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Commands &mdash; py-postgresql v1.0.1 documentation</title>
<title>Commands &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,4 +25,5 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<link rel="prev" title="Changes" href="changes.html" />

@@ -38,3 +41,3 @@ </head>

accesskey="P">previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -266,14 +269,14 @@ </div>

<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="">Commands</a><ul>
<li><a class="reference external" href="#postgresql-bin-pg-python">postgresql.bin.pg_python</a><ul>
<li><a class="reference external" href="#pg-python-usage">pg_python Usage</a></li>
<li><a class="reference external" href="#interactive-console-backslash-commands">Interactive Console Backslash Commands</a></li>
<li><a class="reference external" href="#pg-python-examples">pg_python Examples</a></li>
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Commands</a><ul>
<li><a class="reference internal" href="#postgresql-bin-pg-python">postgresql.bin.pg_python</a><ul>
<li><a class="reference internal" href="#pg-python-usage">pg_python Usage</a></li>
<li><a class="reference internal" href="#interactive-console-backslash-commands">Interactive Console Backslash Commands</a></li>
<li><a class="reference internal" href="#pg-python-examples">pg_python Examples</a></li>
</ul>
</li>
<li><a class="reference external" href="#postgresql-bin-pg-dotconf">postgresql.bin.pg_dotconf</a><ul>
<li><a class="reference external" href="#pg-dotconf-usage">pg_dotconf Usage</a></li>
<li><a class="reference external" href="#examples">Examples</a></li>
<li><a class="reference internal" href="#postgresql-bin-pg-dotconf">postgresql.bin.pg_dotconf</a><ul>
<li><a class="reference internal" href="#pg-dotconf-usage">pg_dotconf Usage</a></li>
<li><a class="reference internal" href="#examples">Examples</a></li>
</ul>

@@ -285,23 +288,23 @@ </li>

<h4>Previous topic</h4>
<p class="topless"><a href="changes.html"
title="previous chapter">Changes</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/bin.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="changes.html"
title="previous chapter">Changes</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/bin.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -320,11 +323,11 @@ </div>

>previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Changes &mdash; py-postgresql v1.0.1 documentation</title>
<title>Changes &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,4 +25,5 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<link rel="next" title="Commands" href="bin.html" />

@@ -42,3 +45,3 @@ <link rel="prev" title="Gotchas" href="gotchas.html" />

accesskey="P">previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -54,2 +57,16 @@ </div>

<h1>Changes<a class="headerlink" href="#changes" title="Permalink to this headline">¶</a></h1>
<div class="section" id="released-on-2010-09-18">
<h2>1.0.2 released on 2010-09-18<a class="headerlink" href="#released-on-2010-09-18" title="Permalink to this headline">¶</a></h2>
<blockquote>
<ul class="simple">
<li>Add support for DOMAINs in registered composites. (Elvis Pranskevichus)</li>
<li>Properly raise StopIteration in Cursor.__next__. (Elvis Pranskevichus)</li>
<li>Add Cluster Management documentation.</li>
<li>Release savepoints after rolling them back.</li>
<li>Fix Startup() usage for Python 3.2.</li>
<li>Emit deprecation warning when &#8216;gid&#8217; is given to xact().</li>
<li>Compensate for Python3.2&#8217;s ElementTree API changes.</li>
</ul>
</blockquote>
</div>
<div class="section" id="released-on-2010-04-24">

@@ -120,7 +137,8 @@ <h2>1.0.1 released on 2010-04-24<a class="headerlink" href="#released-on-2010-04-24" title="Permalink to this headline">¶</a></h2>

<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="">Changes</a><ul>
<li><a class="reference external" href="#released-on-2010-04-24">1.0.1 released on 2010-04-24</a></li>
<li><a class="reference external" href="#released-on-2010-03-27">1.0 released on 2010-03-27</a></li>
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Changes</a><ul>
<li><a class="reference internal" href="#released-on-2010-09-18">1.0.2 released on 2010-09-18</a></li>
<li><a class="reference internal" href="#released-on-2010-04-24">1.0.1 released on 2010-04-24</a></li>
<li><a class="reference internal" href="#released-on-2010-03-27">1.0 released on 2010-03-27</a></li>
</ul>

@@ -130,26 +148,26 @@ </li>

<h4>Previous topic</h4>
<p class="topless"><a href="gotchas.html"
title="previous chapter">Gotchas</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="bin.html"
title="next chapter">Commands</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/changes.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="gotchas.html"
title="previous chapter">Gotchas</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="bin.html"
title="next chapter">Commands</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/changes.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -171,11 +189,11 @@ </div>

>previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Client Parameters &mdash; py-postgresql v1.0.1 documentation</title>
<title>Client Parameters &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,4 +25,5 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<link rel="next" title="Gotchas" href="gotchas.html" />

@@ -42,3 +45,3 @@ <link rel="prev" title="Categories and Libraries" href="lib.html" />

accesskey="P">previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -362,13 +365,13 @@ </div>

<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="">Client Parameters</a><ul>
<li><a class="reference external" href="#collecting-parameters">Collecting Parameters</a><ul>
<li><a class="reference external" href="#postgresql-clientparameters-collect"><cite>postgresql.clientparameters.collect</cite></a></li>
<li><a class="reference external" href="#postgresql-clientparameters-resolve-password"><cite>postgresql.clientparameters.resolve_password</cite></a></li>
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Client Parameters</a><ul>
<li><a class="reference internal" href="#collecting-parameters">Collecting Parameters</a><ul>
<li><a class="reference internal" href="#postgresql-clientparameters-collect"><cite>postgresql.clientparameters.collect</cite></a></li>
<li><a class="reference internal" href="#postgresql-clientparameters-resolve-password"><cite>postgresql.clientparameters.resolve_password</cite></a></li>
</ul>
</li>
<li><a class="reference external" href="#defaults">Defaults</a></li>
<li><a class="reference external" href="#postgresql-environment-variables">PostgreSQL Environment Variables</a></li>
<li><a class="reference external" href="#postgresql-password-file">PostgreSQL Password File</a></li>
<li><a class="reference internal" href="#defaults">Defaults</a></li>
<li><a class="reference internal" href="#postgresql-environment-variables">PostgreSQL Environment Variables</a></li>
<li><a class="reference internal" href="#postgresql-password-file">PostgreSQL Password File</a></li>
</ul>

@@ -378,26 +381,26 @@ </li>

<h4>Previous topic</h4>
<p class="topless"><a href="lib.html"
title="previous chapter">Categories and Libraries</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="gotchas.html"
title="next chapter">Gotchas</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/clientparameters.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="lib.html"
title="previous chapter">Categories and Libraries</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="gotchas.html"
title="next chapter">Gotchas</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/clientparameters.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -419,11 +422,11 @@ </div>

>previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Copy Management &mdash; py-postgresql v1.0.1 documentation</title>
<title>Copy Management &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,4 +25,5 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<link rel="next" title="Notification Management" href="notifyman.html" />

@@ -42,3 +45,3 @@ <link rel="prev" title="Driver" href="driver.html" />

accesskey="P">previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -354,17 +357,17 @@ </div>

<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="">Copy Management</a><ul>
<li><a class="reference external" href="#copy-managers">Copy Managers</a><ul>
<li><a class="reference external" href="#manager-interface-points">Manager Interface Points</a></li>
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Copy Management</a><ul>
<li><a class="reference internal" href="#copy-managers">Copy Managers</a><ul>
<li><a class="reference internal" href="#manager-interface-points">Manager Interface Points</a></li>
</ul>
</li>
<li><a class="reference external" href="#faults">Faults</a><ul>
<li><a class="reference external" href="#receiver-faults">Receiver Faults</a><ul>
<li><a class="reference external" href="#receiverfault-properties">ReceiverFault Properties</a></li>
<li><a class="reference external" href="#reconciliation">Reconciliation</a></li>
<li><a class="reference internal" href="#faults">Faults</a><ul>
<li><a class="reference internal" href="#receiver-faults">Receiver Faults</a><ul>
<li><a class="reference internal" href="#receiverfault-properties">ReceiverFault Properties</a></li>
<li><a class="reference internal" href="#reconciliation">Reconciliation</a></li>
</ul>
</li>
<li><a class="reference external" href="#producer-faults">Producer Faults</a><ul>
<li><a class="reference external" href="#producerfault-properties">ProducerFault Properties</a></li>
<li><a class="reference internal" href="#producer-faults">Producer Faults</a><ul>
<li><a class="reference internal" href="#producerfault-properties">ProducerFault Properties</a></li>
</ul>

@@ -374,9 +377,9 @@ </li>

</li>
<li><a class="reference external" href="#failures">Failures</a><ul>
<li><a class="reference external" href="#copyfail-properties">CopyFail Properties</a></li>
<li><a class="reference internal" href="#failures">Failures</a><ul>
<li><a class="reference internal" href="#copyfail-properties">CopyFail Properties</a></li>
</ul>
</li>
<li><a class="reference external" href="#producers">Producers</a></li>
<li><a class="reference external" href="#receivers">Receivers</a></li>
<li><a class="reference external" href="#terminology">Terminology</a></li>
<li><a class="reference internal" href="#producers">Producers</a></li>
<li><a class="reference internal" href="#receivers">Receivers</a></li>
<li><a class="reference internal" href="#terminology">Terminology</a></li>
</ul>

@@ -386,26 +389,26 @@ </li>

<h4>Previous topic</h4>
<p class="topless"><a href="driver.html"
title="previous chapter">Driver</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="notifyman.html"
title="next chapter">Notification Management</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/copyman.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="driver.html"
title="previous chapter">Driver</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="notifyman.html"
title="next chapter">Notification Management</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/copyman.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -427,11 +430,11 @@ </div>

>previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Index &mdash; py-postgresql v1.0.1 documentation</title>
<title>Index &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,4 +25,5 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
</head>

@@ -32,5 +35,5 @@ <body>

<li class="right" style="margin-right: 10px">
<a href="" title="General Index"
<a href="#" title="General Index"
accesskey="I">index</a></li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -47,9 +50,7 @@ </div>

<div class="genindex-jumpbox">
</div>
<hr />
</div>

@@ -63,15 +64,15 @@ </div>

<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -85,13 +86,13 @@ </div>

<li class="right" style="margin-right: 10px">
<a href="" title="General Index"
<a href="#" title="General Index"
>index</a></li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Gotchas &mdash; py-postgresql v1.0.1 documentation</title>
<title>Gotchas &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,4 +25,5 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<link rel="next" title="Changes" href="changes.html" />

@@ -42,3 +45,3 @@ <link rel="prev" title="Client Parameters" href="clientparameters.html" />

accesskey="P">previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -117,3 +120,3 @@ </div>

This reduces the number of messages generated by most connections dramatically.</p>
<p>If further customization is needed, the <a class="reference external" href="driver.html#db-messages"><em>Database Messages</em></a> section has
<p>If further customization is needed, the <a class="reference internal" href="driver.html#db-messages"><em>Database Messages</em></a> section has
information on overriding the default action taken with database messages.</p>

@@ -129,3 +132,3 @@ </div>

</div>
<p>This exception is raised by a generic processing routine whose funcitonality
<p>This exception is raised by a generic processing routine whose functionality
is abstract in nature, so the message is abstract as well. It essentially means

@@ -143,11 +146,11 @@ that a tuple in the sequence given to the loading method had too many or too few

<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="">Gotchas</a><ul>
<li><a class="reference external" href="#client-encoding-setting-should-be-altered-carefully"><cite>client_encoding</cite> setting should be altered carefully</a></li>
<li><a class="reference external" href="#the-user-and-password-is-correct-but-it-does-not-work-when-using-postgresql-driver">The user and password is correct, but it does not work when using <cite>postgresql.driver</cite></a></li>
<li><a class="reference external" href="#backslash-characters-are-being-treated-literally">Backslash characters are being treated literally</a></li>
<li><a class="reference external" href="#types-without-binary-support-in-the-driver-are-unsupported-in-arrays-and-records">Types without binary support in the driver are unsupported in arrays and records</a></li>
<li><a class="reference external" href="#notices-warnings-and-other-messages-are-too-verbose">NOTICEs, WARNINGs, and other messages are too verbose</a></li>
<li><a class="reference external" href="#strange-typeerror-using-load-rows-or-load-chunks">Strange TypeError using load_rows() or load_chunks()</a></li>
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Gotchas</a><ul>
<li><a class="reference internal" href="#client-encoding-setting-should-be-altered-carefully"><cite>client_encoding</cite> setting should be altered carefully</a></li>
<li><a class="reference internal" href="#the-user-and-password-is-correct-but-it-does-not-work-when-using-postgresql-driver">The user and password is correct, but it does not work when using <cite>postgresql.driver</cite></a></li>
<li><a class="reference internal" href="#backslash-characters-are-being-treated-literally">Backslash characters are being treated literally</a></li>
<li><a class="reference internal" href="#types-without-binary-support-in-the-driver-are-unsupported-in-arrays-and-records">Types without binary support in the driver are unsupported in arrays and records</a></li>
<li><a class="reference internal" href="#notices-warnings-and-other-messages-are-too-verbose">NOTICEs, WARNINGs, and other messages are too verbose</a></li>
<li><a class="reference internal" href="#strange-typeerror-using-load-rows-or-load-chunks">Strange TypeError using load_rows() or load_chunks()</a></li>
</ul>

@@ -157,26 +160,26 @@ </li>

<h4>Previous topic</h4>
<p class="topless"><a href="clientparameters.html"
title="previous chapter">Client Parameters</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="changes.html"
title="next chapter">Changes</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/gotchas.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="clientparameters.html"
title="previous chapter">Client Parameters</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="changes.html"
title="next chapter">Changes</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/gotchas.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -198,11 +201,11 @@ </div>

>previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>py-postgresql &mdash; py-postgresql v1.0.1 documentation</title>
<title>py-postgresql &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,4 +25,5 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="#" />
<link rel="next" title="Administration" href="admin.html" />

@@ -38,3 +41,3 @@ </head>

accesskey="N">next</a> |</li>
<li><a href="">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="#">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -57,81 +60,90 @@ </div>

<h2>Contents<a class="headerlink" href="#contents" title="Permalink to this headline">¶</a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference external" href="admin.html">Administration</a><ul>
<li class="toctree-l2"><a class="reference external" href="admin.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference external" href="admin.html#environment">Environment</a></li>
<li class="toctree-l1"><a class="reference internal" href="admin.html">Administration</a><ul>
<li class="toctree-l2"><a class="reference internal" href="admin.html#installation">Installation</a></li>
<li class="toctree-l2"><a class="reference internal" href="admin.html#environment">Environment</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="driver.html">Driver</a><ul>
<li class="toctree-l2"><a class="reference external" href="driver.html#establishing-a-connection">Establishing a Connection</a></li>
<li class="toctree-l2"><a class="reference external" href="driver.html#connections">Connections</a></li>
<li class="toctree-l2"><a class="reference external" href="driver.html#prepared-statements">Prepared Statements</a></li>
<li class="toctree-l2"><a class="reference external" href="driver.html#cursors">Cursors</a></li>
<li class="toctree-l2"><a class="reference external" href="driver.html#rows">Rows</a></li>
<li class="toctree-l2"><a class="reference external" href="driver.html#stored-procedures">Stored Procedures</a></li>
<li class="toctree-l2"><a class="reference external" href="driver.html#transactions">Transactions</a></li>
<li class="toctree-l2"><a class="reference external" href="driver.html#settings">Settings</a></li>
<li class="toctree-l2"><a class="reference external" href="driver.html#type-support">Type Support</a></li>
<li class="toctree-l2"><a class="reference external" href="driver.html#database-messages">Database Messages</a></li>
<li class="toctree-l1"><a class="reference internal" href="driver.html">Driver</a><ul>
<li class="toctree-l2"><a class="reference internal" href="driver.html#establishing-a-connection">Establishing a Connection</a></li>
<li class="toctree-l2"><a class="reference internal" href="driver.html#connections">Connections</a></li>
<li class="toctree-l2"><a class="reference internal" href="driver.html#prepared-statements">Prepared Statements</a></li>
<li class="toctree-l2"><a class="reference internal" href="driver.html#cursors">Cursors</a></li>
<li class="toctree-l2"><a class="reference internal" href="driver.html#rows">Rows</a></li>
<li class="toctree-l2"><a class="reference internal" href="driver.html#stored-procedures">Stored Procedures</a></li>
<li class="toctree-l2"><a class="reference internal" href="driver.html#transactions">Transactions</a></li>
<li class="toctree-l2"><a class="reference internal" href="driver.html#settings">Settings</a></li>
<li class="toctree-l2"><a class="reference internal" href="driver.html#type-support">Type Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="driver.html#database-messages">Database Messages</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="copyman.html">Copy Management</a><ul>
<li class="toctree-l2"><a class="reference external" href="copyman.html#copy-managers">Copy Managers</a></li>
<li class="toctree-l2"><a class="reference external" href="copyman.html#faults">Faults</a></li>
<li class="toctree-l2"><a class="reference external" href="copyman.html#failures">Failures</a></li>
<li class="toctree-l2"><a class="reference external" href="copyman.html#producers">Producers</a></li>
<li class="toctree-l2"><a class="reference external" href="copyman.html#receivers">Receivers</a></li>
<li class="toctree-l2"><a class="reference external" href="copyman.html#terminology">Terminology</a></li>
<li class="toctree-l1"><a class="reference internal" href="copyman.html">Copy Management</a><ul>
<li class="toctree-l2"><a class="reference internal" href="copyman.html#copy-managers">Copy Managers</a></li>
<li class="toctree-l2"><a class="reference internal" href="copyman.html#faults">Faults</a></li>
<li class="toctree-l2"><a class="reference internal" href="copyman.html#failures">Failures</a></li>
<li class="toctree-l2"><a class="reference internal" href="copyman.html#producers">Producers</a></li>
<li class="toctree-l2"><a class="reference internal" href="copyman.html#receivers">Receivers</a></li>
<li class="toctree-l2"><a class="reference internal" href="copyman.html#terminology">Terminology</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="notifyman.html">Notification Management</a><ul>
<li class="toctree-l2"><a class="reference external" href="notifyman.html#listening-on-a-single-connection">Listening on a Single Connection</a></li>
<li class="toctree-l2"><a class="reference external" href="notifyman.html#listening-on-multiple-connections">Listening on Multiple Connections</a></li>
<li class="toctree-l2"><a class="reference external" href="notifyman.html#notification-managers">Notification Managers</a></li>
<li class="toctree-l1"><a class="reference internal" href="notifyman.html">Notification Management</a><ul>
<li class="toctree-l2"><a class="reference internal" href="notifyman.html#listening-on-a-single-connection">Listening on a Single Connection</a></li>
<li class="toctree-l2"><a class="reference internal" href="notifyman.html#listening-on-multiple-connections">Listening on Multiple Connections</a></li>
<li class="toctree-l2"><a class="reference internal" href="notifyman.html#notification-managers">Notification Managers</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="alock.html">Advisory Locks</a><ul>
<li class="toctree-l2"><a class="reference external" href="alock.html#acquiring-alocks">Acquiring ALocks</a></li>
<li class="toctree-l2"><a class="reference external" href="alock.html#alocks">ALocks</a></li>
<li class="toctree-l1"><a class="reference internal" href="alock.html">Advisory Locks</a><ul>
<li class="toctree-l2"><a class="reference internal" href="alock.html#acquiring-alocks">Acquiring ALocks</a></li>
<li class="toctree-l2"><a class="reference internal" href="alock.html#alocks">ALocks</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="lib.html">Categories and Libraries</a><ul>
<li class="toctree-l2"><a class="reference external" href="lib.html#writing-libraries">Writing Libraries</a></li>
<li class="toctree-l2"><a class="reference external" href="lib.html#using-libraries">Using Libraries</a></li>
<li class="toctree-l2"><a class="reference external" href="lib.html#symbol-types">Symbol Types</a></li>
<li class="toctree-l2"><a class="reference external" href="lib.html#symbol-execution-methods">Symbol Execution Methods</a></li>
<li class="toctree-l2"><a class="reference external" href="lib.html#reference-symbols">Reference Symbols</a></li>
<li class="toctree-l2"><a class="reference external" href="lib.html#distributing-and-usage">Distributing and Usage</a></li>
<li class="toctree-l2"><a class="reference external" href="lib.html#audience-and-motivation">Audience and Motivation</a></li>
<li class="toctree-l2"><a class="reference external" href="lib.html#terminology">Terminology</a></li>
<li class="toctree-l1"><a class="reference internal" href="cluster.html">Cluster Management</a><ul>
<li class="toctree-l2"><a class="reference internal" href="cluster.html#installations">Installations</a></li>
<li class="toctree-l2"><a class="reference internal" href="cluster.html#clusters">Clusters</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="clientparameters.html">Client Parameters</a><ul>
<li class="toctree-l2"><a class="reference external" href="clientparameters.html#collecting-parameters">Collecting Parameters</a></li>
<li class="toctree-l2"><a class="reference external" href="clientparameters.html#defaults">Defaults</a></li>
<li class="toctree-l2"><a class="reference external" href="clientparameters.html#postgresql-environment-variables">PostgreSQL Environment Variables</a></li>
<li class="toctree-l2"><a class="reference external" href="clientparameters.html#postgresql-password-file">PostgreSQL Password File</a></li>
<li class="toctree-l1"><a class="reference internal" href="lib.html">Categories and Libraries</a><ul>
<li class="toctree-l2"><a class="reference internal" href="lib.html#writing-libraries">Writing Libraries</a></li>
<li class="toctree-l2"><a class="reference internal" href="lib.html#using-libraries">Using Libraries</a></li>
<li class="toctree-l2"><a class="reference internal" href="lib.html#symbol-types">Symbol Types</a></li>
<li class="toctree-l2"><a class="reference internal" href="lib.html#symbol-execution-methods">Symbol Execution Methods</a></li>
<li class="toctree-l2"><a class="reference internal" href="lib.html#reference-symbols">Reference Symbols</a></li>
<li class="toctree-l2"><a class="reference internal" href="lib.html#distributing-and-usage">Distributing and Usage</a></li>
<li class="toctree-l2"><a class="reference internal" href="lib.html#audience-and-motivation">Audience and Motivation</a></li>
<li class="toctree-l2"><a class="reference internal" href="lib.html#terminology">Terminology</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="gotchas.html">Gotchas</a><ul>
<li class="toctree-l2"><a class="reference external" href="gotchas.html#client-encoding-setting-should-be-altered-carefully"><cite>client_encoding</cite> setting should be altered carefully</a></li>
<li class="toctree-l2"><a class="reference external" href="gotchas.html#the-user-and-password-is-correct-but-it-does-not-work-when-using-postgresql-driver">The user and password is correct, but it does not work when using <cite>postgresql.driver</cite></a></li>
<li class="toctree-l2"><a class="reference external" href="gotchas.html#backslash-characters-are-being-treated-literally">Backslash characters are being treated literally</a></li>
<li class="toctree-l2"><a class="reference external" href="gotchas.html#types-without-binary-support-in-the-driver-are-unsupported-in-arrays-and-records">Types without binary support in the driver are unsupported in arrays and records</a></li>
<li class="toctree-l2"><a class="reference external" href="gotchas.html#notices-warnings-and-other-messages-are-too-verbose">NOTICEs, WARNINGs, and other messages are too verbose</a></li>
<li class="toctree-l2"><a class="reference external" href="gotchas.html#strange-typeerror-using-load-rows-or-load-chunks">Strange TypeError using load_rows() or load_chunks()</a></li>
<li class="toctree-l1"><a class="reference internal" href="clientparameters.html">Client Parameters</a><ul>
<li class="toctree-l2"><a class="reference internal" href="clientparameters.html#collecting-parameters">Collecting Parameters</a></li>
<li class="toctree-l2"><a class="reference internal" href="clientparameters.html#defaults">Defaults</a></li>
<li class="toctree-l2"><a class="reference internal" href="clientparameters.html#postgresql-environment-variables">PostgreSQL Environment Variables</a></li>
<li class="toctree-l2"><a class="reference internal" href="clientparameters.html#postgresql-password-file">PostgreSQL Password File</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference external" href="changes.html">Changes</a><ul>
<li class="toctree-l2"><a class="reference external" href="changes.html#released-on-2010-04-24">1.0.1 released on 2010-04-24</a></li>
<li class="toctree-l2"><a class="reference external" href="changes.html#released-on-2010-03-27">1.0 released on 2010-03-27</a></li>
<li class="toctree-l1"><a class="reference internal" href="gotchas.html">Gotchas</a><ul>
<li class="toctree-l2"><a class="reference internal" href="gotchas.html#client-encoding-setting-should-be-altered-carefully"><cite>client_encoding</cite> setting should be altered carefully</a></li>
<li class="toctree-l2"><a class="reference internal" href="gotchas.html#the-user-and-password-is-correct-but-it-does-not-work-when-using-postgresql-driver">The user and password is correct, but it does not work when using <cite>postgresql.driver</cite></a></li>
<li class="toctree-l2"><a class="reference internal" href="gotchas.html#backslash-characters-are-being-treated-literally">Backslash characters are being treated literally</a></li>
<li class="toctree-l2"><a class="reference internal" href="gotchas.html#types-without-binary-support-in-the-driver-are-unsupported-in-arrays-and-records">Types without binary support in the driver are unsupported in arrays and records</a></li>
<li class="toctree-l2"><a class="reference internal" href="gotchas.html#notices-warnings-and-other-messages-are-too-verbose">NOTICEs, WARNINGs, and other messages are too verbose</a></li>
<li class="toctree-l2"><a class="reference internal" href="gotchas.html#strange-typeerror-using-load-rows-or-load-chunks">Strange TypeError using load_rows() or load_chunks()</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="changes.html">Changes</a><ul>
<li class="toctree-l2"><a class="reference internal" href="changes.html#released-on-2010-09-18">1.0.2 released on 2010-09-18</a></li>
<li class="toctree-l2"><a class="reference internal" href="changes.html#released-on-2010-04-24">1.0.1 released on 2010-04-24</a></li>
<li class="toctree-l2"><a class="reference internal" href="changes.html#released-on-2010-03-27">1.0 released on 2010-03-27</a></li>
</ul>
</li>
</ul>
</div>
</div>
<div class="section" id="reference">
<h2>Reference<a class="headerlink" href="#reference" title="Permalink to this headline">¶</a></h2>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference external" href="bin.html">Commands</a><ul>
<li class="toctree-l2"><a class="reference external" href="bin.html#postgresql-bin-pg-python">postgresql.bin.pg_python</a></li>
<li class="toctree-l2"><a class="reference external" href="bin.html#postgresql-bin-pg-dotconf">postgresql.bin.pg_dotconf</a></li>
<li class="toctree-l1"><a class="reference internal" href="bin.html">Commands</a><ul>
<li class="toctree-l2"><a class="reference internal" href="bin.html#postgresql-bin-pg-python">postgresql.bin.pg_python</a></li>
<li class="toctree-l2"><a class="reference internal" href="bin.html#postgresql-bin-pg-dotconf">postgresql.bin.pg_dotconf</a></li>
</ul>

@@ -141,2 +153,3 @@ </li>

</div>
</div>
<div class="section" id="sample-code">

@@ -171,3 +184,3 @@ <h2>Sample Code<a class="headerlink" href="#sample-code" title="Permalink to this headline">¶</a></h2>

illustrated above are available on DB-API connections.</p>
<p>See <a class="reference external" href="driver.html#db-interface"><em>Driver</em></a> for more information.</p>
<p>See <a class="reference internal" href="driver.html#db-interface"><em>Driver</em></a> for more information.</p>
</div>

@@ -182,12 +195,12 @@ </div>

<div class="sphinxsidebarwrapper">
<h3><a href="">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="">py-postgresql</a><ul>
<li><a class="reference external" href="#contents">Contents</a><ul>
<h3><a href="#">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">py-postgresql</a><ul>
<li><a class="reference internal" href="#contents">Contents</a><ul>
</ul>
</li>
<li><a class="reference external" href="#reference">Reference</a><ul>
<li><a class="reference internal" href="#reference">Reference</a><ul>
</ul>
</li>
<li><a class="reference external" href="#sample-code">Sample Code</a></li>
<li><a class="reference internal" href="#sample-code">Sample Code</a></li>
</ul>

@@ -197,23 +210,23 @@ </li>

<h4>Next topic</h4>
<p class="topless"><a href="admin.html"
title="next chapter">Administration</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/index.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h4>Next topic</h4>
<p class="topless"><a href="admin.html"
title="next chapter">Administration</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/index.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -232,11 +245,11 @@ </div>

>next</a> |</li>
<li><a href="">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="#">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Categories and Libraries &mdash; py-postgresql v1.0.1 documentation</title>
<title>Categories and Libraries &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,6 +25,7 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<link rel="next" title="Client Parameters" href="clientparameters.html" />
<link rel="prev" title="Advisory Locks" href="alock.html" />
<link rel="prev" title="Cluster Management" href="cluster.html" />
</head>

@@ -40,5 +43,5 @@ <body>

<li class="right" >
<a href="alock.html" title="Advisory Locks"
<a href="cluster.html" title="Cluster Management"
accesskey="P">previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -58,3 +61,3 @@ </div>

<p class="first admonition-title">Note</p>
<p class="last">First-time users are encouraged to read the <a class="reference internal" href="#audience-and-motivation">Audience and Motivation</a>
<p class="last">First-time users are encouraged to read the <a class="reference external" href="#audience-and-motivation">Audience and Motivation</a>
section first.</p>

@@ -88,4 +91,4 @@ </div>

<div class="highlight-python"><pre>&lt;Preface&gt;
[symbol:type:method]
&lt;symbol statement&gt;
[name:type:method]
&lt;statement&gt;
...</pre>

@@ -111,3 +114,3 @@ </div>

<p>The second component in the section identifier is the symbol type. All Symbol
types are listed in <a class="reference internal" href="#symbol-types">Symbol Types</a>. This can be
types are listed in <a class="reference external" href="#symbol-types">Symbol Types</a>. This can be
used to specify what the section&#8217;s contents are or when to bind the

@@ -144,3 +147,3 @@ symbol:</p>

of the statement and ultimately what is returned when the Symbol is called at
runtime. All the execution methods are listed in <a class="reference internal" href="#symbol-execution-methods">Symbol Execution Methods</a>.</p>
runtime. All the execution methods are listed in <a class="reference external" href="#symbol-execution-methods">Symbol Execution Methods</a>.</p>
<p>The default execution method is the default execution method of

@@ -538,16 +541,16 @@ <cite>postgresql.api.PreparedStatement</cite> objects; return the entire result set in a

<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="">Categories and Libraries</a><ul>
<li><a class="reference external" href="#writing-libraries">Writing Libraries</a></li>
<li><a class="reference external" href="#using-libraries">Using Libraries</a><ul>
<li><a class="reference external" href="#categories">Categories</a></li>
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Categories and Libraries</a><ul>
<li><a class="reference internal" href="#writing-libraries">Writing Libraries</a></li>
<li><a class="reference internal" href="#using-libraries">Using Libraries</a><ul>
<li><a class="reference internal" href="#categories">Categories</a></li>
</ul>
</li>
<li><a class="reference external" href="#symbol-types">Symbol Types</a></li>
<li><a class="reference external" href="#symbol-execution-methods">Symbol Execution Methods</a></li>
<li><a class="reference external" href="#reference-symbols">Reference Symbols</a></li>
<li><a class="reference external" href="#distributing-and-usage">Distributing and Usage</a></li>
<li><a class="reference external" href="#audience-and-motivation">Audience and Motivation</a></li>
<li><a class="reference external" href="#terminology">Terminology</a></li>
<li><a class="reference internal" href="#symbol-types">Symbol Types</a></li>
<li><a class="reference internal" href="#symbol-execution-methods">Symbol Execution Methods</a></li>
<li><a class="reference internal" href="#reference-symbols">Reference Symbols</a></li>
<li><a class="reference internal" href="#distributing-and-usage">Distributing and Usage</a></li>
<li><a class="reference internal" href="#audience-and-motivation">Audience and Motivation</a></li>
<li><a class="reference internal" href="#terminology">Terminology</a></li>
</ul>

@@ -557,26 +560,26 @@ </li>

<h4>Previous topic</h4>
<p class="topless"><a href="alock.html"
title="previous chapter">Advisory Locks</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="clientparameters.html"
title="next chapter">Client Parameters</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/lib.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="cluster.html"
title="previous chapter">Cluster Management</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="clientparameters.html"
title="next chapter">Client Parameters</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/lib.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -596,13 +599,13 @@ </div>

<li class="right" >
<a href="alock.html" title="Advisory Locks"
<a href="cluster.html" title="Cluster Management"
>previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Notification Management &mdash; py-postgresql v1.0.1 documentation</title>
<title>Notification Management &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,4 +25,5 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<link rel="next" title="Advisory Locks" href="alock.html" />

@@ -42,3 +45,3 @@ <link rel="prev" title="Copy Management" href="copyman.html" />

accesskey="P">previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -284,12 +287,12 @@ </div>

<div class="sphinxsidebarwrapper">
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference external" href="">Notification Management</a><ul>
<li><a class="reference external" href="#listening-on-a-single-connection">Listening on a Single Connection</a></li>
<li><a class="reference external" href="#listening-on-multiple-connections">Listening on Multiple Connections</a></li>
<li><a class="reference external" href="#notification-managers">Notification Managers</a><ul>
<li><a class="reference external" href="#notification-manager-constructors">Notification Manager Constructors</a></li>
<li><a class="reference external" href="#notification-manager-interface-points">Notification Manager Interface Points</a></li>
<li><a class="reference external" href="#zero-timeout">Zero Timeout</a></li>
<li><a class="reference external" href="#summary-of-characteristics">Summary of Characteristics</a></li>
<h3><a href="index.html">Table Of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Notification Management</a><ul>
<li><a class="reference internal" href="#listening-on-a-single-connection">Listening on a Single Connection</a></li>
<li><a class="reference internal" href="#listening-on-multiple-connections">Listening on Multiple Connections</a></li>
<li><a class="reference internal" href="#notification-managers">Notification Managers</a><ul>
<li><a class="reference internal" href="#notification-manager-constructors">Notification Manager Constructors</a></li>
<li><a class="reference internal" href="#notification-manager-interface-points">Notification Manager Interface Points</a></li>
<li><a class="reference internal" href="#zero-timeout">Zero Timeout</a></li>
<li><a class="reference internal" href="#summary-of-characteristics">Summary of Characteristics</a></li>
</ul>

@@ -301,26 +304,26 @@ </li>

<h4>Previous topic</h4>
<p class="topless"><a href="copyman.html"
title="previous chapter">Copy Management</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="alock.html"
title="next chapter">Advisory Locks</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/notifyman.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
<h4>Previous topic</h4>
<p class="topless"><a href="copyman.html"
title="previous chapter">Copy Management</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="alock.html"
title="next chapter">Advisory Locks</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/notifyman.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>

@@ -342,11 +345,11 @@ </div>

>previous</a> |</li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
</body>
</html>

@@ -0,1 +1,3 @@

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"

@@ -8,3 +10,3 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<title>Search &mdash; py-postgresql v1.0.1 documentation</title>
<title>Search &mdash; py-postgresql v1.0.2 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />

@@ -15,4 +17,4 @@ <link rel="stylesheet" href="_static/pygments.css" type="text/css" />

URL_ROOT: '',
VERSION: '1.0.1',
COLLAPSE_MODINDEX: false,
VERSION: '1.0.2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',

@@ -23,5 +25,11 @@ HAS_SOURCE: true

<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/searchtools.js"></script>
<link rel="top" title="py-postgresql v1.0.1 documentation" href="index.html" />
<link rel="top" title="py-postgresql v1.0.2 documentation" href="index.html" />
<script type="text/javascript">
jQuery(function() { Search.loadIndex("searchindex.js"); });
</script>
</head>

@@ -35,3 +43,3 @@ <body>

accesskey="I">index</a></li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>

@@ -84,14 +92,11 @@ </div>

>index</a></li>
<li><a href="index.html">py-postgresql v1.0.1 documentation</a> &raquo;</li>
<li><a href="index.html">py-postgresql v1.0.2 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Apr 24, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3.
&copy; Copyright 2010, James William Pye &lt;x@jwp.name&gt;.
Last updated on Sep 18, 2010.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 1.0b2.
</div>
<script type="text/javascript" src="searchindex.js"></script>
</body>
</html>

@@ -1,1 +0,1 @@

Search.setIndex({desctypes:{},terms:{elvi:9,prefix:[10,2],iternotifi:[7,6],dirnam:2,sslkeyfil:[6,10],statement_from_id:6,whose:[5,8,6,10,2],typeerror:[5,3],"const":2,under:6,connectiondoesnotexisterror:6,everi:[],jack:6,appar:6,pg_src_user:10,direct:[0,2,6,7,8,9],timetzoid:6,second:[6,2],even:6,insid:[7,8,6],libpq:[6,10],receive_stmt:8,"new":[0,1,7,6,5,8],python_context:0,metadata:[6,2],never:[7,5,6,2],here:[7,6,2],generate_seri:[8,6,2],path:[0,4,6,10,2],ssearch_path:10,interpret:0,precis:8,datetim:6,permit:[],portabl:2,pq_iri:0,user_typ:2,unix:[0,9,6],total:6,describ:[1,8,6,2],would:[5,6,2],overhead:6,typo:9,recommend:[6,2],type:[1,2,3,6,5,9],until:[7,1,5,6,8],notif:[7,3,6],notic:[5,3,6,9],warn:[0,1,3,7,6,5,8,9,10],"__iter__":[7,8],quote_liter:5,relai:6,hold:[7,6,2],unpack:[5,9,6],must:[0,1,2,6,7,8,10],join:2,restor:6,setup:[4,2],work:[4,3,5,6,2],root:[4,6,10],overrid:[5,9,6,10],alock:[1,9,3],give:[3,6],synchron:1,indic:[1,6,10,2],unavail:6,want:10,set_config:6,end:[7,6],quot:[5,6],wrap_socket:6,myappdb:2,how:[1,6,2],recoveri:[],env:[],negoti:5,connect_timeout:[6,10],updat:[7,3,6,10,2],recogn:[5,6],timedelta:6,after:[0,2,4,6,8,10],befor:[7,6,10,2],parameter_typ:6,attempt:[5,10],third:2,credenti:6,perform:[1,8,6,9],environ:[0,3,6,4,10],enter:6,exclus:[7,1,6],first:[0,1,2,6,9,10],order:[1,2,5,6,7,8],oper:[1,2,4,6,8,9],composit:[5,6],feedback:9,over:[8,6],becaus:2,smallint:6,fit:6,fix:[5,9],better:6,them:[7,8,6,10,2],thei:[1,2,6,7,9,10],fragment:2,get_one_twic:2,"break":[7,8],interrupt:[9,6],sample_copi:6,get_some_row:2,accommod:6,timeout:[7,8,6],each:[7,1,8,6,2],debug:6,oblig:6,mean:[0,5,2,6,7,8,10],my_prompt:10,extract:[4,6,10],goe:[8,6],dst:6,num_byt:8,content:[3,10,2],column_typ:6,channel_and_payload:6,reverse_c:6,situat:[7,5,8,6,2],infin:9,free:[6,2],standard:[0,5,6,10],driver_set:6,clientparamet:10,traceback:6,filter:6,unabl:5,confus:[5,6],rang:[6,2],from_iter:2,wast:6,hook:6,unlik:[8,6],mingw:[],mutablemap:6,primari:[3,6,10,2],gogichashvili:9,sometim:[6,2],yesterdai:6,t1980:6,too:[5,3,8],t1985:6,john:[3,6],listen:[7,3,6],consol:0,tool:2,channel1:6,somewhat:2,termin:[7,6],target:[0,2,6,5,8,9],keyword:[7,6,10,2],provid:[0,1,2,3,5,6,7,8,9,10],project:[4,3,9,2],python31:[],ran:[8,6],mind:6,rau:9,increment:1,"__main__":0,seen:[0,6],seek:6,dozen:2,cursor_from_id:6,latter:[6,2],transmit:8,prompt_titl:10,simplifi:[7,6,2],usernam:[0,6,10],object:[0,1,2,7,6,5,8,10],deleg:2,refsym:2,regular:[0,7],upperbound:9,phase:5,typ:[1,8],prematur:[],don:[9,6,10],simplif:7,doc:[10,2],doe:[5,3,8,6,2],declar:[6,2],byteaoid:6,neg:6,dou:9,python_main:0,unlisten:[7,6],random:6,syntax:6,advisori:[1,9,3],pkg:2,identifi:[5,1,8,6,2],involv:8,absolut:6,pg_src_host:10,layout:2,acquir:[1,6,2,3],"__enter__":[1,8,6],receiverfault:8,ldap:6,"__call__":[5,6],likewis:6,stop:[5,6],report:[9,6],ever:5,"public":[6,10],bad:[7,9],emp:[3,6],exclusivelock:1,datatyp:6,result:[6,10,2],respons:7,fail:[7,5,8,6,9],best:[0,5,8],subject:[5,2,6,7,8,10],preparedstat:2,hopefulli:5,databas:[0,1,2,3,5,6,7,10],iri:[0,6,10],default_pg_sysconfdir:10,simplest:6,drawn:5,attribut:[5,2,6,7,8,9],inabl:[],extend:[3,6,2],extens:[6,2],functool:6,intervaloid:6,ilf:2,fault:[3,8],howev:[1,2,4,7,6,5,8,10],against:[0,6,2],facet:6,logic:9,com:[9,6],tone:6,pg_driver:6,trust:6,assum:[8,6],union:6,three:[6,2],been:[0,1,2,6,7,8,10],much:[5,1],total_row:8,basic:2,quickli:[8,6],pgclientencod:10,ani:[1,2,5,6,7,8,10],craft:6,listening_channel:6,inhibit:6,ident:2,servic:[7,9,6,10],properti:[1,8,6,2],aid:2,conf:[0,10],get_numb:2,sever:6,numericoid:6,receiv:[0,3,6,7,8,9,10],make:[0,5,8,6,2],transpar:6,complex:8,complet:[0,8,6],rais:[1,3,5,6,7,8,9],auser:6,employee_nam:6,undesir:[6,10,2],thu:7,inherit:[9,6,10,2],client:[0,3,5,6,10],thi:[0,1,2,4,5,6,7,8,10],programm:[5,3,9,2],settimeout:7,protocol:[0,1,2,7,6,5,9],statement_id:6,just:[4,6],pranskevichu:9,bandwidth:6,copyout:6,yet:5,languag:[6,2],easi:5,interfer:1,had:[5,6],sym_from_libthat:2,els:[8,2],save:6,procedure_id:6,opt:4,applic:[7,1,6,10,2],get_user_info_v2:2,measur:6,specif:[0,7,8,6,2],arbitrari:[7,8,6,2],manual:2,pghost:10,timetz:6,unnecessari:[6,2],timeoid:6,right:7,old:6,deal:[6,10],stopiter:[7,8,6],intern:[7,9,6],transmiss:[0,6],cooper:1,subclass:1,condit:[7,8,2],foo:6,localhost:[0,6,10],varcharoid:6,core:3,client_port:6,scrollabl:[6,2],chapter:[0,4,6,2],postgresql:[0,1,2,3,4,5,6,7,8,9,10],surround:6,simul:6,commit:6,produc:[3,2,6,7,8,10],libthi:2,"float":6,encod:[5,6],bound:[6,2],resili:7,server_set:6,wrap:6,wai:[0,5,2,6,7,8],support:[1,2,3,6,5,9],transform:[5,6,2],avail:[0,1,3,6,7,8],editor:2,jane:3,pgport:10,interv:[7,6],form:[0,8,6,10,2],offer:[7,1,8,6],forc:6,datestyl:10,pgpass:[6,10],pgpassword:10,"true":[7,1,6,10,2],absent:6,pg_stat_act:6,producer_fault:8,absenc:6,fundament:2,sql_parameter_typ:6,emit:[7,5,8,6],classif:2,featur:[1,2,3,5,6,7,8],alongsid:[1,2],"abstract":[5,1,6,2],t62000:6,exist:[1,8,6,2],check:[7,6],when:[0,1,2,3,5,6,7,8,10],db_notifi:7,test:6,presum:6,roll:6,relat:5,intend:[8,9],asterisk:10,payload_data:6,consid:[5,6,2],sql:[0,7,6,2],grief:6,longer:[8,6],furthermor:[5,6],ignor:0,time:[0,1,7,6,2],backward:6,appdata:10,consum:[7,8,6],signific:[8,6],row:[3,2,6,5,8,9],depend:[6,10,2],decim:6,decis:5,isinst:8,sourc:[8,6,10,2],"__exit__":[1,8,6],string:[0,5,6,10,2],iteratorproduc:8,table2_oid:1,guc:[5,6],administr:[4,3],level:[1,6,5,8,9,10],valentin:9,reconcil:8,iter:[7,8,6,2],item:[5,6],unsupport:[5,3],compens:8,cost:[8,6],infailedtransactionerror:6,port:[0,6,10],methodcal:6,current:[1,6,10],axel:9,deriv:6,gener:[5,8,6,2],modif:0,address:6,wait:[7,5,6,9],srfcomposit:6,my_oper:2,queue:7,semant:6,regardless:[1,6,10],extra:[6,2],modul:[0,3,2,6,8,9,10],prefer:[0,6],marker:2,instal:[4,3,6,10,2],different_channel:6,memori:[6,2],mst:6,connector:[5,6,2],employee_dob:6,the_cursor_id:6,msg:6,scope:6,claus:6,ip6:6,templat:6,ip4:6,suffoc:6,prepar:[0,3,2,7,6,5,8,9],timestamptz:[9,6],cat:[0,2],descriptor:6,can:[1,2,5,6,7,8,9,10],www:10,imped:9,purpos:[5,6,10,2],timestampoid:6,unanticip:6,backslash:[0,3,5],critic:6,pq3:6,occur:[7,8,6,10],alwai:[0,1,5,6],multipl:[0,1,2,3,6,7,9],write:[0,3,6,2],usenam:6,getset:6,parameter:6,emp_salai:3,map:[8,6,10,2],product:0,clone:6,"__next__":[7,8,6],usabl:6,float4oid:6,mai:[1,2,5,6,7,8,10],data:[7,5,8,6,2],practic:7,johnson:6,stdin:[8,6,2],explicit:[5,1,6,10],channels_and_payload:6,inform:[3,2,6,5,8,9,10],"switch":5,cannot:[6,2],callabl:[8,6],db1:7,xmloid:6,still:[7,9,2],dynam:2,conjunct:6,platform:10,window:10,main:6,non:[5,10,2],savepoint:6,initi:[5,8,6,2],col1:6,now:[7,2],discuss:[0,6,2],sc_number:6,term:[8,2],name:[0,9,6,2],untrap:8,drop:[9,6],win32:10,reintroduc:8,ters:6,compil:[],domain:[9,6],individu:[7,6,2],continu:[7,8],borrow:6,year:6,happen:5,shown:6,ct_thi:6,internet:6,correct:[5,3,8,6,9],earlier:6,client_encod:[5,3,10],runtimeerror:1,argv:10,orm:2,org:[10,2],"byte":[5,8,6],setupscript:2,care:[6,2],jwp:[0,10],frequenc:7,sysconfdir:10,wrong:5,recov:[7,8],place:[7,6,10,2],lambda:6,origin:[9,8,6],update_r:8,directli:[0,1,2,7,6,5,8],onc:[7,6,2],arrai:[5,3,6,9],acquisit:1,"long":[7,6],symmetri:6,oppos:6,open:[3,6,9,2,10],given:[0,1,2,7,6,5,8,10],convent:2,defaultpars:10,caught:6,sslkei:10,conveni:[3,6,9],provinc:2,copi:[3,8,6,9,2],specifi:[0,7,6,10,2],than:[6,10],denot:2,pgsysconfdir:10,bpcharoid:6,posix:[],were:[5,1,8,6],posit:[6,10],"__context__":8,pre:6,rowset:6,argument:[0,6,10],getpass:[6,10],deliv:7,recover:[8,6],squar:6,destroi:6,libpath:2,note:[8,6,10,2],ideal:[5,6],take:[0,5,8,6,2],noth:3,channel:[7,6],begin:[7,6],sure:6,trace:[0,9,6],normal:[2,4,6,7,8,10],buffer:6,standardpars:10,strip_and_int:6,pair:[7,1,6,2],libthat:2,quantiti:6,transaction_isol:6,runtim:[6,2],environ_prefix:10,gracefulli:7,pq_trace:0,serializ:6,show:[0,6],copyfail:8,xml:6,onli:[1,2,5,6,7,8,10],explicitli:[7,6],loading_t:8,transact:[0,3,6],activ:[7,6],state:[8,6,10,2],dict:6,another_set:0,variou:[6,10],get:[7,6],ssl:[0,6],tailor:9,requir:[0,5,2,6,7,8],fileno:6,uniqueerror:6,dramat:5,yield:[7,8,6],where:[1,2,3,6,7,8],summari:7,atabl:6,concern:7,timeit:0,detect:6,enough:[5,6],between:6,"import":[0,1,2,3,6,7,8,10],likeabl:2,cycl:8,come:[5,2,6,7,8,10],audienc:[3,2],inconsist:5,improv:[3,9],inspir:0,table1_oid:1,colon:2,poll:7,ultim:[5,8,6,2],invert:6,sslmode:[0,6,10],resolut:[6,10],andrew:3,repres:[7,1,6],hasattr:2,default_statistics_target:6,cast:[5,6],invok:[6,2],outcom:6,invoc:[0,6],advantag:[0,6,2],stdout:[0,8,6],destin:8,cluster:0,"__init__":2,develop:[],author:[9,10],same:[7,1,6,2],binari:[5,3,6,9],html:[10,2],cursor_id:6,document:[5,9,2],exhaust:[7,8,6,2],finish:8,closest:6,oid:6,driver:[5,3,6,9,10],mani:[5,8,6,2],appropri:[7,1,5,6],choos:[5,1],without:[0,3,5,7,6],model:6,execut:[0,1,2,3,4,6,5,8,9,10],loaderror:9,aspect:4,lib2:2,lib1:2,speed:9,hint:[0,5,6,2],pg_sy:2,except:[7,5,8,6,2],param:[0,10,2],codec:5,no_default:10,earli:[7,5],libn:2,read:[0,5,6,2],emp_nam:3,world:6,whitespac:2,integ:6,server:[0,5,6],benefit:8,either:[7,8,6],output:[0,6],manag:[1,2,3,4,6,7,8,9,10],fulfil:2,pg_python:[0,3,9,10],definit:[6,2],exit:[0,8,6],ddl:2,notabl:[7,6,10],refer:[3,2,6,7,8,9],garbag:[7,6],intnam:6,broken:[7,8],aquir:1,src:6,srf:6,copymanag:8,textoid:6,act:[0,6],table_nam:6,backend_id:[7,6],routin:[5,6],effici:6,lastli:1,filter_notic:6,terminolog:[3,8,2],surviv:1,done_listen:7,employee_salari:6,strip:6,mingw32:[],aren:6,receiver_fault:8,start:[8,6],compliant:5,interfac:[1,2,3,5,6,7,8,9,10],ipv4:6,lot:6,ipv6:6,dbapi20:[3,6],total_byt:8,tupl:[7,5,8,6,9],pg_parameter_typ:6,tripl:[7,6],possibl:[7,5,6],get_emp_with_salary_lt:3,sslcrtfile:[6,10],creat:[1,2,3,5,6,7,8,9],certain:6,strongli:6,file:[0,3,2,4,6,9,10],fill:6,again:[7,1,8,6,2],field:10,valid:5,you:[4,10],lowerbound:9,sequenc:[5,1,6,2],symbol:[3,9,2],timestamptzoid:6,reduc:5,directori:[4,10,2],descript:[6,10],hello:6,num_messag:8,potenti:[5,6],escap:6,unset:6,represent:[9,6],all:[0,1,2,3,5,6,7,10],illustr:[7,3,6,2],lack:2,abil:6,follow:[0,8,6,10,2],disk:2,chain:2,program:0,those:[1,2,5,6,7,8,10],introduc:5,"case":[1,2,5,6,7,8,9,10],liter:[5,3,6,10],straightforward:2,fals:[1,6,10],util:10,failur:[7,3,8,6,10],veri:[0,6,2],strang:[5,3],contrib_hstor:6,list:[2,6,7,8,9,10],adjust:[5,6],default_port:10,small:6,dimens:6,zero:[7,9],design:[7,6,2],stripxx:6,pass:[5,6,2],further:[5,9,6,10,2],whenc:6,what:[6,2],sub:9,section:[5,6,2],abl:6,delet:2,version:[0,4,6,9],method:[1,2,3,5,6,7,8,9],contrast:6,full:6,variat:2,proper:5,rlock:1,raise_emp:3,excess:6,modifi:[0,6],another_generate_series_exampl:2,valu:[0,3,2,6,5,9,10],search:2,prior:[7,6,2],amount:[7,8,6],pick:7,action:[5,6],introductori:2,via:[7,5,8,6],shorthand:6,pgdatabas:10,primit:1,deprec:9,inappropri:6,establish:[0,3,6,10,2],select:[0,1,2,3,6,8],distinct:6,two:[1,6],formul:6,taken:[5,6,10],more:[3,2,6,5,8,10],desir:[0,3,5,6,9],particular:[4,6],known:6,cach:7,psql:[0,10],none:[0,2,6,7,8,10],remain:[7,6],archiv:4,del:7,def:[6,2],prompt:[0,10],share:[1,6],accept:[6,10],t72000:6,my_operation_proc:2,cours:[3,6,10],newlin:10,secur:6,rather:[8,6,2],anoth:[5,1,8,6,2],snippet:10,simpl:[0,4,6,10,2],vlad:9,resourc:[1,2],referenc:[0,8,6,10,2],variant:10,reflect:6,associ:[1,8,6],circumst:[7,6],hstore:[9,6],susan:3,onto:2,caus:[1,2,5,6,7,8,9,10],help:0,statementreceiv:8,held:1,through:6,paramet:[0,3,2,7,6,5,10],rintavarustu:9,style:2,call:[8,6,10,2],pend:7,alter:[5,3,6,9,2],finer:6,good:[7,2],"return":[0,1,2,6,7,8,9,10],timestamp:[9,6],pginstal:[4,10],compound:6,funciton:5,instruct:[6,10],authent:6,easili:[5,6,2],achiev:6,alreadi:[6,2],die:7,found:2,sql_statements_str:6,procedur:[1,6,2,3],connect:[0,1,2,3,5,6,7,8,9,10],beyond:8,event:[7,8,6],transform_row:6,publish:6,payload:[7,6],sym_from_libthi:2,print:[3,6],difficulti:5,postgr:[6,10],advanc:[6,2],asc:6,base:[7,6,10,2],a_db_us:10,prefac:2,thread:[1,6,9],assign:6,major:6,channel_nam:6,notifi:[7,9,6],number:[0,1,5,6,8],done:[5,6,2],build_ext:[],differ:[6,10],script:[0,4,9,10,2],interact:[0,6],construct:[8,6,2],statement:[0,3,2,7,6,5,8,9],twenti:6,store:[1,6,3],option:[0,7,6,10,2],relationship:6,"_my_oper":2,sql_statement_str:6,pars:[6,10],pgpassfil:[6,10],kind:6,celementtre:6,remot:6,remov:[7,8,9,10],str:[5,6],well:[0,7,5,6],packag:[4,6,2],dedic:3,"null":9,built:[0,2],equival:[6,2],self:2,also:[0,5,6,7,8,10],send_stmt:8,employee_hire_d:6,distribut:[3,2],filesystem:0,ttree:6,sslrootcrlfil:[6,10],original_except:8,clear:7,cover:[4,2],setof:6,part:[9,8,6],newvalu:0,latest:6,carefulli:[5,3,6],session:1,fine:6,notifyman:7,indexerror:6,ct_that:6,factor:[8,6,2],ampersand:2,sslrootcrtfil:[6,10],"__file__":2,express:[0,5,6],load_chunk:[5,3,6,2],fastest:6,crt:10,int4oid:6,common:[1,6,2],bytea:6,certif:6,forego:6,set:[0,3,2,7,6,5,8,9,10],creator:0,startup:[5,6],mutabl:6,see:[3,6,10,2],arg:6,close:[0,1,7,6,9],inconveni:2,someth:6,altern:8,signatur:[6,2],numer:[3,6],sole:6,libnam:2,ctest:6,both:[7,1,8,6,2],last:6,delimit:6,tempor:9,package_data:2,context:[0,1,8,6,2],default_host:10,pg_column_typ:6,load:[5,6,2],standard_conforming_str:6,simpli:[6,10],point:[1,2,4,6,7,8,10],instanti:[1,6,2],littl:8,throughout:2,backend:[7,1,6],user_id:2,due:[6,10],empti:[7,9,6,10,2],secret:[6,10],great:6,append:[0,7,2],func:6,demand:6,pg_param:10,look:[5,6,2],batch:6,durat:7,"while":[7,8,6,2],abov:[1,2,3,6,7,10],error:[0,5,6,2],loop:[0,7,8],pack:[5,6],propag:6,readi:[8,6,2],itself:[6,2],emp_salari:3,around:6,conflict:[1,6],higher:[5,6],usec:0,optim:5,wherea:[9,6],sym:2,temporari:0,user:[0,3,2,7,6,5,9,10],remove_us:2,recent:6,safe:[7,1,8,6],lib:[9,2],discourag:[6,2],xx9301423:6,entri:[4,6,10,2],chardata:6,itemgett:2,pg_servic:10,pggeqo:10,other_symbol:2,subsequ:[6,10,2],build:[4,10,2],bin:[0,3,9,4,10],varchar:6,format:[5,6,2],characterist:7,formal:2,success:[1,6],signal:[7,8],resolv:[10,2],collect:[3,2,6,7,8,10],"boolean":1,pgconnect_timeout:10,specfici:6,often:[7,9,8,6],creation:[6,10,2],some:[1,2,3,5,6,7,10],back:[0,5,6],global:2,sampl:[3,6],from_end:6,server_vers:6,backend_start:6,chunksiz:9,per:0,debra:6,substitut:2,larg:[6,2],proc:[0,6,2],run:[0,8,6,2],copy_emps_in:6,step:[8,6],that_pkei:6,kerberos4_realm:10,most:[5,6,10,2],materi:2,optpars:10,idl:[7,6],block:[1,8,6,2],postgersql:6,primarili:[8,6,10],irrit:9,within:[0,1,8,6,2],pgtz:10,ensur:[],purposefulli:[6,10],fictiti:2,textual:6,custom:[5,2],includ:[0,2,4,6,7,10],forward:6,parse_arg:10,properli:[5,9,6,10],int4:[1,6,2],line:[0,8,6,10,2],int8:[1,8,6],info:6,utf:5,sql_column_typ:6,consist:[7,5,8,6,10],geqo:10,caller:6,highlight:[5,2],similar:[1,6,2],element3:9,constant:[6,2],gettimeout:7,reconcili:8,parser:2,doesn:6,get_some_chunk:2,"char":6,make_emp:3,incomplet:8,guarante:[7,6],titl:10,sequenti:6,invalid:[0,7,6],pguser:[6,10],bracket:6,transport:6,statementproduc:8,pg_config:4,gigabyt:8,infrequ:2,pgdata:10,typeio:9,far:[5,6],name2:6,emps_by_ag:6,scroll:6,getaddrinfo:6,code:[0,3,7,6,2],partial:[6,10],pgsslmode:10,queri:[5,9,6,2],setting_name_to_com:0,friendli:6,send:[5,6],sens:5,fatal:[5,8,6],sent:[7,5,6],rollback:6,volum:5,implicitli:6,relev:7,inclin:6,pgkrbsrvname:10,"try":[8,6],barbara:6,impli:6,natur:[5,8,6,2],client_address:6,index:6,access:[1,2,6,7,8,9],len:6,bodi:6,implicit:6,convert:6,convers:6,larger:6,typio:[5,9],chang:[0,3,2,4,6,5,8,9,10],revoc:6,employe:[3,6],configur:[0,4,7,6,2],appli:[0,6],approxim:7,expect:[7,5,6,10,2],api:[0,3,2,6,7,8,9],getus:[6,10],from:[0,1,2,3,5,6,7,8,9,10],stream:[5,6,2],commun:6,doubl:6,next:[7,8,6],few:[5,6,2],usr:4,tzinfo:6,"transient":2,callreceiv:8,name3:6,name1:6,rare:[7,8],interven:6,augment:[0,10],alia:1,annot:2,abort:[8,6],fetch:[6,2],control:[8,6],process:[0,7,2,4,6,5,8,10],lock:[1,9,3],tax:2,high:[5,9,8,6,10],tag:9,t1968:6,serial:6,filepath:0,pgdatestyl:10,instead:[0,9,6,2],panic:[5,6],overridden:5,watch:7,resolve_password:10,unidentifi:[],alloc:8,essenti:[5,2],bind:[9,6,2],dateoid:6,correspond:6,element:[5,9,6],issu:[5,6],allow:[0,1,2,7,6,5,9,10],index_from_kei:6,pg_service_fil:10,move:[8,6],infrastructur:6,therefor:[5,10,2],fitti:6,greater:[7,6],python:[0,3,2,4,6,5,8,10],auto:6,facilit:6,server_encod:[5,6],strive:3,msghook:6,anyth:6,edit:0,prompt_password:10,trap:[8,6],tracer:9,chunk:[9,8,6,2],"static":10,special:[9,2],out:[7,6,2],variabl:[0,3,6,4,10],get_on:2,parametererror:6,categori:[3,6,2],suitabl:6,rel:[6,2],client_min_messag:[5,9,6],manipul:6,dictionari:[8,6,10],releas:[1,6,9,3],promptli:[7,6,2],could:1,keep:2,length:6,crl:10,outsid:[6,2],retain:2,timezon:[6,10],suffix:2,qualiti:6,echo:0,date:[9,6],facil:[6,2],suffic:10,unknown:6,apply_tax:6,system:[10,2],messag:[0,3,7,6,5,8,9],pg_:9,"final":[8,6,2],prone:2,gotcha:[5,3],exactli:6,notificationmanag:[7,9],take_out_trash:7,mcguffer:6,structur:6,charact:[5,3,6,2],msec:0,have:[1,2,6,7,9,10],tabl:[1,8,6,10,3],need:[1,2,4,7,6,5,8,10],builtin:[9,8,6],name_of_databas:3,which:[7,1,8,6,2],singl:[0,1,2,3,6,7,9,10],unless:[7,6],writelin:6,search_path:[6,10],rformat:9,t1970:6,kerberos5_servic:10,"class":[1,2,6,7,8,9],url:6,request:[5,6,10],recvsiz:9,determin:[6,2],fact:6,dbn:7,text:[5,3,6,2],syntaxerror:6,verbos:[5,3,6,9],bring:5,load_row:[5,3,6,2],trivial:[10,2],redirect:0,locat:[0,3,6,10],int8oid:6,forev:7,should:[3,2,4,7,6,5,8,10],suppos:6,local:[7,6,2],a_statement_id:6,contribut:6,notat:6,regularli:[8,6],unknown_failur:8,increas:[9,2],db2:7,enabl:[5,6],organ:2,pgrealm:10,"default":[1,2,3,4,5,6,7,9,10],copyin:6,contain:[4,6,2],view:6,the_real_sekrat:6,conform:6,knowledg:[6,2],packet:6,sqlexec:0,op_arg2:2,op_arg1:2,wire:5,pattern:2,boundari:[8,6],tend:10,realign:8,written:6,kei:[3,8,6,10],isol:[6,2],itertool:2,"2pc":9,entir:[5,8,6,10,2],pgsslkei:10,addit:[7,6,10],etc:[9,6,10],instanc:[1,2,5,6,7,8,10],grain:6,uncaught:6,comment:0,respect:2,quit:6,solitari:6,addition:[8,6,2],pg_lib:2,libdir:2,compon:[6,2],treat:[5,3,6,2],immedi:[7,8,2],producerfault:8,assert:[7,2],togeth:[6,2],present:[6,10],cursor:[5,3,6,2],defin:[1,6,9,2],faulted_receiv:8,parsed_opt:10,float8oid:6,bigint:[6,2],motiv:[3,2],substanti:3,handl:[7,9,8,6],difficult:5,http:[10,2],hostnam:[6,10],version_info:6,interrog:[6,10],upon:0,effect:[4,6,10,2],column_nam:6,col0:6,xact:[0,3,8,6],distutil:[4,2],reintroduct:8,exampl:[0,1,7,6,2],command:[0,3,2,6,7,9,10],interpol:6,undefin:6,usual:[6,2],"25p02":6,less:6,get_user_info:2,smith:6,etre:6,add:[7,9,8,6,2],lookup:10,match:10,py_build_extens:[],piec:6,password:[0,3,5,6,10],python3:[0,4,9],insert:[3,6,2],int2oid:6,like:[0,1,2,6,5,10],lost:6,necessari:[5,2,6,7,8,10],lose:7,page:6,revers:6,twitter:9,pg_dotconf:[0,3,9],user_type_id:2,home:10,librari:[5,3,9,2],mkemp:6,separ:[10,2],lead:6,"__contains__":6,avoid:[0,5,8,6],leav:10,mode:[0,1,6],preload:2,encourag:2,usag:[0,3,8,6,2],host:[0,3,6,10],although:7,about:[5,8,6,2],actual:[8,6],socket:[0,9,8,6],column:[5,6,2],constructor:[7,1,6],discard:[7,6,2],disabl:[0,6,10],own:9,automat:[5,6,2],guard:6,copyman:8,mere:[7,1,6,2],leverag:[7,6],processor:5,val:[0,1,8],transfer:[5,8,6],product_cod:6,information_schema:6,"function":[1,2,6,5,8,10],interest:[6,2],unexpect:10,for_rabbit:7,keyerror:6,stdcat:2,bug:9,count:[1,6,9,2],succe:6,made:[5,6,10,2],temp:[8,6],whether:[1,6,2],sc_text:6,dml:[6,2],displai:[6,10],asynchron:[7,6],record:[5,3,8,6,9],key_or_index:6,limit:6,otherwis:6,problem:[5,8,6],"int":[7,6,2],dure:[7,5,8,6],pid:[7,6],implement:[5,9,8,6,2],ini:2,probabl:5,detail:[6,10,2],other:[1,2,3,4,5,6,7,10],bool:6,futur:6,storedprocedur:6,repeat:2,genexpr:6,sharelock:1,rule:6,key_from_index:6,portion:6},titles:["Commands","Advisory Locks","Categories and Libraries","py-postgresql","Administration","Gotchas","Driver","Notification Management","Copy Management","Changes","Client Parameters"],modules:{},descrefs:{},filenames:["bin","alock","lib","index","admin","gotchas","driver","notifyman","copyman","changes","clientparameters"]})
Search.setIndex({objects:{},terms:{elvi:10,prefix:[8,11,2],iternotifi:[7,6],sleep:8,dirnam:2,sslkeyfil:[6,11],statement_from_id:6,whose:[2,6,5,8,9,11],typeerror:[5,3],"const":2,under:[8,6],connectiondoesnotexisterror:6,everi:[],jack:6,appar:6,pg_src_user:11,direct:[0,2,6,7,9,10],timetzoid:6,second:[8,6,2],even:[8,6],insid:[7,9,6],libpq:[6,11],receive_stmt:9,"new":[0,1,7,6,5,9],python_context:0,metadata:[6,2],psql_:[],createdb:8,never:[7,5,6,2],here:[7,6,2],generate_seri:[9,6,2],path:[0,2,4,6,8,11],ssearch_path:11,interpret:0,precis:9,datetim:6,permit:[],portabl:2,pq_iri:0,user_typ:2,unix:[0,10,6],total:6,pg90:8,describ:[1,9,6,2],would:[5,6,2],call:[8,9,6,11,2],typo:10,recommend:[6,2],type:[1,2,3,6,5,10],until:[1,5,6,7,8,9],notif:[7,3,6],notic:[5,3,6,10],warn:[0,1,3,7,6,5,9,10,11],"__iter__":[7,9],quote_liter:5,relai:6,hold:[7,8,6,2],unpack:[5,10,6],must:[0,1,2,6,7,8,9,11],join:2,restor:6,setup:[4,2],work:[4,3,5,6,2],root:[4,6,11],overrid:[5,10,6,11],alock:[1,10,3],give:[3,6,8],synchron:1,indic:[1,6,11,2,8],unavail:6,want:11,set_config:6,end:[7,6],quot:[5,6],wrap_socket:6,myappdb:2,how:[1,6,2],recoveri:8,env:[],negoti:5,connect_timeout:[6,11],bindir:8,updat:[3,2,6,7,8,11],recogn:[5,6],timedelta:6,after:[0,2,4,6,8,9,10,11],superus:8,befor:[7,8,6,11,2],parameter_typ:6,attempt:[5,11],third:2,credenti:6,perform:[1,9,6,10],includedir:8,environ:[0,3,4,6,8,11],enter:6,exclus:[7,1,6],first:[0,1,2,6,10,11],order:[1,2,5,6,7,8,9],oper:[1,2,4,6,9,10],composit:[5,10,6],feedback:10,over:[8,9,6],becaus:2,smallint:6,fit:6,fix:[5,10],"__class__":8,better:6,absolu:8,them:[2,6,7,9,10,11],thei:[1,2,6,7,8,10,11],fragment:2,get_one_twic:2,"break":[7,9],interrupt:[10,6],sample_copi:6,get_some_row:2,accommod:6,timeout:[7,8,9,6],each:[1,2,6,7,8,9],clustertimeouterror:8,oblig:6,mean:[0,5,2,6,7,8,9,11],pg_restor:8,my_prompt:11,extract:[4,8,6,11],goe:[8,9,6],dst:6,num_byt:9,content:[3,11,2,8],column_typ:6,channel_and_payload:6,reverse_c:6,situat:[7,5,9,6,2],infin:10,free:[6,2],standard:[0,5,6,11,8],driver_set:6,clientparamet:11,sigkil:8,traceback:6,filter:6,unabl:5,confus:[5,6],rang:[6,2],from_iter:2,wast:6,hook:6,unlik:[9,6],mingw:[],mutablemap:6,primari:[3,6,11,2],gogichashvili:10,sometim:[6,2],yesterdai:6,t1980:6,too:[5,3,9],t1985:6,similarli:8,john:[3,6],listen:[7,3,6],consol:0,tool:[8,2],pkgincludedir:8,channel1:6,somewhat:2,pg_:10,target:[0,2,6,5,9,10],keyword:[7,8,6,11,2],provid:[0,1,2,3,5,6,7,8,9,10,11],project:[4,3,10,2],python31:[],ran:[8,9,6],mind:6,rau:10,increment:1,"__main__":0,seen:[0,6],seek:6,dozen:2,cursor_from_id:6,latter:[6,2],transmit:9,prompt_titl:11,simplifi:[7,6,2],sharedir:8,usernam:[0,6,11],object:[0,1,2,7,6,5,8,9,11],deleg:2,refsym:2,regular:[0,7,8],upperbound:10,phase:5,typ:[1,9],prematur:[],don:[10,6,11],simplif:7,doc:[11,2],doe:[3,2,6,5,8,9],declar:[6,2],byteaoid:6,neg:6,dou:10,python_main:0,unlisten:[7,6],random:6,syntax:6,advisori:[1,10,3],pkg:2,identifi:[1,2,6,5,8,9],involv:9,despit:8,pg_src_host:11,layout:[8,2],acquir:[1,6,2,3],"__enter__":[1,9,6],receiverfault:9,ldap:6,"__call__":[5,6],likewis:6,stop:[5,8,6],report:[10,6],ever:5,"public":[6,11],reload:8,bad:[7,10],emp:[3,6],exclusivelock:1,datatyp:6,result:[8,6,11,2],respons:7,fail:[7,5,9,6,10],best:[0,5,9],subject:[5,2,6,7,9,11],preparedstat:2,hopefulli:5,databas:[0,1,2,3,5,6,7,8,11],iri:[0,6,11],default_pg_sysconfdir:11,simplest:6,drawn:5,pg_tmp:[],attribut:[5,2,6,7,8,9,10],inabl:[],extend:[3,6,2,8],wait_until_start:8,extens:[8,6,2],functool:6,intervaloid:6,ilf:2,fault:[3,9],howev:[1,2,4,7,6,5,8,9,11],against:[0,6,2],facet:6,logic:10,com:[10,6],tone:6,pg_driver:6,trust:6,assum:[9,6],union:6,three:[8,6,2],been:[0,1,2,6,7,8,9,11],much:[5,1],total_row:9,basic:[8,2],quickli:[9,6],pgclientencod:11,ani:[1,2,5,6,7,8,9,11],craft:6,listening_channel:6,getpass:[6,11],inhibit:6,ident:2,pg_controldata:8,servic:[7,10,6,11],properti:[1,9,6,2,8],aid:2,faux:8,conf:[0,8,11],get_numb:2,sever:6,numericoid:6,receiv:[0,3,6,7,9,10,11],make:[0,2,6,5,8,9],transpar:6,complex:9,complet:[0,8,9,6],with_libedit_pref:8,rais:[1,3,5,6,7,8,9,10],auser:6,employee_nam:6,undesir:[6,11,2],thu:7,inherit:[10,6,11,2],client:[0,3,6,5,8,11],thi:[0,1,2,4,5,6,7,8,9,11],programm:[5,3,10,2,8],settimeout:7,protocol:[0,1,2,7,6,5,10],statement_id:6,just:[4,6],pranskevichu:10,bandwidth:6,copyout:6,yet:5,languag:[6,2],easi:5,interfer:1,had:[5,6],ideal:[5,6],name_of_databas:3,sym_from_libthat:2,els:[9,2],save:6,procedure_id:6,opt:4,applic:[7,1,6,11,2],get_user_info_v2:2,measur:6,daemon:8,specif:[0,7,9,6,2],arbitrari:[7,8,9,6,2],manual:2,pghost:11,timetz:6,unnecessari:[6,2],timeoid:6,right:7,old:6,deal:[6,11],stopiter:[7,10,9,6],intern:[7,8,6,10],transmiss:[0,6],cooper:1,subclass:1,condit:[7,9,2],foo:6,localhost:[0,8,6,11],varcharoid:6,core:3,client_port:6,scrollabl:[6,2],"super":[],chapter:[0,4,6,2],postgresql:[0,1,2,3,4,5,6,7,8,9,10,11],surround:6,simul:6,commit:6,produc:[3,2,6,7,9,11],libthi:2,"float":6,contriv:[],www:11,down:8,resili:7,server_set:6,wrap:6,wai:[0,5,2,6,7,8,9],support:[1,2,3,6,5,8,10],transform:[5,6,2],avail:[0,1,3,6,7,8,9],gid:10,editor:2,jane:3,overhead:6,interv:[7,6],form:[0,9,6,11,2],offer:[7,1,9,6],forc:6,datestyl:11,pwfile:8,pgpass:[6,11],pgpassword:11,"true":[1,2,6,7,8,11],absent:6,pg_stat_act:6,createus:8,maximum:8,producer_fault:9,absenc:6,fundament:2,sql_parameter_typ:6,emit:[7,5,9,6,10],postmast:8,classif:2,featur:[1,2,3,5,6,7,8,9],alongsid:[1,2],"abstract":[5,1,6,2],t62000:6,exist:[1,9,6,2,8],check:[7,6],when:[0,1,2,3,5,6,7,8,9,10,11],elementtre:10,vacuumdb:8,db_notifi:7,test:[8,6],presum:6,roll:[10,6],relat:5,intend:[9,10],asterisk:11,daemon_path:8,payload_data:6,consid:[5,6,2],sql:[0,7,6,2],grief:6,longer:[9,6],furthermor:[5,6],safe:[7,1,9,6,8],ignor:0,time:[0,1,2,6,7,8],backward:6,appdata:11,consum:[7,9,6],signific:[9,6],row:[3,2,6,5,9,10],depend:[6,11,2],decim:6,decis:5,isinst:9,sourc:[9,6,11,2],"__exit__":[1,9,6],string:[0,2,6,5,8,11],iteratorproduc:9,table2_oid:1,guc:[5,6],administr:[4,3],level:[1,6,5,8,9,10,11],tear:[],valentin:10,reconcil:9,iter:[7,9,6,2],item:[5,8,6],unsupport:[5,3],default_pg_config:[],compens:[9,10],cost:[9,6],infailedtransactionerror:6,port:[0,8,6,11],methodcal:6,current:[1,6,11,8],axel:10,enable_integer_datetim:8,deriv:6,gener:[5,9,6,2],modif:0,address:6,wait:[7,5,6,10,8],srfcomposit:6,my_oper:2,hba:8,queue:7,semant:6,regardless:[1,6,11],extra:[6,2],modul:[0,3,2,6,8,9,10,11],prefer:[0,6],pg_config_:[],pg_dumpal:8,marker:2,instal:[3,2,4,6,8,11],different_channel:6,memori:[8,6,2],mst:6,connector:[5,6,2],employee_dob:6,the_cursor_id:6,msg:6,scope:6,claus:6,ip6:6,templat:6,ip4:6,suffoc:6,prepar:[0,3,2,7,6,5,9,10],timestamptz:[10,6],cat:[0,2],descriptor:6,can:[1,2,5,6,7,8,9,10,11],imped:10,purpos:[5,8,6,11,2],timestampoid:6,unanticip:6,backslash:[0,3,5],critic:6,pq3:6,occur:[7,9,6,11],alwai:[0,1,5,6,8],multipl:[0,1,2,3,6,7,8,10],write:[0,3,6,2,8],usenam:6,getset:[8,6],parameter:[8,6],emp_salai:3,map:[8,9,6,11,2],product:0,clone:6,"__next__":[7,10,9,6],usabl:6,float4oid:6,mai:[1,2,5,6,7,8,9,11],underscor:8,data:[5,2,6,7,8,9],practic:7,johnson:6,stdin:[9,6,2],explicit:[5,1,6,11],channels_and_payload:6,inform:[3,2,6,5,8,9,10,11],"switch":5,cannot:[8,6,2],combin:8,callabl:[9,6],increas:[10,2],xmloid:6,still:[7,10,2],dynam:2,conjunct:6,disconnect:8,platform:11,window:[8,11],main:6,non:[5,8,11,2],encod:[5,8,6],savepoint:[10,6],initi:[5,8,9,6,2],col1:6,now:[7,2],discuss:[0,6,2],sc_number:6,term:[9,2],name:[0,8,6,10,2],untrap:9,drop:[8,6,10],win32:11,reintroduc:9,ters:6,compil:[],domain:[10,6],replac:8,individu:[7,6,2],continu:[7,8,9],borrow:6,year:6,happen:5,shown:6,ct_thi:6,internet:6,correct:[5,3,9,6,10],earlier:6,client_encod:[5,3,11],daemon_process:8,runtimeerror:1,argv:11,orm:2,org:[11,2],"byte":[5,9,6],setupscript:2,care:[6,2],jwp:[0,11],frequenc:7,sysconfdir:[8,11],wrong:5,recov:[7,9],place:[7,6,11,2],lambda:6,origin:[10,9,6],enable_debug:8,directli:[0,1,2,7,6,5,8,9],onc:[7,8,6,2],arrai:[5,3,6,10],acquisit:1,"long":[7,8,6],symmetri:6,oppos:6,open:[3,2,6,8,10,11],given:[0,1,2,7,6,5,8,9,10,11],convent:2,defaultpars:11,caught:6,sslkei:11,conveni:[3,6,10],provinc:2,copi:[3,9,6,10,2],specifi:[0,2,6,7,8,11],than:[8,6,11],denot:2,pgsysconfdir:11,bpcharoid:6,posix:[],were:[5,1,9,6,8],posit:[6,11],"__context__":9,pre:6,rowset:6,argument:[0,8,6,11],dash:8,deliv:7,recover:[9,6],squar:6,destroi:6,libpath:2,note:[8,9,6,11,2],pg_cluster:8,pg_dump:8,take:[0,2,6,5,8,9],noth:3,channel:[7,6],begin:[7,6],sure:6,trace:[0,10,6],normal:[2,4,6,7,8,9,11],buffer:6,standardpars:11,strip_and_int:6,pair:[7,1,6,2,8],later:8,libthat:2,quantiti:6,transaction_isol:6,runtim:[6,2],environ_prefix:11,gracefulli:7,pq_trace:0,serializ:6,show:[0,6],subprocess:8,tend:11,xml:6,onli:[1,2,5,6,7,8,9,11],explicitli:[7,6],loading_t:9,transact:[0,3,6],activ:[7,6],written:6,dict:6,another_set:0,sighup:8,variou:[6,11],get:[7,8,6],ssl:[0,8,6],tailor:10,requir:[0,5,2,6,7,8,9],fileno:6,uniqueerror:6,clustertimeout:[],dramat:5,yield:[7,9,6],postgres_:[],where:[1,2,3,6,7,8,9],summari:7,atabl:6,ipcclean:8,concern:7,timeit:0,detect:6,enough:[5,6],between:[8,6],"import":[0,1,2,3,6,7,8,9,11],parent:8,likeabl:2,cycl:9,come:[5,2,6,7,9,11],pg_ctl_:[],audienc:[3,2],inconsist:[5,8],improv:[3,10],wait_until_stop:8,unittest:[],inspir:0,period:8,table1_oid:1,colon:2,poll:[7,8],ecpg:8,ultim:[5,8,9,6,2],invert:6,configure_opt:8,sslmode:[0,6,11],listen_address:8,with_libxml:8,resolut:[6,11],andrew:3,repres:[7,1,6,8],hasattr:2,default_statistics_target:6,cast:[5,6],invok:[6,2],outcom:6,invoc:[0,6],advantag:[0,6,2],stdout:[0,8,9,6],destin:9,cluster:[0,3,10,8],"__init__":2,develop:[],author:[10,11],same:[7,1,6,2],binari:[5,3,6,10],html:[11,2],cursor_id:6,document:[5,10,2],exhaust:[7,9,6,2],finish:9,closest:6,oid:6,driver:[5,3,6,10,11],capabl:8,mani:[5,9,6,2],appropri:[7,1,5,6,8],without:[0,3,5,7,6],model:6,execut:[0,1,2,3,4,6,5,8,9,10,11],loaderror:10,pkglibdir:8,kill:8,aspect:4,lib2:2,lib1:2,speed:10,hint:[0,5,6,2],pg_sy:2,except:[7,5,9,6,2],param:[0,11,2],codec:5,no_default:11,earli:[7,5],libn:2,read:[0,5,6,2,8],emp_nam:3,world:6,whitespac:2,integ:6,server:[0,5,6,8],benefit:9,either:[7,9,6],output:[0,8,6],manag:[1,2,3,4,6,7,8,9,10,11],fulfil:2,pg_python:[0,3,10,11],definit:[6,2],achiev:6,exit:[0,8,9,6],ddl:2,notabl:[7,8,6,11],refer:[3,2,6,7,9,10],garbag:[7,6],pg_hba:8,broken:[7,9],aquir:1,assocait:[],srf:6,copymanag:9,textoid:6,act:[0,6],table_nam:6,backend_id:[7,6],routin:[5,6],effici:6,lastli:1,filter_notic:6,terminolog:[3,9,2],surviv:1,done_listen:7,employee_salari:6,strip:6,mingw32:[],aren:6,initdberror:8,receiver_fault:9,start:[8,9,6],compliant:5,interfac:[1,2,3,5,6,7,8,9,10,11],ipv4:6,lot:6,ipv6:6,dbapi20:[3,6],total_byt:9,tupl:[5,6,7,8,9,10],pg_hba_:[],pg_parameter_typ:6,tripl:[7,6],possibl:[7,5,6,8],get_emp_with_salary_lt:3,expect:[7,5,6,11,2],creat:[1,2,3,5,6,7,8,9,10],certain:6,strongli:6,file:[0,3,2,4,6,8,10,11],fill:6,again:[1,2,6,7,8,9],field:11,valid:5,writabl:8,you:[4,11],lowerbound:10,sequenc:[5,1,6,2,8],symbol:[3,10,2],timestamptzoid:6,reduc:5,directori:[4,8,11,2],descript:[6,11],hello:6,num_messag:9,potenti:[5,6],escap:6,unset:6,represent:[10,6],all:[0,1,2,3,5,6,7,8,11],illustr:[7,3,6,2],lack:2,abil:[8,6],follow:[0,9,6,11,2],disk:2,chain:2,init:8,program:0,those:[1,2,5,6,7,8,9,11],introduc:5,"case":[1,2,5,6,7,8,9,10,11],liter:[5,3,6,11],straightforward:2,fals:[1,6,11,8],util:11,failur:[7,3,9,6,11],veri:[0,6,2],strang:[5,3],contrib_hstor:6,list:[2,6,7,8,9,10,11],adjust:[5,6],stderr:8,default_port:11,small:6,dimens:6,zero:[7,8,10],design:[7,6,2],stripxx:6,pass:[5,6,2],further:[5,10,6,11,2],whenc:6,what:[6,2],sub:10,section:[5,6,2],abl:6,delet:2,version:[0,4,6,10,8],mandir:8,method:[1,2,3,5,6,7,8,9,10],contrast:6,full:6,variat:2,proper:5,rlock:1,raise_emp:3,excess:6,modifi:[0,8,6],another_generate_series_exampl:2,valu:[0,3,2,6,5,8,10,11],search:2,popen:8,prior:[7,6,2],amount:[7,9,6],pick:7,action:[5,6],introductori:2,via:[7,5,9,6],shorthand:6,pgdatabas:11,primit:1,deprec:10,inappropri:6,establish:[0,3,6,11,2],select:[0,1,2,3,6,9],distinct:6,regist:10,two:[1,6,8],formul:6,taken:[5,6,11],minor:8,more:[3,2,6,5,9,11],desir:[0,3,6,5,8,10],particular:[4,6],known:6,cach:[7,8],psql:[0,8,11],none:[0,2,6,7,8,9,11],remain:[7,6],archiv:4,del:7,def:[6,2],prompt:[0,11],share:[1,6,8],accept:[8,6,11],t72000:6,my_operation_proc:2,cours:[3,6,11],newlin:11,secur:6,rather:[8,9,6,2],anoth:[5,1,9,6,2],snippet:11,pg_config_dictionari:8,simpl:[0,4,6,11,2],vlad:10,resourc:[1,2],referenc:[0,9,6,11,2],variant:[8,11],reflect:6,associ:[1,9,6,8],circumst:[7,6],hstore:[10,6],susan:3,onto:2,caus:[1,2,5,6,7,8,9,10,11],help:0,statementreceiv:9,held:1,through:6,paramet:[0,3,2,7,6,5,8,11],rintavarustu:10,style:2,pgport:11,pend:7,alter:[3,2,6,5,8,10],finer:6,good:[7,2],"return":[0,1,2,6,7,8,9,10,11],timestamp:[10,6],pginstal:[4,11],compound:6,funciton:[],instruct:[6,11],authent:6,easili:[5,6,2],iff:[],alreadi:[8,6,2],die:7,found:2,sql_statements_str:6,procedur:[1,6,2,3],connect:[0,1,2,3,5,6,7,8,9,10,11],beyond:[8,9],event:[7,9,6],transform_row:6,publish:6,payload:[7,6],sym_from_libthi:2,print:[3,6],interrog:[6,11],difficulti:5,postgr:[8,6,11],advanc:[6,2],asc:6,base:[7,8,6,11,2],a_db_us:11,prefac:2,thread:[1,6,10],assign:6,major:[8,6],channel_nam:6,notifi:[7,10,6],number:[0,1,5,6,9],done:[5,6,2],build_ext:[],differ:[6,11],script:[0,2,4,8,10,11],interact:[0,6],construct:[8,9,6,2],statement:[0,3,2,7,6,5,9,10],twenti:6,store:[1,6,3],option:[0,2,6,7,8,11],relationship:6,clusternotrunningerror:8,"_my_oper":2,sql_statement_str:6,pars:[6,11],pgpassfil:[6,11],grace:8,kind:6,celementtre:6,remot:6,remov:[7,8,9,10,11],str:[5,8,6],well:[0,7,5,6,8],pg_directori:8,packag:[4,6,2],dedic:3,"null":10,built:[0,8,2],equival:[6,2],self:2,also:[0,5,6,7,8,9,11],send_stmt:9,employee_hire_d:6,pg_instal:8,distribut:[3,2],choos:[5,1],most:[5,6,11,2],sslrootcrlfil:[6,11],original_except:9,filesystem:0,clear:7,cover:[4,2],setof:6,part:[8,9,6,10],newvalu:0,latest:6,microsoft:8,carefulli:[5,3,6],session:1,fine:[8,6],notifyman:7,indexerror:6,ct_that:6,factor:[9,6,2],ampersand:2,sslrootcrtfil:[6,11],"__file__":2,express:[0,5,6],load_chunk:[5,3,6,2],fastest:6,restart:8,crt:11,int4oid:6,common:[1,6,2],bytea:6,certif:6,forego:6,set:[0,3,2,7,6,5,8,9,10,11],creator:0,clusterinitializationerror:8,startup:[5,10,6],mutabl:6,see:[3,6,11,2],arg:6,close:[0,1,6,7,8,10],inconveni:2,someth:6,altern:9,signatur:[6,2],numer:[3,6],sole:6,libnam:2,ctest:6,verbos:[5,3,6,10],both:[1,2,6,7,8,9],last:6,delimit:6,tempor:10,package_data:2,context:[0,1,9,6,2],default_host:11,pg_column_typ:6,load:[5,6,2],docdir:8,standard_conforming_str:6,simpli:[6,11],point:[1,2,4,6,7,8,9,11],instanti:[1,6,2,8],littl:9,shutdown:8,throughout:2,backend:[7,1,6],user_id:2,due:[6,11],empti:[7,10,6,11,2],secret:[8,6,11],createlang:8,great:6,append:[0,7,2],func:6,demand:6,pg_param:11,look:[5,8,6,2],batch:6,durat:7,"while":[7,8,9,6,2],abov:[1,2,3,6,7,8,11],error:[0,5,6,2],loop:[0,7,9],pack:[5,6],propag:6,readi:[8,9,6,2],itself:[8,6,2],emp_salari:3,clusterdb:8,around:6,decor:[],conflict:[1,6],higher:[5,6],usec:0,optim:5,wherea:[10,6],sym:2,temporari:[0,8],user:[0,3,2,7,6,5,8,10,11],remove_us:2,recent:6,lower:8,lib:[8,10,2],discourag:[6,2],xx9301423:6,entri:[4,6,11,2],chardata:6,itemgett:2,pg_servic:11,pggeqo:11,other_symbol:2,subsequ:[6,11,2],build:[4,8,11,2],bin:[0,3,4,8,10,11],varchar:6,format:[5,6,2],characterist:7,formal:2,success:[1,6],signal:[7,8,9],resolv:[11,2],collect:[3,2,6,7,8,9,11],"boolean":1,pgconnect_timeout:11,specfici:6,often:[7,10,9,6],creation:[6,11,2],some:[1,2,3,5,6,7,11],back:[0,5,6,10],global:2,sampl:[3,6],from_end:6,server_vers:6,backend_start:6,chunksiz:10,per:0,debra:6,substitut:2,larg:[6,2],proc:[0,6,2],run:[0,8,9,6,2],copy_emps_in:6,step:[9,6],that_pkei:6,kerberos4_realm:11,includedir_serv:8,materi:2,optpars:11,idl:[7,6],block:[1,9,6,2,8],postgersql:6,primarili:[8,9,6,11],irrit:10,within:[0,1,2,6,8,9],pgtz:11,ensur:[],fictiti:2,reindexdb:8,textual:6,custom:[5,2],includ:[0,2,4,6,7,8,11],forward:6,parse_arg:11,properli:[5,10,6,11],int4:[1,6,2],line:[0,9,6,11,2],int8:[1,9,6],info:[8,6],utf:[5,8],sql_column_typ:6,consist:[5,6,7,8,9,11],geqo:11,caller:6,highlight:[5,2],similar:[1,6,2],element3:10,constant:[6,2],gettimeout:7,reconcili:9,parser:2,doesn:6,get_some_chunk:2,"char":6,make_emp:3,incomplet:9,destruct:8,guarante:[7,6],titl:11,sequenti:6,invalid:[0,7,6],pguser:[6,11],bracket:6,transport:6,statementproduc:9,pg_config:[4,8],gigabyt:9,infrequ:2,pgdata:[8,11],typeio:10,far:[5,6],name2:6,emps_by_ag:6,scroll:6,getaddrinfo:6,code:[0,3,2,6,7,8],partial:[6,11],pgsslmode:11,queri:[5,10,6,2],setting_name_to_com:0,friendli:6,send:[5,8,6],sens:5,fatal:[5,9,6],sent:[7,5,6,8],rollback:6,volum:5,implicitli:6,relev:7,inclin:6,pgkrbsrvname:11,"try":[9,6],barbara:6,impli:6,natur:[5,9,6,2],client_address:6,index:6,access:[1,2,6,7,8,9,10],absolut:[8,6],len:6,psql_path:8,bodi:6,intnam:6,implicit:6,convert:6,convers:6,larger:6,typio:[5,10],chang:[0,3,2,4,6,5,8,9,10,11],revoc:6,employe:[3,6],configur:[0,2,4,6,7,8],appli:[0,8,6],approxim:7,droplang:8,api:[0,3,2,6,7,9,10],getus:[6,11],from:[0,1,2,3,5,6,7,8,9,10,11],stream:[5,6,2],commun:6,doubl:6,next:[7,9,6],few:[5,8,6,2],usr:[4,8],"0devel":8,pg_data:8,src:[8,6],tzinfo:6,"transient":2,callreceiv:9,name3:6,name1:6,rare:[7,9],interven:6,retriev:8,augment:[0,11],alia:1,annot:2,abort:[9,6],fetch:[6,2],control:[8,9,6],max_connect:8,process:[0,7,2,4,6,5,8,9,11],lock:[1,10,3],tax:2,high:[5,10,9,6,11],tag:10,t1968:6,serial:6,delai:8,filepath:0,pgdatestyl:11,instead:[0,8,6,10,2],panic:[5,6],overridden:5,watch:7,resolve_password:11,unidentifi:[],alloc:[8,9],essenti:[5,2],bind:[10,6,2],dateoid:6,correspond:6,element:[5,10,6],issu:[5,6],allow:[0,1,2,7,6,5,8,10,11],index_from_kei:6,pg_service_fil:11,move:[9,6],dropus:8,infrastructur:6,therefor:[5,8,11,2],fitti:6,greater:[7,6],python:[0,3,2,4,6,5,8,9,10,11],auto:6,auth:[],devel:8,facilit:6,server_encod:[5,6],strive:3,msghook:6,anyth:6,edit:0,enable_cassert:8,prompt_password:11,trap:[9,6],col0:6,tracer:10,chunk:[10,9,6,2],"static":11,patch:8,special:[10,2],out:[7,6,2],variabl:[0,3,6,4,11],get_on:2,parametererror:6,categori:[3,6,2],suitabl:6,rel:[6,2],shut:8,client_min_messag:[5,10,6],manipul:[8,6],dictionari:[8,9,6,11],releas:[1,6,10,3],promptli:[7,6,2],val:[0,1,9],could:1,keep:2,length:6,pg_ctl:8,crl:11,outsid:[6,2],with_openssl:8,retain:[8,2],timezon:[6,11],ttree:6,suffix:2,qualiti:6,echo:0,date:[10,6],facil:[6,2],suffic:11,unknown:6,apply_tax:6,system:[8,11,2],messag:[0,3,7,6,5,9,10],termin:[7,8,6],"final":[9,6,2],prone:2,gotcha:[5,3],exactli:6,notificationmanag:[7,10],take_out_trash:7,mcguffer:6,structur:[8,6],charact:[5,3,6,2],pgsql:8,msec:0,have:[1,2,6,7,8,10,11],tabl:[1,9,6,11,3],need:[1,2,4,7,6,5,8,9,11],localedir:8,preced:8,pg_resetxlog:8,which:[7,1,9,6,2],singl:[0,1,2,3,6,7,10,11],unless:[7,6],writelin:6,search_path:[6,11],rformat:10,t1970:6,kerberos5_servic:11,"class":[1,2,6,7,8,9,10],url:6,request:[5,6,11],recvsiz:10,determin:[8,6,2],fact:6,dbn:7,text:[5,3,6,2],syntaxerror:6,purposefulli:[6,11],bring:5,load_row:[5,3,6,2],trivial:[11,2],redirect:[0,8],locat:[0,3,6,11,8],int8oid:6,forev:7,should:[3,2,4,7,6,5,8,9,11],suppos:6,initdb:8,local:[7,8,6,2],a_statement_id:6,contribut:6,notat:6,regularli:[9,6],unknown_failur:9,db1:7,db2:7,enabl:[5,8,6],organ:2,pgrealm:11,"default":[1,2,3,4,5,6,7,8,10,11],copyin:6,contain:[4,8,6,2],view:6,update_r:9,conform:6,knowledg:[6,2],packet:6,sqlexec:0,op_arg2:2,op_arg1:2,wire:5,pattern:2,boundari:[9,6],copyfail:9,realign:9,state:[8,9,6,11,2],bound:[6,2],kei:[3,9,6,11,8],isol:[8,6,2],itertool:2,"2pc":10,entir:[2,6,5,8,9,11],pgsslkei:11,addit:[7,6,11],etc:[8,6,10,11],instanc:[1,2,5,6,7,8,9,11],grain:[8,6],uncaught:6,sslcrtfile:[6,11],comment:0,respect:[8,2],clusterstartuperror:8,quit:6,solitari:6,addition:[9,6,2],pg_lib:2,libdir:[8,2],compon:[6,2],treat:[5,3,6,2],immedi:[7,8,9,2],producerfault:9,assert:[7,8,2],togeth:[6,2],present:[6,11],cursor:[5,3,6,10,2],defin:[1,6,10,2],faulted_receiv:9,parsed_opt:11,float8oid:6,bigint:[6,2],motiv:[3,2],substanti:3,ready_for_connect:8,enable_depend:8,handl:[7,10,9,6],difficult:5,http:[11,2],hostnam:[6,11],version_info:[8,6],debug:[8,6],upon:[0,8],effect:[4,8,6,11,2],column_nam:6,logfil:8,xact:[0,3,9,6,10],distutil:[4,2],reintroduct:9,exampl:[0,1,7,6,2],command:[0,3,2,6,7,8,10,11],interpol:6,undefin:6,usual:[8,6,2],"25p02":6,less:6,get_user_info:2,smith:6,etre:6,add:[7,10,9,6,2],lookup:11,match:11,py_build_extens:[],piec:6,password:[0,3,6,5,8,11],python3:[0,4,10],insert:[3,6,2],int2oid:6,like:[0,1,2,6,5,8,11],lost:6,necessari:[5,2,6,7,8,9,11],lose:7,page:6,revers:6,twitter:10,pg_dotconf:[0,3,10],user_type_id:2,home:11,librari:[5,3,10,2],mkemp:6,separ:[11,2],lead:[8,6],"__contains__":6,leak:8,avoid:[0,5,9,6,8],leav:11,mode:[0,1,6],preload:2,encourag:2,usag:[0,3,2,6,9,10],host:[0,3,6,11],although:7,about:[5,8,9,6,2],actual:[8,9,6],socket:[0,10,9,6],column:[5,6,2],constructor:[7,1,6],discard:[7,6,2],disabl:[0,6,11],own:10,builtin:[10,9,6],automat:[5,8,6,2],guard:6,copyman:9,mere:[7,1,6,2],leverag:[7,6],processor:5,data_directori:8,transfer:[5,9,6],product_cod:6,information_schema:6,"function":[1,2,6,5,8,9,11],interest:[6,2],unexpect:11,for_rabbit:7,keyerror:6,stdcat:2,pg_execut:8,bug:10,count:[1,6,10,2],succe:6,made:[5,8,6,11,2],temp:[9,6],whether:[1,6,2,8],sc_text:6,dml:[6,2],displai:[6,11],asynchron:[7,6],record:[5,3,9,6,10],key_or_index:6,limit:6,otherwis:6,problem:[5,9,6],"int":[7,8,6,2],dure:[7,5,9,6],pid:[7,8,6],implement:[5,10,9,6,2],ini:2,probabl:5,hba_fil:8,detail:[6,11,2],other:[1,2,3,4,5,6,7,11],bool:[8,6],futur:6,storedprocedur:6,repeat:[8,2],genexpr:6,sharelock:1,the_real_sekrat:6,rule:6,key_from_index:6,portion:6},objtypes:{},titles:["Commands","Advisory Locks","Categories and Libraries","py-postgresql","Administration","Gotchas","Driver","Notification Management","Cluster Management","Copy Management","Changes","Client Parameters"],objnames:{},filenames:["bin","alock","lib","index","admin","gotchas","driver","notifyman","cluster","copyman","changes","clientparameters"]})

@@ -22,2 +22,14 @@ =============

Copy Management
`postgresql.documentation.copyman`
Notification Management
`postgresql.documentation.notifyman`
Advisory Locks
`postgresql.documentation.alock`
Cluster Management
`postgresql.documentation.cluster`
Categories and Query Libraries

@@ -24,0 +36,0 @@ `postgresql.documentation.lib`

@@ -45,4 +45,4 @@ Categories and Libraries

<Preface>
[symbol:type:method]
<symbol statement>
[name:type:method]
<statement>
...

@@ -49,0 +49,0 @@

@@ -22,2 +22,3 @@ py-postgresql

alock
cluster
lib

@@ -24,0 +25,0 @@ clientparameters

@@ -33,10 +33,6 @@ ##

# filter any %% matches(empty strings).
return [
x for x in parameters_re.findall(sql) if x
]
return [x for x in parameters_re.findall(sql) if x]
def convert_keywords(keys, mapping):
return [
mapping[k] for k in keys
]
return [mapping[k] for k in keys]

@@ -225,3 +221,3 @@ from postgresql.exceptions import \

for part in parts:
if type(part) is type(()):
if part.__class__ is ().__class__:
# skip quoted portions

@@ -228,0 +224,0 @@ rparts.append(part)

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .encodings
##
##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .encodings.aliases
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .encodings.bytea
##

@@ -5,0 +4,0 @@ 'PostgreSQL bytea encoding and decoding functions'

@@ -19,3 +19,2 @@ ##

from . import string as pg_str
from . import exceptions as pg_exc

@@ -22,0 +21,0 @@ # Get the output from the given command.

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .iri
##

@@ -5,0 +4,0 @@ """

@@ -32,6 +32,8 @@ ##

CAST(atttypid AS oid) AS atttypid,
CAST(attname AS text) AS attname
CAST(attname AS text) AS attname,
tt.typtype = 'd' AS is_domain
FROM
pg_catalog.pg_type t LEFT JOIN pg_catalog.pg_attribute a
ON (t.typrelid = a.attrelid)
LEFT JOIN pg_type tt ON (a.atttypid = tt.oid)
WHERE

@@ -41,2 +43,40 @@ attrelid = $1 AND NOT attisdropped AND attnum > 0

[lookup_basetype_recursive]
SELECT
(CASE WHEN tt.typtype = 'd' THEN
(WITH RECURSIVE typehierarchy(typid, depth) AS (
SELECT
t2.typbasetype,
0
FROM
pg_type t2
WHERE
t2.oid = tt.oid
UNION ALL
SELECT
t2.typbasetype,
th.depth + 1
FROM
pg_type t2,
typehierarchy th
WHERE
th.typid = t2.oid
AND t2.typbasetype != 0
) SELECT typid FROM typehierarchy ORDER BY depth DESC LIMIT 1)
ELSE NULL
END) AS basetypid
FROM
pg_catalog.pg_type tt
WHERE
tt.oid = $1
[lookup_basetype]
SELECT
tt.typbasetype
FROM
pg_catalog.pg_type tt
WHERE
tt.oid = $1
[lookup_procedures]

@@ -43,0 +83,0 @@ SELECT

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .port
##

@@ -5,0 +4,0 @@ """

/*
* copyright 2009, James William Pye
* http://python.projects.postgresql.org
* .port.optimized - functools.c
*

@@ -5,0 +4,0 @@ *//*

@@ -13,5 +13,5 @@ 'project information'

# Set this to the target date when approaching a release.
date = 'Sat Apr 24 01:43:11 MST 2010'
tags = set(('fixes',))
version_info = (1, 0, 1)
date = 'Sat Sep 18 12:17:29 MST 2010'
tags = set(('documentation','fixes','features','deprecations'))
version_info = (1, 0, 2)
version = '.'.join(map(str, version_info)) + (date is None and 'dev' or '')
##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .protocol
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .protocol.buffer
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .protocol.client3
##

@@ -514,3 +513,3 @@ """

self.xact = xact.Negotiation(
element.Startup(**startup), password
element.Startup(startup), password
)

@@ -517,0 +516,0 @@

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .protocol.element3
##

@@ -5,0 +4,0 @@ 'PQ version 3.0 elements'

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .protocol.message_types
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .protocol.version
##

@@ -5,0 +4,0 @@ 'PQ version class'

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .python.contextlib
##

@@ -5,0 +4,0 @@ import sys

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .python.decorlib
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .python.doc
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .python.itertools
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .python.msw
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .python.os
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .python.string
##

@@ -5,0 +4,0 @@ import os

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .release
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .string
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .sys
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.cursor_integrity
##

@@ -5,0 +4,0 @@ import os

#!/usr/bin/env python
##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.perf_query_io
##

@@ -6,0 +5,0 @@ # Statement I/O: Mass insert and select performance

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.support
##

@@ -5,0 +4,0 @@ """

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.test_bytea_codec
##

@@ -5,0 +4,0 @@ import unittest

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.test_cluster
##

@@ -5,0 +4,0 @@ import sys

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.test_configfile
##

@@ -5,0 +4,0 @@ import os

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.test_connect
##

@@ -5,0 +4,0 @@ import sys

@@ -869,3 +869,14 @@ ##

def test_placeholder_escape(self):
con = self._connect()
try:
c = con.cursor()
c.execute("SELECT 100 %% %s", (99,))
self.failUnlessEqual(1, c.fetchone()[0])
c.execute("SELECT 100 %% %(foo)s", {'foo': 99})
self.failUnlessEqual(1, c.fetchone()[0])
finally:
con.close()
if __name__ == '__main__':
unittest.main()

@@ -832,2 +832,10 @@ ##

@pg_tmp
def testCursorIter(self):
ps = db.prepare("SELECT i FROM generate_series(0, 10) AS g(i)")
c = ps.declare()
self.failUnlessEqual(next(iter(c)), (0,))
self.failUnlessEqual(next(iter(c)), (1,))
self.failUnlessEqual(next(iter(c)), (2,))
@pg_tmp
def testCursorReadInXact(self):

@@ -883,2 +891,18 @@ with db.xact():

@pg_tmp
def testSeek(self):
ps = db.prepare("SELECT i FROM generate_series(0, (2^6)::int - 1) AS g(i)")
c = ps.declare()
self.failUnlessEqual(c.seek(4, 'FORWARD'), 4)
self.failUnlessEqual([x for x, in c.read(10)], list(range(4, 14)))
self.failUnlessEqual(c.seek(2, 'BACKWARD'), 2)
self.failUnlessEqual([x for x, in c.read(10)], list(range(12, 22)))
self.failUnlessEqual(c.seek(-5, 'BACKWARD'), 5)
self.failUnlessEqual([x for x, in c.read(10)], list(range(27, 37)))
self.failUnlessEqual(c.seek('ALL'), 27)
def testScrollBackwards(self):

@@ -1083,3 +1107,31 @@ # testScroll again, but backwards this time.

@pg_tmp
def testXML(self):
def testDomainSupport(self):
'test domain type I/O'
db.execute('CREATE DOMAIN int_t AS int')
db.execute('CREATE DOMAIN int_t_2 AS int_t')
db.execute('CREATE TYPE tt AS (a int_t, b int_t_2)')
samples = {
'int_t': [10],
'int_t_2': [11],
'tt': [(12, 13)]
}
for (typname, sample_data) in samples.items():
pb = db.prepare(
"SELECT $1::" + typname
)
for sample in sample_data:
rsample = list(pb.rows(sample))[0][0]
if isinstance(rsample, pg_types.Array):
rsample = rsample.nest()
self.failUnless(
rsample == sample,
"failed to return %s object data as-is; gave %r, received %r" %(
typname, sample, rsample
)
)
def check_xml(self):
try:

@@ -1094,3 +1146,9 @@ xml = db.prepare('select $1::xml')

bar = etree.XML('<bar/>')
tostr = etree.tostring
if hasattr(etree, 'tostringlist'):
# 3.2
def tostr(x):
return etree.tostring(x, encoding='utf-8')
else:
# 3.1 compat
tostr = etree.tostring
self.failUnlessEqual(tostr(xml.first(foo)), tostr(foo))

@@ -1133,2 +1191,19 @@ self.failUnlessEqual(tostr(xml.first(bar)), tostr(bar))

@pg_tmp
def testXML(self):
self.check_xml()
@pg_tmp
def testXML_ascii(self):
# check a non-utf8 encoding (3.2 and up)
db.settings['client_encoding'] = 'sql_ascii'
self.check_xml()
@pg_tmp
def testXML_utf8(self):
# in 3.2 we always serialize at utf-8, so check that
# that path is being ran by forcing the client_encoding to utf8.
db.settings['client_encoding'] = 'utf8'
self.check_xml()
@pg_tmp
def testUUID(self):

@@ -1519,2 +1594,19 @@ # doesn't exist in all versions supported by py-postgresql.

@pg_tmp
def testReleasedSavepoint(self):
# validate that the rolled back savepoint is released as well.
x = None
with db.xact():
try:
with db.xact():
try:
with db.xact() as x:
db.execute("selekt 1")
except pg_exc.SyntaxError:
db.execute('RELEASE "xact(' + hex(id(x)) + ')"')
except pg_exc.InvalidSavepointSpecificationError as e:
pass
else:
self.fail("InvalidSavepointSpecificationError not raised")
@pg_tmp
def testCloseInSubTransactionBlock(self):

@@ -1521,0 +1613,0 @@ try:

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.test_exceptions
##

@@ -5,0 +4,0 @@ import unittest

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.test_installation
##

@@ -5,0 +4,0 @@ import sys

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.test_iri
##

@@ -5,0 +4,0 @@ import unittest

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.test_pgpassfile
##

@@ -5,0 +4,0 @@ import unittest

@@ -135,7 +135,7 @@ ##

e3.VoidMessage,
e3.Startup(**{
b'user' : b'jwp',
b'database' : b'template1',
b'options' : b'-f',
}),
e3.Startup([
(b'user', b'jwp'),
(b'database', b'template1'),
(b'options', b'-f'),
]),
e3.Notice((

@@ -142,0 +142,0 @@ (b'S', b'FATAL'),

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.test_ssl_connect
##

@@ -5,0 +4,0 @@ import sys

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.test_string
##

@@ -5,0 +4,0 @@ import sys

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .test.testall
##

@@ -5,0 +4,0 @@ import unittest

@@ -15,13 +15,2 @@ ##

def xml_pack(xml, tostr = etree.tostring, et = etree.ElementTree):
if isinstance(xml, str):
# If it's a string, encode and return.
return xml
elif isinstance(xml, tuple):
# If it's a tuple, encode and return the joined items.
# We do not accept lists here--emphasizing lists being used for ARRAY
# bounds.
return ''.join((x if isinstance(x, str) else tostr(x) for x in xml))
return tostr(xml)
def xml_unpack(xmldata, XML = etree.XML):

@@ -34,11 +23,63 @@ try:

def xml_io_factory(typoid, typio, c = compose):
return (
c((xml_pack, typio.encode)),
c((typio.decode, xml_unpack)),
etree.ElementTree,
)
if not hasattr(etree, 'tostringlist'):
# Python 3.1 support.
def xml_pack(xml, tostr = etree.tostring, et = etree.ElementTree,
str = str, isinstance = isinstance, tuple = tuple
):
if isinstance(xml, str):
# If it's a string, encode and return.
return xml
elif isinstance(xml, tuple):
# If it's a tuple, encode and return the joined items.
# We do not accept lists here--emphasizing lists being used for ARRAY
# bounds.
return ''.join((x if isinstance(x, str) else tostr(x) for x in xml))
return tostr(xml)
def xml_io_factory(typoid, typio, c = compose):
return (
c((xml_pack, typio.encode)),
c((typio.decode, xml_unpack)),
etree.ElementTree,
)
else:
# New etree tostring API.
def xml_pack(xml, encoding, encoder,
tostr = etree.tostring, et = etree.ElementTree,
str = str, isinstance = isinstance, tuple = tuple,
):
if isinstance(xml, bytes):
return xml
if isinstance(xml, str):
# If it's a string, encode and return.
return encoder(xml)
elif isinstance(xml, tuple):
# If it's a tuple, encode and return the joined items.
# We do not accept lists here--emphasizing lists being used for ARRAY
# bounds.
##
# 3.2
# XXX: tostring doesn't include declaration with utf-8?
x = b''.join(
x.encode('utf-8') if isinstance(x, str) else
tostr(x, encoding = "utf-8")
for x in xml
)
else:
##
# 3.2
# XXX: tostring doesn't include declaration with utf-8?
x = tostr(xml, encoding = "utf-8")
if encoding in ('utf8','utf-8'):
return x
else:
return encoder(x.decode('utf-8'))
def xml_io_factory(typoid, typio, c = compose):
def local_xml_pack(x, encoder = typio.encode, typio = typio, xml_pack = xml_pack):
return xml_pack(x, typio.encoding, encoder)
return (local_xml_pack, c((typio.decode, xml_unpack)), etree.ElementTree,)
oid_to_io = {
XMLOID : xml_io_factory
}

@@ -27,3 +27,3 @@ ##

def NamedTupleFactory(attribute_map):
def NamedTupleFactory(attribute_map, composite_relid = None):
"""

@@ -30,0 +30,0 @@ Alternative db.typio.RowFactory for producing namedtuple's instead of

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .unittest
##
"""
TestCase subclasses used by postgresql.test.
TestCase subclasses (only) used by postgresql.test.test_[ssl_]connect
"""

@@ -8,0 +7,0 @@ import sys

##
# copyright 2009, James William Pye
# http://python.projects.postgresql.org
# .versionstring
##

@@ -5,0 +4,0 @@ """

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display