conn_col_default = rendered_inspector_default
+ defaults_equal = conn_col_default == rendered_metadata_default
+ if defaults_equal:
+ return False
+
if None in (conn_col_default, rendered_metadata_default):
- return conn_col_default != rendered_metadata_default
+ return not defaults_equal
if metadata_column.server_default is not None and \
isinstance(metadata_column.server_default.arg,
.. changelog::
:version: 0.8.6
+ .. change::
+ :tags: bug, postgresql
+ :tickets: 365
+
+ Added a fix to Postgresql server default comparison which first checks
+ if the text of the default is identical to the original, before attempting
+ to actually run the default. This accomodates for default-generation
+ functions that generate a new value each time such as a uuid function.
+
.. change::
:tags: bug, batch
:tickets: 361
return exclusions.fails_on_everything_except(
'postgresql', 'oracle', 'mssql', 'sybase')
+
+ @property
+ def postgresql_uuid_ossp(self):
+ def check_uuid_ossp(config):
+ if not exclusions.against(config, "postgresql"):
+ return False
+ try:
+ config.db.execute("SELECT uuid_generate_v4()")
+ return True
+ except:
+ return False
+
+ return exclusions.only_if(check_uuid_ossp)
from sqlalchemy import DateTime, MetaData, Table, Column, text, Integer, \
String, Interval, Sequence, Numeric, BigInteger, Float, Numeric
-from sqlalchemy.dialects.postgresql import ARRAY
+from sqlalchemy.dialects.postgresql import ARRAY, UUID
from sqlalchemy.engine.reflection import Inspector
from alembic.operations import Operations
from sqlalchemy.sql import table, column
"14 days"
)
+ @config.requirements.postgresql_uuid_ossp
+ def test_compare_uuid_text(self):
+ self._compare_default_roundtrip(
+ UUID,
+ text("uuid_generate_v4()")
+ )
+
def test_compare_interval_text(self):
self._compare_default_roundtrip(
Interval,