phppgadmin: كيف يركب المستخدمون من الخوارز، لذلك يمكن db_drop؟

StackOverflow https://stackoverflow.com/questions/2432555

  •  19-09-2019
  •  | 
  •  

سؤال

لدي قاعدة بيانات POSGRESQL واحدة (أنا المالك) وأرغب في إسقاطها وإعادة إنشاءها من تفريغ.

المشكلة هي، هناك تطبيقات زوجين (موقعين على شبكة الإنترنت، قضبان و perl) التي تصل إلى DB بانتظام. حتى أحصل على "قاعدة بيانات يتم الوصول إليها من قبل المستخدمين الآخرين".

لقد قرأت أن احتمال واحد هو الحصول على PIDs من العمليات المعنية وقتلها بشكل فردي. أود أن أفعل شيئا نظيفا، إن أمكن.

يبدو أن phppgadmin تفعل ما أريد: يمكنني إسقاط المخططات باستخدام واجهة الويب الخاصة بها، حتى عندما تكون مواقع الويب قيد التشغيل، دون الحصول على أخطاء. لذلك أنا التحقيق في كيفية عمل الكود الخاص به. ومع ذلك، أنا لا خبير فب.

أحاول فهم رمز PHPPGADMIN من أجل معرفة كيف يفعل ذلك. اكتشفت خط (257 في schemas.php) حيث يقول:

$data->dropSchema(...)

$data هو متغير عالمي ولم أجد مكان محدد.

إن أي مؤشرات سيتم تقدير كبير.

هل كانت مفيدة؟

المحلول

أولا، ابحث عن جميع Procesid الحالي باستخدام قاعدة البيانات الخاصة بك:

SELECT usename, procpid FROM pg_stat_activity WHERE datname = current_database();

ثانيا، اقتل العمليات التي لا تريدها:

SELECT pg_terminate_backend(your_procpid);

يعمل هذا اعتبارا من الإصدار 8.4، وإلا pg_terminate_backend () غير معروف، وعليك أن تقتل العملية على مستوى نظام التشغيل.


لإسقاط جميع الاتصالات بسرعة متصلة بقاعدة بيانات معينة، يعمل الاختصار هذا بشكل جيد. يجب أن تعمل كخطأ:

SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE datname='YourDB';

في إصدارات Postgres أحدث (ما لا يقل عن 9.2+، من المحتمل سابقا)، تغيرت أسماء الأعمدة والاستعلام هو:

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='YourDB';

نصائح أخرى

لست متأكدا من postgresql ولكن أعتقد أن الحل المحتمل سيكون لقفل الجدول حتى تفشل العمليات الأخرى عندما يحاولون الوصول إليها.

يرى:http://www.postgresql.org/docs/current/static/sql-lock.html.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top