From ba997bb3ff6a36b49ae51f9edbfab89bd7657282 Mon Sep 17 00:00:00 2001 From: forest Date: Mon, 16 Aug 2021 13:24:11 -0500 Subject: [PATCH] defer fkey constraints until end of txn -- allow change email --- capsulflask/db.py | 2 +- .../20_down_deferrable_constraints.sql | 21 +++++++++++++++++++ .../20_up_deferrable_constraints.sql | 21 +++++++++++++++++++ docs/database.md | 17 +++++++++++++++ 4 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 capsulflask/schema_migrations/20_down_deferrable_constraints.sql create mode 100644 capsulflask/schema_migrations/20_up_deferrable_constraints.sql diff --git a/capsulflask/db.py b/capsulflask/db.py index ddd7081..0c291a0 100644 --- a/capsulflask/db.py +++ b/capsulflask/db.py @@ -43,7 +43,7 @@ def init_app(app, is_running_server): hasSchemaVersionTable = False actionWasTaken = False schemaVersion = 0 - desiredSchemaVersion = 19 + desiredSchemaVersion = 20 cursor = connection.cursor() diff --git a/capsulflask/schema_migrations/20_down_deferrable_constraints.sql b/capsulflask/schema_migrations/20_down_deferrable_constraints.sql new file mode 100644 index 0000000..ecd2355 --- /dev/null +++ b/capsulflask/schema_migrations/20_down_deferrable_constraints.sql @@ -0,0 +1,21 @@ + +ALTER TABLE host_network ALTER CONSTRAINT host_network_host_fkey NOT DEFERRABLE; +ALTER TABLE host_operation ALTER CONSTRAINT host_operation_host_fkey NOT DEFERRABLE; +ALTER TABLE host_operation ALTER CONSTRAINT host_operation_operation_fkey NOT DEFERRABLE; +ALTER TABLE login_tokens ALTER CONSTRAINT login_tokens_email_fkey NOT DEFERRABLE; +ALTER TABLE operations ALTER CONSTRAINT operations_email_fkey NOT DEFERRABLE; +ALTER TABLE payment_sessions ALTER CONSTRAINT payment_sessions_email_fkey NOT DEFERRABLE; +ALTER TABLE payments ALTER CONSTRAINT payments_email_fkey NOT DEFERRABLE; +ALTER TABLE ssh_public_keys ALTER CONSTRAINT ssh_public_keys_email_fkey NOT DEFERRABLE; +ALTER TABLE unresolved_btcpay_invoices ALTER CONSTRAINT unresolved_btcpay_invoices_email_fkey NOT DEFERRABLE; +ALTER TABLE unresolved_btcpay_invoices ALTER CONSTRAINT unresolved_btcpay_invoices_email_payment_id_fkey NOT DEFERRABLE; +ALTER TABLE vm_ssh_authorized_key ALTER CONSTRAINT vm_ssh_public_key_email_ssh_public_key_name_fkey NOT DEFERRABLE; +ALTER TABLE vm_ssh_authorized_key ALTER CONSTRAINT vm_ssh_public_key_email_vm_id_fkey NOT DEFERRABLE; +ALTER TABLE vm_ssh_host_key ALTER CONSTRAINT vm_ssh_host_key_email_vm_id_fkey NOT DEFERRABLE; +ALTER TABLE vms ALTER CONSTRAINT vms_email_fkey NOT DEFERRABLE; +ALTER TABLE vms ALTER CONSTRAINT vms_host_network_name_fkey NOT DEFERRABLE; +ALTER TABLE vms ALTER CONSTRAINT vms_host_fkey NOT DEFERRABLE; +ALTER TABLE vms ALTER CONSTRAINT vms_os_fkey NOT DEFERRABLE; +ALTER TABLE vms ALTER CONSTRAINT vms_size_fkey NOT DEFERRABLE; + +UPDATE schemaversion SET version = 19; \ No newline at end of file diff --git a/capsulflask/schema_migrations/20_up_deferrable_constraints.sql b/capsulflask/schema_migrations/20_up_deferrable_constraints.sql new file mode 100644 index 0000000..b4b560a --- /dev/null +++ b/capsulflask/schema_migrations/20_up_deferrable_constraints.sql @@ -0,0 +1,21 @@ + +ALTER TABLE host_network ALTER CONSTRAINT host_network_host_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE host_operation ALTER CONSTRAINT host_operation_host_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE host_operation ALTER CONSTRAINT host_operation_operation_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE login_tokens ALTER CONSTRAINT login_tokens_email_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE operations ALTER CONSTRAINT operations_email_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE payment_sessions ALTER CONSTRAINT payment_sessions_email_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE payments ALTER CONSTRAINT payments_email_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE ssh_public_keys ALTER CONSTRAINT ssh_public_keys_email_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE unresolved_btcpay_invoices ALTER CONSTRAINT unresolved_btcpay_invoices_email_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE unresolved_btcpay_invoices ALTER CONSTRAINT unresolved_btcpay_invoices_email_payment_id_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE vm_ssh_authorized_key ALTER CONSTRAINT vm_ssh_public_key_email_ssh_public_key_name_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE vm_ssh_authorized_key ALTER CONSTRAINT vm_ssh_public_key_email_vm_id_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE vm_ssh_host_key ALTER CONSTRAINT vm_ssh_host_key_email_vm_id_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE vms ALTER CONSTRAINT vms_email_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE vms ALTER CONSTRAINT vms_host_network_name_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE vms ALTER CONSTRAINT vms_host_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE vms ALTER CONSTRAINT vms_os_fkey DEFERRABLE INITIALLY DEFERRED; +ALTER TABLE vms ALTER CONSTRAINT vms_size_fkey DEFERRABLE INITIALLY DEFERRED; + +UPDATE schemaversion SET version = 20; \ No newline at end of file diff --git a/docs/database.md b/docs/database.md index f192783..a3ef307 100644 --- a/docs/database.md +++ b/docs/database.md @@ -48,3 +48,20 @@ $ pipenv run flask cli sql -c "SELECT id, created, email, dollars, invalidated f ## how to view the logs on the database server (legion.cyberia.club) `sudo -u postgres pg_dump capsul-flask | gzip -9 > capsul-backup-2021-02-15.gz` + + +## changing the email address on an account + +``` +UPDATE accounts SET lower_case_email = 'new@email.address' WHERE email = 'old@email.address' ; +UPDATE accounts SET email = 'new@email.address' WHERE email = 'old@email.address' ; +UPDATE login_tokens SET email = 'new@email.address' WHERE email = 'old@email.address' ; +UPDATE operations SET email = 'new@email.address' WHERE email = 'old@email.address' ; +UPDATE payment_sessions SET email = 'new@email.address' WHERE email = 'old@email.address' ; +UPDATE payments SET email = 'new@email.address' WHERE email = 'old@email.address' ; +UPDATE ssh_public_keys SET email = 'new@email.address' WHERE email = 'old@email.address' ; +UPDATE unresolved_btcpay_invoices SET email = 'new@email.address' WHERE email = 'old@email.address' ; +UPDATE vm_ssh_authorized_key SET email = 'new@email.address' WHERE email = 'old@email.address' ; +UPDATE vm_ssh_host_key SET email = 'new@email.address' WHERE email = 'old@email.address' ; +UPDATE vms SET email = 'new@email.address' WHERE email = 'old@email.address' ; +```