summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/dialects/postgresql/base.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-08-23 15:21:16 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-08-23 15:21:16 -0400
commitb490534657229cbc44f1f5735a39539ceaf776a3 (patch)
treebae34903b54189215938b55455443b822a70ff33 /lib/sqlalchemy/dialects/postgresql/base.py
parentfaa5a9067661039dcc8663e00bdcea2d098c9989 (diff)
downloadsqlalchemy-b490534657229cbc44f1f5735a39539ceaf776a3.tar.gz
- pep8 formatting for pg table opts feature, tests
- add support for PG INHERITS - fix mis-named tests - changelog fixes #2051
Diffstat (limited to 'lib/sqlalchemy/dialects/postgresql/base.py')
-rw-r--r--lib/sqlalchemy/dialects/postgresql/base.py83
1 files changed, 59 insertions, 24 deletions
diff --git a/lib/sqlalchemy/dialects/postgresql/base.py b/lib/sqlalchemy/dialects/postgresql/base.py
index 34932520f..39de0cf92 100644
--- a/lib/sqlalchemy/dialects/postgresql/base.py
+++ b/lib/sqlalchemy/dialects/postgresql/base.py
@@ -417,22 +417,42 @@ of :class:`.PGInspector`, which offers additional methods::
.. autoclass:: PGInspector
:members:
-PostgreSQL specific table options
----------------------------------
+.. postgresql_table_options:
+
+PostgreSQL Table Options
+-------------------------
+
+Several options for CREATE TABLE are supported directly by the PostgreSQL
+dialect in conjunction with the :class:`.Table` construct:
+
+* ``TABLESPACE``::
+
+ Table("some_table", metadata, ..., postgresql_tablespace='some_tablespace')
+
+* ``ON COMMIT``::
+
+ Table("some_table", metadata, ..., postgresql_on_commit='PRESERVE ROWS')
-PostgreSQL provides several CREATE TABLE specific options allowing to
-specify how table data are stored. The following options are currently
-supported: ``TABLESPACE``, ``ON COMMIT``, ``WITH OIDS``.
+* ``WITH OIDS``::
-``postgresql_tablespace`` is probably the more common and allows to specify
-where in the filesystem the data files for the table will be created (see
-http://www.postgresql.org/docs/9.3/static/manage-ag-tablespaces.html)
+ Table("some_table", metadata, ..., postgresql_with_oids=True)
+
+* ``WITHOUT OIDS``::
+
+ Table("some_table", metadata, ..., postgresql_with_oids=False)
+
+* ``INHERITS``::
+
+ Table("some_table", metadata, ..., postgresql_inherits="some_supertable")
+
+ Table("some_table", metadata, ..., postgresql_inherits=("t1", "t2", ...))
+
+.. versionadded:: 1.0.0
.. seealso::
`Postgresql CREATE TABLE options
- <http://www.postgresql.org/docs/9.3/static/sql-createtable.html>`_ -
- on the PostgreSQL website
+ <http://www.postgresql.org/docs/9.3/static/sql-createtable.html>`_
"""
from collections import defaultdict
@@ -1466,19 +1486,33 @@ class PGDDLCompiler(compiler.DDLCompiler):
def post_create_table(self, table):
table_opts = []
- if table.dialect_options['postgresql']['with_oids'] is not None:
- if table.dialect_options['postgresql']['with_oids']:
- table_opts.append('WITH OIDS')
- else:
- table_opts.append('WITHOUT OIDS')
- if table.dialect_options['postgresql']['on_commit']:
- on_commit_options = table.dialect_options['postgresql']['on_commit'].replace("_", " ").upper()
- table_opts.append('ON COMMIT %s' % on_commit_options)
- if table.dialect_options['postgresql']['tablespace']:
- tablespace_name = table.dialect_options['postgresql']['tablespace']
- table_opts.append('TABLESPACE %s' % self.preparer.quote(tablespace_name))
+ pg_opts = table.dialect_options['postgresql']
+
+ inherits = pg_opts.get('inherits')
+ if inherits is not None:
+ if not isinstance(inherits, (list, tuple)):
+ inherits = (inherits, )
+ table_opts.append(
+ '\n INHERITS ( ' +
+ ', '.join(self.preparer.quote(name) for name in inherits) +
+ ' )')
+
+ if pg_opts['with_oids'] is True:
+ table_opts.append('\n WITH OIDS')
+ elif pg_opts['with_oids'] is False:
+ table_opts.append('\n WITHOUT OIDS')
+
+ if pg_opts['on_commit']:
+ on_commit_options = pg_opts['on_commit'].replace("_", " ").upper()
+ table_opts.append('\n ON COMMIT %s' % on_commit_options)
+
+ if pg_opts['tablespace']:
+ tablespace_name = pg_opts['tablespace']
+ table_opts.append(
+ '\n TABLESPACE %s' % self.preparer.quote(tablespace_name)
+ )
- return ' '.join(table_opts)
+ return ''.join(table_opts)
class PGTypeCompiler(compiler.GenericTypeCompiler):
@@ -1741,8 +1775,9 @@ class PGDialect(default.DefaultDialect):
(schema.Table, {
"ignore_search_path": False,
"tablespace": None,
- "with_oids" : None,
- "on_commit" : None,
+ "with_oids": None,
+ "on_commit": None,
+ "inherits": None
})
]