.. changelog::
:version: 0.9.5
+ .. change::
+ :tags: enhancement, postgresql
+ :tickets: 3002
+
+ Added a new type :class:`.postgresql.OID` to the Postgresql dialect.
+ While "oid" is generally a private type within PG that is not exposed
+ in modern versions, there are some PG use cases such as large object
+ support where these types might be exposed, as well as within some
+ user-reported schema reflection use cases.
+
.. change::
:tags: bug, orm
:tickets: 3080
from sqlalchemy.dialects.postgresql import \
ARRAY, BIGINT, BIT, BOOLEAN, BYTEA, CHAR, CIDR, DATE, \
DOUBLE_PRECISION, ENUM, FLOAT, HSTORE, INET, INTEGER, \
- INTERVAL, JSON, MACADDR, NUMERIC, REAL, SMALLINT, TEXT, TIME, \
+ INTERVAL, JSON, MACADDR, NUMERIC, OID, REAL, SMALLINT, TEXT, TIME, \
TIMESTAMP, UUID, VARCHAR, INT4RANGE, INT8RANGE, NUMRANGE, \
DATERANGE, TSRANGE, TSTZRANGE, TSVECTOR
.. autoclass:: MACADDR
:members: __init__
+.. autoclass:: OID
+ :members: __init__
.. autoclass:: REAL
:members: __init__
from .base import \
INTEGER, BIGINT, SMALLINT, VARCHAR, CHAR, TEXT, NUMERIC, FLOAT, REAL, \
- INET, CIDR, UUID, BIT, MACADDR, DOUBLE_PRECISION, TIMESTAMP, TIME, \
+ INET, CIDR, UUID, BIT, MACADDR, OID, DOUBLE_PRECISION, TIMESTAMP, TIME, \
DATE, BYTEA, BOOLEAN, INTERVAL, ARRAY, ENUM, dialect, array, Any, All, \
TSVECTOR
from .constraints import ExcludeConstraint
__all__ = (
'INTEGER', 'BIGINT', 'SMALLINT', 'VARCHAR', 'CHAR', 'TEXT', 'NUMERIC',
- 'FLOAT', 'REAL', 'INET', 'CIDR', 'UUID', 'BIT', 'MACADDR',
+ 'FLOAT', 'REAL', 'INET', 'CIDR', 'UUID', 'BIT', 'MACADDR', 'OID',
'DOUBLE_PRECISION', 'TIMESTAMP', 'TIME', 'DATE', 'BYTEA', 'BOOLEAN',
'INTERVAL', 'ARRAY', 'ENUM', 'dialect', 'Any', 'All', 'array', 'HSTORE',
'hstore', 'INT4RANGE', 'INT8RANGE', 'NUMRANGE', 'DATERANGE',
PGMacAddr = MACADDR
+class OID(sqltypes.TypeEngine):
+ """Provide the Postgresql OID type.
+
+ .. versionadded:: 0.9.5
+
+ """
+ __visit_name__ = "OID"
+
+
class TIMESTAMP(sqltypes.TIMESTAMP):
def __init__(self, timezone=False, precision=None):
super(TIMESTAMP, self).__init__(timezone=timezone)
'bit': BIT,
'bit varying': BIT,
'macaddr': MACADDR,
+ 'oid': OID,
'double precision': DOUBLE_PRECISION,
'timestamp': TIMESTAMP,
'timestamp with time zone': TIMESTAMP,
def visit_MACADDR(self, type_):
return "MACADDR"
+ def visit_OID(self, type_):
+ return "OID"
+
def visit_FLOAT(self, type_):
if not type_.precision:
return "FLOAT"
finally:
metadata.drop_all()
+class OIDTest(fixtures.TestBase):
+ __only_on__ = 'postgresql'
+
+ @testing.provide_metadata
+ def test_reflection(self):
+ metadata = self.metadata
+ Table('table', metadata, Column('x', Integer),
+ Column('y', postgresql.OID))
+ metadata.create_all()
+ m2 = MetaData()
+ t2 = Table('table', m2, autoload_with=testing.db, autoload=True)
+ assert isinstance(t2.c.y.type, postgresql.OID)
+
class NumericInterpretationTest(fixtures.TestBase):
__only_on__ = 'postgresql'