py-postgresql
Advanced tools
| ## | ||
| # .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 — 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> »</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">'/usr/local/pgsql/bin/pg_config'</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">'/usr/local/pgsql/bin/pg_config'</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’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">'PostgreSQL 9.0devel'</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’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">'devel'</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’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">'enable_debug'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">'with_libxml'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> | ||
| <span class="s">'enable_cassert'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">'with_libedit_preferred'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> | ||
| <span class="s">'prefix'</span><span class="p">:</span> <span class="s">'/src/build/pg90'</span><span class="p">,</span> <span class="s">'with_openssl'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> | ||
| <span class="s">'enable_integer_datetimes'</span><span class="p">:</span> <span class="bp">True</span><span class="p">,</span> <span class="s">'enable_depend'</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’ 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">'/usr/local/pgsql/bin/pg_config'</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">'psql'</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–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’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’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>‘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’s capability to read the superuser’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">'/usr/local/pgsql/bin/pg_config'</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">'pg_data'</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">'pg'</span><span class="p">,</span> <span class="n">password</span> <span class="o">=</span> <span class="s">'secret'</span><span class="p">,</span> <span class="n">encoding</span> <span class="o">=</span> <span class="s">'utf-8'</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’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’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">'listen_addresses'</span> <span class="p">:</span> <span class="s">'localhost'</span><span class="p">,</span> <span class="s">'port'</span> <span class="p">:</span> <span class="s">'6543'</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">'listen_addresses'</span><span class="p">,</span> <span class="s">'port'</span><span class="p">)))</span> | ||
| <span class="n">d</span> | ||
| <span class="p">{</span><span class="s">'listen_addresses'</span> <span class="p">:</span> <span class="s">'localhost'</span><span class="p">,</span> <span class="s">'port'</span> <span class="p">:</span> <span class="s">'6543'</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">'max_connections'</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’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’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’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’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’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’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’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’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’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> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 @@ ## |
+7
-14
@@ -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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Administration — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Advisory Locks — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Commands — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Changes — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</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 ‘gid’ is given to xact().</li> | ||
| <li>Compensate for Python3.2’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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Client Parameters — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Copy Management — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Index — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Gotchas — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>py-postgresql — 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> »</li> | ||
| <li><a href="#">py-postgresql v1.0.2 documentation</a> »</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> »</li> | ||
| <li><a href="#">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Categories and Libraries — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</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><Preface> | ||
| [symbol:type:method] | ||
| <symbol statement> | ||
| [name:type:method] | ||
| <statement> | ||
| ...</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’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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Notification Management — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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 — py-postgresql v1.0.1 documentation</title> | ||
| <title>Search — 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> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
@@ -84,14 +92,11 @@ </div> | ||
| >index</a></li> | ||
| <li><a href="index.html">py-postgresql v1.0.1 documentation</a> »</li> | ||
| <li><a href="index.html">py-postgresql v1.0.2 documentation</a> »</li> | ||
| </ul> | ||
| </div> | ||
| <div class="footer"> | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| Last updated on Apr 24, 2010. | ||
| Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.3. | ||
| © Copyright 2010, James William Pye <x@jwp.name>. | ||
| 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
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
2669530
9.24%190
2.7%24698
1.76%