البرمجة

كيفية الحصول على قائمة التسلسلات والجداول في PostgreSQL

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

sql
SELECT sequence_name, table_name, column_name FROM information_schema.sequences JOIN ( SELECT pg_get_serial_sequence(quote_ident(table_schema) || '.' || quote_ident(table_name), column_name) AS sequence_name, table_name, column_name FROM information_schema.columns WHERE table_schema NOT IN ('pg_catalog', 'information_schema') AND column_default LIKE 'nextval%' ) AS columns_with_sequences USING (sequence_name);

هذا الاستعلام يقوم بالتحقق من information_schema.sequences للحصول على قائمة التسلسلات، ثم يستخدم pg_get_serial_sequence للعثور على التسلسلات المرتبطة بأعمدة محددة في الجداول (information_schema.columns). يتم تجميع البيانات من الجدولين information_schema.sequences و information_schema.columns باستخدام JOIN، ويتم تصفية البيانات للاستبعاد قواعد البيانات المدمجة وقاعدة بيانات information_schema.

هذا الاستعلام يمكن أن يوفر لك القائمة التي تبحث عنها، وهي قائمة بجميع التسلسلات والجداول والأعمدة التي تم تطبيق التسلسل عليها في قاعدة البيانات الخاصة بك.

المزيد من المعلومات

بالتأكيد، يمكننا توسيع الاستعلام لنضيف المزيد من المعلومات حول التسلسلات والجداول والأعمدة. يمكننا على سبيل المثال إضافة المزيد من المعلومات حول نوع التسلسل والقيم الحالية والقيم البدئية، وذلك باستخدام معلومات من كائنات البيانات pg_sequences و pg_class:

sql
SELECT s.sequence_name, c.table_name, c.column_name, format_type(s.data_type, s.numeric_precision, s.numeric_scale) AS data_type, s.start_value, s.minimum_value, s.maximum_value, s.increment, s.cycle_option, s.last_value FROM information_schema.sequences s JOIN ( SELECT pg_get_serial_sequence(quote_ident(table_schema) || '.' || quote_ident(table_name), column_name) AS sequence_name, table_name, column_name FROM information_schema.columns WHERE table_schema NOT IN ('pg_catalog', 'information_schema') AND column_default LIKE 'nextval%' ) c USING (sequence_name) JOIN pg_class p ON s.sequence_name = p.relname;

هذا الاستعلام يضيف مزيدًا من المعلومات حول نوع التسلسل، والقيم الحالية والقيم البدئية، والقيم الدورية، وأخر قيمة تم إنشاؤها.

زر الذهاب إلى الأعلى