Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ __Note that contact opDB manager if you make a new directory__

* make `db.cfg` in the directory where `alembic.ini` exists. This file contains the following string:
```sh
postgres://username:password@hostname:port/dbname
postgresql://username:password@hostname:port/dbname
```

__Note that DO NOT commit `db.cfg` on the repository__
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
"""Remove redundant unique constraints

Revision ID: 26a4e346fbf1
Revises: 06febe7976d8
Create Date: 2025-12-22 12:13:14.382321

"""
from alembic import op

# revision identifiers, used by Alembic.
revision = '26a4e346fbf1'
down_revision = '06febe7976d8'
branch_labels = None
depends_on = None

drop_constraints = [
[
"agc_data", # Table
"agc_data_agc_exposure_id_agc_camera_id_spot_id_key", # Constraint name
['agc_exposure_id', 'agc_camera_id', 'spot_id'], # Columns
[("agc_match", "agc_match_agc_exposure_id_fkey")] # Dependent foreign keys
],
[
"agc_match",
"agc_match_agc_exposure_id_agc_camera_id_spot_id_key",
["agc_exposure_id", "agc_camera_id", "spot_id"],
[]
],
[
"cobra_match",
"cobra_match_pfs_visit_id_iteration_cobra_id_key",
["pfs_visit_id", 'iteration', 'cobra_id'],
[("cobra_move", "cobra_move_pfs_visit_id_fkey"), ]
],
[
"cobra_move",
"cobra_move_pfs_visit_id_iteration_cobra_id_key",
["pfs_visit_id", "iteration", "cobra_id"],
[]
],
[
"cobra_target",
"cobra_target_pfs_visit_id_iteration_cobra_id_key",
["pfs_visit_id", "iteration", "cobra_id"],
[("cobra_match", "cobra_match_pfs_visit_id_fkey")]
],
[
"mcs_data",
"mcs_data_mcs_frame_id_spot_id_key",
["mcs_frame_id", "spot_id"],
[
("cobra_match", "cobra_match_mcs_frame_id_fkey"),
("fiducial_fiber_match", "fiducial_fiber_match_mcs_frame_id_fkey")
]
],
]


def upgrade():
for constraint in drop_constraints:
table_name = constraint[0]
constraint_name = constraint[1]
columns = constraint[2]
foreign_keys = constraint[3]
# Drop dependent foreign key constraints first
for fk in foreign_keys:
fk_table = fk[0]
fk_constraint_name = fk[1]
op.drop_constraint(
fk_constraint_name,
fk_table,
type_='foreignkey',
)
# Now drop the unique constraint
op.drop_constraint(
constraint_name,
table_name,
type_='unique',
)
# Recreate dependent foreign key constraints
for fk in foreign_keys:
fk_table = fk[0]
fk_constraint_name = fk[1]
op.create_foreign_key(
fk_constraint_name,
fk_table,
table_name,
local_cols=columns,
remote_cols=columns,
)


def downgrade():
for constraint in drop_constraints:
table_name = constraint[0]
constraint_name = constraint[1]
columns = constraint[2]
foreign_keys = constraint[3]
# Drop dependent foreign key constraints first
for fk in foreign_keys:
fk_table = fk[0]
fk_constraint_name = fk[1]
op.drop_constraint(
fk_constraint_name,
fk_table,
type_='foreignkey',
)
# Recreate the unique constraint
op.create_unique_constraint(
constraint_name,
table_name,
columns,
)
# Recreate dependent foreign key constraints
for fk in foreign_keys:
fk_table = fk[0]
fk_constraint_name = fk[1]
op.create_foreign_key(
fk_constraint_name,
fk_table,
table_name,
local_cols=columns,
remote_cols=columns,
)
14 changes: 3 additions & 11 deletions python/opdb/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -677,7 +677,6 @@ class mcs_data(Base):
'''

__tablename__ = 'mcs_data'
__table_args__ = (UniqueConstraint('mcs_frame_id', 'spot_id'), {})

mcs_frame_id = Column(Integer, ForeignKey('mcs_exposure.mcs_frame_id'), primary_key=True, index=True,
autoincrement=False)
Expand Down Expand Up @@ -1091,8 +1090,6 @@ class cobra_target(Base):
''' The actual movement of the cobra motor, in terms of individual MCS frames.
'''
__tablename__ = 'cobra_target'
__table_args__ = (UniqueConstraint('pfs_visit_id', 'iteration', 'cobra_id'),
{})

pfs_visit_id = Column(Integer, ForeignKey('pfs_visit.pfs_visit_id'),
primary_key=True, unique=False, autoincrement=False,
Expand Down Expand Up @@ -1137,8 +1134,7 @@ class cobra_move(Base):
''' The actual movement of the cobra motor, in terms of individual MCS frames.
'''
__tablename__ = 'cobra_move'
__table_args__ = (UniqueConstraint('pfs_visit_id', 'iteration', 'cobra_id'),
ForeignKeyConstraint(['pfs_visit_id', 'iteration', 'cobra_id'],
__table_args__ = (ForeignKeyConstraint(['pfs_visit_id', 'iteration', 'cobra_id'],
['cobra_match.pfs_visit_id', 'cobra_match.iteration', 'cobra_match.cobra_id']),
{})

Expand Down Expand Up @@ -1190,8 +1186,7 @@ class cobra_match(Base):
'''Defines the status of each cobra at each step during convergence.
'''
__tablename__ = 'cobra_match'
__table_args__ = (UniqueConstraint('pfs_visit_id', 'iteration', 'cobra_id'),
ForeignKeyConstraint(['pfs_visit_id', 'iteration', 'cobra_id'],
__table_args__ = (ForeignKeyConstraint(['pfs_visit_id', 'iteration', 'cobra_id'],
['cobra_target.pfs_visit_id', 'cobra_target.iteration', 'cobra_target.cobra_id']),
ForeignKeyConstraint(['mcs_frame_id', 'spot_id'],
['mcs_data.mcs_frame_id', 'mcs_data.spot_id']),
Expand Down Expand Up @@ -1720,8 +1715,6 @@ class agc_data(Base):
'''

__tablename__ = 'agc_data'
__table_args__ = (UniqueConstraint('agc_exposure_id', 'agc_camera_id', 'spot_id'),
{})

agc_exposure_id = Column(Integer, ForeignKey('agc_exposure.agc_exposure_id'),
primary_key=True, autoincrement=False,
Expand Down Expand Up @@ -1773,8 +1766,7 @@ class agc_match(Base):
'''

__tablename__ = 'agc_match'
__table_args__ = (UniqueConstraint('agc_exposure_id', 'agc_camera_id', 'spot_id'),
ForeignKeyConstraint(['agc_exposure_id', 'agc_camera_id', 'spot_id'],
__table_args__ = (ForeignKeyConstraint(['agc_exposure_id', 'agc_camera_id', 'spot_id'],
['agc_data.agc_exposure_id', 'agc_data.agc_camera_id', 'agc_data.spot_id']),
{})

Expand Down