مشكلة في الترحيل: لا يمكن حذف الدالة delete_user_password() لأن كائنات أخرى تعتمد عليها

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

يبدو أنه يأتي من هنا:

إنها عملية ترحيل لاحقة:


== 20240910090759 MakePasswordColumnsFromUsersReadOnly: ترحيل =============
-- 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 aborted!
StandardError: لقد حدث خطأ، وتم إلغاء هذا الترحيل وجميع الترحيلات اللاحقة: (StandardError)

PG::DependentObjectsStillExist: خطأ: لا يمكن حذف الدالة delete_user_password() لأن كائنات أخرى تعتمد عليها
التفاصيل: المشغل users_password_sync_on_delete_password على الجدول backup.users يعتمد على الدالة delete_user_password()
تلميح: استخدم DROP ... CASCADE لحذف الكائنات التابعة أيضًا.
/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)

لديك جداول في مخطط backup (المستخدم أثناء النسخ الاحتياطي/الاستعادة) تعتمد على هذه الدالة.

هل مخطط backup هنا قديم؟ إذا كان الأمر كذلك، فربما تحتاج فقط إلى DROP SCHEMA backup هنا للتخلص منه.

إعجاب واحد (1)

شكراً جزيلاً! يبدو هذا صحيحاً، ولكن عندما أفعل ذلك، أحصل على أشياء مثل :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

كانت هذه قاعدة بيانات جديدة/فارغة عندما بدأت، لذلك أنا مرتبك لماذا لدي قاعدة بيانات احتياطية قديمة.

تحرير: لقد استخدمت cascade، كما أخبرني:

DROP SCHEMA backup CASCADE;

أخمن أن هذا حل المشكلة! سيستغرق الأمر 25 دقيقة قبل أن أعرف، وآمل أن أكون قد توقفت عن النظر إلى جهاز كمبيوتر بحلول ذلك الوقت.

سأبلغكم غداً.

شكراً مرة أخرى.

إعجاب واحد (1)

كان هذا هو الحل. أنا متأكد بنسبة 99٪ من أنني أوقفت استعادة باستخدام control-c لسبب ما (مثل أنها تستغرق 25 دقيقة) وتركت المخطط القديم خلفها. لا أصدق أن هذا ليس شيئًا تمكنت من تعلمه في العقد الماضي، ولكن هذا هو الحال!

شكراً جزيلاً.

إعجاب واحد (1)

تم إغلاق هذا الموضوع تلقائيًا بعد 30 يومًا من آخر رد. لم تعد الردود الجديدة مسموحًا بها.