PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

एलेम्बिक का उपयोग करके एक एनम फ़ील्ड को बदलना

मैंने यथासंभव सीधे पोस्टग्रेज दृष्टिकोण का अनुसरण करने का प्रयास करने का निर्णय लिया और निम्नलिखित माइग्रेशन के साथ आया।

from alembic import op
import sqlalchemy as sa

old_options = ('nonexistent_executable', 'signal', 'success', 'timed_out')
new_options = sorted(old_options + ('output_limit_exceeded',))

old_type = sa.Enum(*old_options, name='status')
new_type = sa.Enum(*new_options, name='status')
tmp_type = sa.Enum(*new_options, name='_status')

tcr = sa.sql.table('testcaseresult',
                   sa.Column('status', new_type, nullable=False))


def upgrade():
    # Create a tempoary "_status" type, convert and drop the "old" type
    tmp_type.create(op.get_bind(), checkfirst=False)
    op.execute('ALTER TABLE testcaseresult ALTER COLUMN status TYPE _status'
               ' USING status::text::_status')
    old_type.drop(op.get_bind(), checkfirst=False)
    # Create and convert to the "new" status type
    new_type.create(op.get_bind(), checkfirst=False)
    op.execute('ALTER TABLE testcaseresult ALTER COLUMN status TYPE status'
               ' USING status::text::status')
    tmp_type.drop(op.get_bind(), checkfirst=False)


def downgrade():
    # Convert 'output_limit_exceeded' status into 'timed_out'
    op.execute(tcr.update().where(tcr.c.status==u'output_limit_exceeded')
               .values(status='timed_out'))
    # Create a tempoary "_status" type, convert and drop the "new" type
    tmp_type.create(op.get_bind(), checkfirst=False)
    op.execute('ALTER TABLE testcaseresult ALTER COLUMN status TYPE _status'
               ' USING status::text::_status')
    new_type.drop(op.get_bind(), checkfirst=False)
    # Create and convert to the "old" status type
    old_type.create(op.get_bind(), checkfirst=False)
    op.execute('ALTER TABLE testcaseresult ALTER COLUMN status TYPE status'
               ' USING status::text::status')
    tmp_type.drop(op.get_bind(), checkfirst=False)

ऐसा प्रतीत होता है कि एलेम्बिक का USING . के लिए कोई सीधा समर्थन नहीं है इसके alter_table . में स्टेटमेंट विधि।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL कैसे देखें कि कौन से प्रश्न चले हैं

  2. निर्दिष्ट निर्देशांक से 5 मील की सीमा में सभी भवन प्राप्त करना

  3. पोस्टग्रेज़ में एन्क्रिप्टेड डेटा संग्रहीत करना

  4. Postgresql SQL GROUP BY समय अंतराल मनमाने ढंग से सटीकता के साथ (मिली सेकंड तक)

  5. एक टेलीफोन नंबर को स्ट्रिंग बनाम पूर्णांक के रूप में स्टोर करना सबसे अच्छा क्यों है?