Dificuldade na migração: não pode remover a função delete_user_password() pois outros objetos dependem dela.

PG::DependentObjectsStillExist: ERROR:  cannot drop function delete_user_password() because other objects depend on it

Parece vir daqui:

É uma pós-migração:


== 20240910090759 MakePasswordColumnsFromUsersReadOnly: migrando ===========
-- execute("DROP TRIGGER IF EXISTS users_password_sync_on_delete_password ON users;\n")
   -> 0.0007s
-- execute("DROP FUNCTION IF EXISTS delete_user_password;\n")
rake abortou!
StandardError: Ocorreu um erro, esta e todas as migrações posteriores foram canceladas: (StandardError)

PG::DependentObjectsStillExist: ERRO:  não é possível remover a função delete_user_password() porque outros objetos dependem dela
DETAIL:  o trigger users_password_sync_on_delete_password na tabela backup.users depende da função delete_user_password()
HINT:  Use DROP ... CASCADE para remover os objetos dependentes também.
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.0/lib/patches/db/pg/alias_method.rb:109:in `exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/rack-mini-profiler-4.0.0/lib/patches/db/pg/alias_method.rb:109:in `async_exec'
(eval at /var/www/discourse/lib/method_profiler.rb:38):24:in `async_exec'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:56:in `block (2 levels) in raw_execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:1004:in `block in with_raw_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/concurrency/null_lock.rb:9:in `synchronize'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:976:in `with_raw_connection'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:55:in `block in raw_execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activesupport-7.2.2.1/lib/active_support/notifications/instrumenter.rb:58:in `instrument'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract_adapter.rb:1119:in `log'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:54:in `raw_execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:538:in `internal_execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/database_statements.rb:137:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/abstract/query_cache.rb:27:in `execute'
/var/www/discourse/vendor/bundle/ruby/3.3.0/gems/activerecord-7.2.2.1/lib/active_record/connection_adapters/postgresql/database_statements.rb:48:in `execute'
1 curtida

Você tem tabelas no esquema backup (usado durante backups/restores) que dependem desta função.

O esquema backup está desatualizado? Se sim, você provavelmente só precisa de DROP SCHEMA backup aqui para se livrar dele.

1 curtida

Muito obrigado! Parece certo, mas quando faço isso, recebo coisas como :slight_smile:

table backup.group_archived_messages depends on schema backup
table backup.incoming_emails depends on schema backup
table backup.user_options depends on schema backup
table backup.email_change_requests depends on schema backup
table backup.given_daily_likes depends on schema backup
table backup.onceoff_logs depends on schema backup
table backup.tags depends on schema backup
table backup.topic_tags depends on schema backup
table backup.tag_users depends on schema backup
table backup.category_tags depends on schema backup
table backup.scheduler_stats depends on schema backup
table backup.tag_groups depends on schema backup

Este era um banco de dados novo/vazio quando comecei, então estou confuso por que tenho um banco de dados de backup obsoleto.

EDIT: Usei cascade, como foi dito:

DROP SCHEMA backup CASCADE;

Acho que isso resolveu! Levará 25 minutos antes que eu saiba e espero que eu já tenha parado de olhar para um computador até lá.

Voltarei amanhã.

Obrigado novamente.

1 curtida

Era isso. Tenho 99% de certeza de que interrompi uma restauração com Control-C por algum motivo (como levar 25 minutos) e isso deixou para trás o esquema desatualizado. Não acredito que isso não seja algo que eu tenha aprendido na última década, mas é assim mesmo!

Muito obrigado.

1 curtida

Este tópico foi fechado automaticamente 30 dias após a última resposta. Novas respostas não são mais permitidas.