أجهزة الكمبيوتر شبابيك إنترنت

أوامر PostgreSQL الأساسية. أوامر PostgreSQL الأساسية البحث عن موقع مثيل الكتلة وتغييره

مرحبًا ، أريد اليوم عمل مذكرة صغيرة حول أوامر PostgreSQL الأساسية. يمكنك العمل مع PosgreSQL بشكل تفاعلي ومن سطر الأوامر. البرنامج هو psql. أنا متأكد من أن هذه القائمة ستكون مفيدة جدًا لك وستوفر لك الوقت في البحث من خلال الموارد المختلفة. اسمحوا لي أن أذكركم أن هذا مشروع مفتوح المصدر ، يعتمد على Postgres DBMS ، وقد تم إصداره في عام 1986 ، ويتم تطويره من قبل مجموعة عالمية من مطوري PGDG ، في جوهره من 5 إلى 8 أشخاص ، ولكن على الرغم من ذلك فهو كذلك تطوير مكثف للغاية ، وإدخال جميع الوظائف الجديدة وإصلاح الأخطاء والأخطاء القديمة.

أوامر PostgreSQL الأساسية في الوضع التفاعلي:

  • \ connect db_name - الاتصال بقاعدة بيانات باسم db_name
  • \ du - قائمة المستخدمين
  • \ dp (or \ z) - قائمة الجداول ، طرق العرض ، التسلسلات ، حقوق الوصول إليها
  • \ دي - المؤشرات
  • \ ds - التسلسلات
  • \ dt - قائمة الجداول
  • \ dt + - قائمة بجميع الجداول مع الوصف
  • \ dt * s * - قائمة بجميع الجداول التي تحتوي على s في الاسم
  • \ dv - المشاهدات
  • \ dS - جداول النظام
  • \ d + - وصف الجدول
  • \ o - إرسال نتائج الاستعلام إلى ملف
  • \ l - قائمة قواعد البيانات
  • \ i - قراءة البيانات الواردة من ملف
  • \ هـ - يفتح المحتويات الحالية لمخزن الطلب المؤقت في المحرر (ما لم يتم تحديد خلاف ذلك في بيئة متغير EDITOR ، سيتم استخدام vi افتراضيًا)
  • \ d "اسم_الجدول" - وصف الجدول
  • \ أقوم بتشغيل الأمر من ملف خارجي مثل \ i /my/directory/my.sql
  • \ pset - أمر لتعيين معلمات التنسيق
  • \ صدى - يعرض رسالة
  • \ مجموعة - تحدد قيمة متغير البيئة. بدون معلمات ، يعرض قائمة المتغيرات الحالية (\ unset - يزيل).
  • \؟ - مرجع بسكل
  • \ مساعدة - مرجع SQL
  • \ q (أو Ctrl + D) - الخروج من البرنامج

العمل مع PostgreSQL من سطر الأوامر:

  • -c (أو -command) - قم بتشغيل أمر SQL دون الدخول في الوضع التفاعلي
  • -f file.sql - تنفيذ الأوامر من ملف file.sql
  • -l (أو -list) - يسرد قواعد البيانات المتاحة
  • -U (أو -username) - حدد اسم المستخدم (على سبيل المثال postgres)
  • -W (or -password) - موجه كلمة المرور
  • -d dbname - الاتصال بقاعدة البيانات dbname
  • -h - اسم المضيف (الخادم)
  • -s - الوضع خطوة بخطوة ، أي أنك ستحتاج إلى تأكيد جميع الأوامر
  • –S - وضع سطر واحد ، أي سطر جديد سينفذ الاستعلام (تخلص منه ، في نهاية جملة SQL)
  • -V - إصدار PostgreSQL دون الدخول إلى الوضع التفاعلي

أمثلة:

psql -U postgres -d dbname -c "CREATE TABLE my (Some_id serial PRIMARY KEY، some_text text)؛" - تنفيذ الأمر في قاعدة بيانات dbname.

psql -d dbname -H -c "SELECT * FROM my" -o my.html - إخراج نتيجة الاستعلام إلى ملف html.

أدوات PosgreSQL (البرامج):

  • createb و dropdb - إنشاء قاعدة بيانات وإفلاتها (على التوالي)
  • Creatuser و dropuser - إنشاء ومستخدم (على التوالي)
  • pg_ctl - برنامج مصمم لحل مهام الإدارة العامة (بدء ، إيقاف ، تكوين المعلمات ، إلخ.)
  • postmaster - وحدة خادم متعددة المستخدمين PostgreSQL (ضبط مستويات تصحيح الأخطاء ، المنافذ ، أدلة البيانات)
  • initdb - إنشاء مجموعات PostgreSQL جديدة
  • initlocation - برنامج لإنشاء أدلة للتخزين الثانوي لقواعد البيانات
  • Vacuumdb - صيانة قواعد البيانات المادية والتحليلية
  • pg_dump - النسخ الاحتياطي واستعادة البيانات
  • pg_dumpall - احتفظ بنسخة احتياطية من مجموعة PostgreSQL بأكملها
  • pg_restore - استعادة قاعدة بيانات من الأرشيفات (.tar ، .tar.gz)

أمثلة على إنشاء نُسخ احتياطية:

إنشاء نسخة احتياطية من قاعدة بيانات mydb بصيغة مضغوطة

Pg_dump -h localhost -p 5440 -U someuser -F c -b -v -f mydb.backup mydb

إنشاء نسخة احتياطية من قاعدة بيانات mydb ، في شكل ملف نص عادي ، بما في ذلك أمر لإنشاء قاعدة بيانات

Pg_dump -h localhost -p 5432 -U someuser -C -F p -b -v -f mydb.backup mydb

إنشاء نسخة احتياطية من قاعدة بيانات mydb ، بصيغة مضغوطة ، بجداول تحتوي على مدفوعات بالاسم

Pg_dump -h localhost -p 5432 -U someuser -F c -b -v -t * payments * -f payment_tables.backup mydb

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

Pg_dump -a -t table_name -f file_name database_name

عمل نسخة احتياطية بضغط gz

Pg_dump -h localhost -O -F p -c -U postgres mydb | gzip -c> mydb.gz

قائمة بالخيارات الأكثر استخدامًا:

  • -h host - مضيف ، إذا لم يتم تحديده ، فسيتم استخدام المضيف المحلي أو القيمة من متغير البيئة PGHOST.
  • -p port - port ، إذا لم يتم تحديده ، فسيتم استخدام 5432 أو القيمة من متغير البيئة PGPORT.
  • -u - المستخدم ، إذا لم يتم تحديده ، يتم استخدام المستخدم الحالي ، ويمكن أيضًا تحديد القيمة في متغير بيئة PGUSER.
  • -a ، -data-only - تفريغ البيانات والبيانات والمخطط فقط يتم حفظها افتراضيًا.
  • -ب - قم بتضمين الأشياء الكبيرة (المدونات) في ملف التفريغ.
  • -s، -schema-only - مخطط التفريغ فقط.
  • -C، -create - يضيف أمرًا لإنشاء قاعدة بيانات.
  • -c - يضيف أوامر لإسقاط (إسقاط) كائنات (جداول ، طرق عرض ، إلخ).
  • -O - ​​لا تقم بإضافة أوامر لتعيين مالك كائن (جداول ، طرق عرض ، إلخ).
  • -F ، -format (c | t | p) - تنسيق تفريغ الإخراج ، مخصص ، القطران ، أو نص عادي.
  • -t، -table = TABLE - حدد جدولًا معينًا لتفريغ.
  • -v ، -verbose - إخراج معلومات مطولة.
  • -D، -attribute-inserts - تفريغ باستخدام أمر INSERT مع قائمة بأسماء الخصائص.

قم بعمل نسخة احتياطية من جميع قواعد البيانات باستخدام الأمر pg_dumpall.

Pg_dumpall> all.sql

استعادة الجداول من النسخ الاحتياطية (النسخ الاحتياطية):

psql - استعادة النسخ الاحتياطية المخزنة في ملف نصي عادي ؛
pg_restore - استعادة النسخ الاحتياطية المضغوطة (القطران) ؛

استعادة النسخة الاحتياطية بالكامل مع تجاهل الأخطاء

Psql -h localhost -U Someuser -d dbname -f mydb.sql

استعادة النسخة الاحتياطية بالكامل ، مع التوقف عند الخطأ الأول

Psql -h localhost -U someuser -set ON_ERROR_STOP = on -f mydb.sql

للاستعادة من أرشيف tar ، نحتاج أولاً إلى إنشاء قاعدة بيانات باستخدام CREATE DATABASE mydb ؛ (إذا لم يتم تحديد الخيار -C عند إنشاء نسخة احتياطية) واستعادة

Pg_restore -dbname = mydb -jobs = 4-overbose mydb.backup

استعادة نسخة احتياطية لقاعدة بيانات مضغوطة بتنسيق gz

psql -U postgres -d mydb -f mydb

أعتقد أن قاعدة بيانات postgresql ستكون الآن أكثر وضوحًا لك. آمل أن تكون قائمة أوامر PostgreSQL هذه مفيدة لك.

آخر تحديث: 17.03.2018

لإنشاء جداول ، استخدم الأمر CREATE TABLE متبوعًا باسم الجدول. هناك أيضًا عدد من العوامل التي يمكن استخدامها مع هذا الأمر والتي تحدد أعمدة الجدول وخصائصها. الصيغة العامة لإنشاء جدول هي كما يلي:

إنشاء اسم الجدول الجدول (العمود_اسم_العمود 1 نوع البيانات العمود_سمات 1 ، العمود_اسم_العمود 2 نوع البيانات العمود_سمات 2 ، .................................... .. .......... العمود اسم_العمود_سمات_عمود_سمات_جدول_سمات) ؛

يتم سرد المواصفات لجميع الأعمدة بين قوسين بعد اسم الجدول. علاوة على ذلك ، بالنسبة لكل عمود ، يجب الإشارة إلى اسم ونوع البيانات التي سيمثلها. يحدد نوع البيانات البيانات (الأرقام والسلاسل وما إلى ذلك) التي يمكن أن يحتوي عليها العمود.

على سبيل المثال ، لنقم بإنشاء جدول في قاعدة البيانات عبر pgAdmin. للقيام بذلك ، حدد أولاً قاعدة البيانات الهدف في pgAdmin ، وانقر بزر الماوس الأيمن عليها وحدد أداة الاستعلام ... عنصر في قائمة السياق:

بعد ذلك ، سيتم فتح حقل لإدخال كود SQL. علاوة على ذلك ، سيتم إنشاء الجدول خصيصًا لقاعدة البيانات التي سنفتح لها هذا الحقل لإدخال SQL.

إنشاء عملاء جدول (Id SERIAL PRIMARY KEY، FirstName CHARACTER VARYING (30)، LastName CHARACTER VARYING (30)، Email CHARACTER VARYING (30)، Age INTEGER) ؛

في هذه الحالة ، يحدد جدول العملاء خمسة أعمدة: المعرف ، الاسم الأول ، اسم العائلة ، العمر ، البريد الإلكتروني. العمود الأول ، المعرف ، يمثل معرف العميل ، وهو بمثابة المفتاح الأساسي وبالتالي فهو من النوع SERIAL. في الواقع ، سيخزن هذا العمود القيمة الرقمية 1 ، 2 ، 3 ، وما إلى ذلك ، والتي ستزيد تلقائيًا بمقدار واحد لكل صف جديد.

تمثل الأعمدة الثلاثة التالية الاسم الأول للعميل واسم العائلة وعنوان البريد الإلكتروني وهي من النوع CHARACTER VARYING (30) ، أي أنها تمثل سلسلة لا تزيد عن 30 حرفًا.

يمثل العمود الأخير ، العمر ، عمر المستخدم وهو من النوع الصحيح ، أي أنه يخزن الأرقام.

وبعد تنفيذ هذا الأمر ، ستتم إضافة جدول العملاء إلى قاعدة البيانات المحددة.

طاولات إسقاط

لإسقاط الجداول ، استخدم أمر DROP TABLE ، الذي يحتوي على بناء الجملة التالي:

DROP TABLE table1 [، table2 ، ...] ؛

على سبيل المثال ، إسقاط طاولة العملاء.

من البدائل للعمل مع قاعدة البيانات من خلال وحدة التحكم بيئة أكثر سهولة لأي عميل بواجهة رسومية. على سبيل المثال، pgAdmin... تثبيته بسيط للغاية ، نقوم بتشغيله بحقوق المستخدم المتميز:

sudo apt-get install pgadmin3
الآن يمكنك الركض pgAdminمن خلال واجهة رسومية. حدد خادم قاعدة البيانات المحلي من القائمة (يحتوي على منفذ افتراضي 5432) وأضف قاعدة البيانات التي أنشأناها بالفعل باستخدام المعلمات التي حددناها.
pgAdmin

في هذا الخادم المحلي بجانب العقدة قواعد بياناتيمكنك أيضًا العثور على عقدة تسمى أدوار تسجيل الدخول- كل الأدوار المتاحة.

دعنا نختار من بين جميع قواعد البيانات المتاحة تلك التي أنشأناها. تحتوي قاعدة البيانات على أنواع مختلفة من الكائنات. يجب إيلاء اهتمام خاص للجداول والتسلسلات ( تسلسل).

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

أولاً ، لنقم بإنشاء تسلسل. نحن نختار المتتاليات - تسلسل جديد... في علامة التبويب الأولى ، أدخل الاسم وحدده كـ صاحبالدور الذي أنشأناه. لن يكون هذا التسلسل متاحًا لأدوار أخرى. في علامة التبويب الثانية في الحقول زيادة راتبو يبدأندخل واحدًا تلو الآخر (ما لم تطلب غير ذلك). في علامة التبويب الأخيرة لمربع الحوار ، يمكنك رؤية استعلام SQL الناتج الذي سيتم تنفيذه على قاعدة البيانات.

بعد إنشاء التسلسل ، لنبدأ في إنشاء الجدول. نشير أيضًا إلى اسمها ومالكها (المالك). في علامة التبويب الرابعة الأعمدةنضيف أولًا المفتاح الأساسي. زر يضيف، في النافذة التي تظهر ، حدد اسم العمود ، على سبيل المثال ، هوية شخصية... نختار كنوع البيانات بيجينت... في علامة التبويب الثانية تعريففي الميدان القيمة الافتراضيةنشير إلى تسلسلنا. يجب أن يحتوي الحقل على قيمة النموذج nextval ("message_id_seq" :: regclass)... أي أنه في كل مرة يتم فيها إضافة سطر جديد ، سيتم أخذ القيمة التالية من التسلسل. تمت إضافة أعمدة أخرى حسب الحاجة. أخيرًا ، في علامة التبويب القيودإضافة قيد على المفتاح الأساسي ( المفتاح الأساسي). في علامة التبويب الأخيرة ، يمكننا الإعجاب بكود SQL الناتج الذي أنشأه pgAdmin. بعد النقر فوق "موافق" ، سيتم إنشاء الجدول.

بدلاً من bigint كمفتاح أساسي ، يمكنك تحديده كنوع العمود بيجسريال... يتم زيادة هذا النوع تلقائيًا مع إضافة كل صف جديد ، لذلك ليست هناك حاجة لإنشاء تسلسل له. هذا هو ، في أبسط الحالات ، إذا لم يكن لديك أي قواعد خاصة لإنشاء معرف السجل ، فيمكنك التوصية باستخدام bigserial.

دعونا نرى محتويات طاولتنا. للقيام بذلك ، انقر بزر الماوس الأيمن فوقه واختر من قائمة السياق عرض البيانات - اعرض 100 صف.

في نفس النافذة ، يمكنك تحرير قيمة أي خلية في الجدول بسرعة. إذا كان الجدول الخاص بك يحتوي على أكثر من 100 سجل ، فقم بتغيير عدد السجلات المعروضة في القائمة المنسدلة أعلى النافذة. يمكنك عرض 100 أو 500 أو 1000 أو كافة السجلات. لكن هذه ليست أكثر من طريقة لإلقاء نظرة سريعة على محتويات الجدول ويجب ألا تعتاد عليها. إذا كان لديك عشرات الآلاف من السجلات في جدولك ، فلن أوصي بعرض جميع السجلات مرة واحدة - في هذه الحالة ، من الأفضل كتابة استعلام باستخدام المعلمات حدو عوض.

15 أمرًا مفيدًا لـ PostgreSQL

هناك العديد من دروس PostgreSQL على الشبكة التي تصف الأوامر الأساسية. ولكن كلما تعمقت في العمل ، تظهر مشكلات عملية تتطلب فرقًا متقدمة.

نادرًا ما يتم توثيق مثل هذه الأوامر أو المقتطفات. دعونا نلقي نظرة على بعض الأمثلة المفيدة لكل من المطورين ومسؤولي قواعد البيانات.

الحصول على معلومات حول قاعدة بيانات

حجم قاعدة البيانات

للحصول على الحجم الفعلي لملفات (تخزين) قاعدة البيانات ، نستخدم الاستعلام التالي:

حدد pg_database_size (current_database ()) ،

سيتم عرض النتيجة كرقم مثل 41809016.

Current_database () هي دالة تقوم بإرجاع اسم قاعدة البيانات الحالية. بدلاً من ذلك ، يمكنك إدخال اسم في النص:

حدد pg_database_size ("my_database") ؛

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

حدد pg_size_pretty (pg_database_size (current_database ())) ؛

نتيجة لذلك ، نحصل على معلومات من النموذج 40 ميغا بايت.

قائمة جداول

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

حدد اسم الجدول من information_schema.tables حيث لا يوجد table_schema ("information_schema"، "pg_catalog") ؛

information_schema هو مخطط قاعدة بيانات قياسي يحتوي على مجموعات من طرق العرض مثل الجداول والحقول وما إلى ذلك. تحتوي طرق عرض الجدول على معلومات حول كافة الجداول الموجودة في قاعدة البيانات.

سيحدد الاستعلام الموضح أدناه جميع الجداول من المخطط المحدد لقاعدة البيانات الحالية:

حدد اسم الجدول من information_schema.tables حيث لا يوجد table_schema ("information_schema"، "pg_catalog") AND table_schema IN ("public"، "myschema") ؛

في بند IN الأخير ، يمكنك تحديد اسم مخطط معين.

حجم الجدول

عن طريق القياس مع الحصول على حجم قاعدة البيانات ، يمكن حساب حجم بيانات الجدول باستخدام الوظيفة المقابلة:

حدد pg_relation_size ("الحسابات") ؛

ترجع الدالة pg_relation_size مقدار المساحة التي تشغلها الطبقة المحددة من الجدول أو الفهرس المحدد على القرص.

اسم أكبر طاولة

لعرض قائمة الجداول في قاعدة البيانات الحالية ، مرتبة حسب حجم الجدول ، قم بتنفيذ الاستعلام التالي:

حدد relname ، relpages من pg_class ORDER BY relpages DESC ؛

لعرض معلومات حول الجدول الأكبر ، قمنا بتقييد الاستعلام باستخدام LIMIT:

حدد relname ، relpages من pg_class ORDER BY relpages DESC LIMIT 1 ؛

relname هو اسم الجدول ، والفهرس ، والعرض ، وما إلى ذلك.
relpages - حجم العرض على القرص لهذا الجدول في عدد الصفحات (افتراضيًا ، تبلغ الصفحة الواحدة 8 كيلوبايت).
pg_class هو جدول نظام يحتوي على معلومات حول العلاقات بين جداول قاعدة البيانات.

قائمة المستخدمين المتصلين

لمعرفة الاسم وعنوان IP والمنفذ المستخدم للمستخدمين المتصلين ، قم بتشغيل الاستعلام التالي:

حدد اسم البيانات ، اسم المستخدم ، client_addr ، client_port من pg_stat_activity ؛

نشاط المستخدم

لمعرفة نشاط الاتصال لمستخدم معين ، نستخدم الاستعلام التالي:

حدد اسم البيانات من pg_stat_activity حيث usename = "devuser" ؛

العمل مع البيانات وحقول الجدول

إزالة الخطوط المكررة

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

  • خطوط مكررة ،
  • المواقف التي يتم فيها تكرار عمود واحد أو أكثر (إذا كان من المفترض استخدام هذه الأعمدة كمفتاح أساسي).

ضع في اعتبارك جدولًا يحتوي على بيانات العميل ، حيث يتم تكرار صف كامل (الثاني على التوالي).

سيساعد الاستعلام التالي في إزالة جميع التكرارات:

احذف من العملاء حيث لم يكن ctid موجودًا (حدد max (ctid) من مجموعة العملاء حسب العملاء. *) ؛

يتم إخفاء حقل ctid ، الذي يعتبر فريدًا لكل سجل ، بشكل افتراضي ، ولكنه موجود في كل جدول.

الطلب الأخير كثيف الموارد ، لذا كن حذرًا عند تنفيذه في مشروع إنتاج.

الآن ضع في اعتبارك الحالة التي يتم فيها تكرار قيم الحقل.

إذا كان من الممكن حذف التكرارات دون حفظ جميع البيانات ، فسنقوم بتنفيذ الاستعلام التالي:

احذف من العملاء حيث لم يكن ctid موجودًا (حدد max (ctid) من مجموعة العملاء حسب customer_id) ؛

إذا كانت البيانات مهمة ، فأنت بحاجة أولاً إلى البحث عن السجلات ذات التكرارات:

حدد * من العملاء حيث لم يكن ctid موجودًا (حدد max (ctid) من مجموعة العملاء حسب customer_id) ؛

قبل حذف هذه السجلات ، يمكنك الانتقال إلى جدول مؤقت أو استبدال قيمة customer_id فيها بأخرى.

الشكل العام لطلب حذف السجلات الموضحة أعلاه هو كما يلي:

احذف من table_name حيث لا يكون ctid موجودًا (حدد الحد الأقصى (ctid) من اسم الجدول المجموعة حسب العمود 1 ،) ؛

تغيير نوع الحقل بأمان

قد يطرح السؤال حول إدراج مثل هذه المهمة في هذه القائمة. في الواقع ، في PostgreSQL ، من السهل جدًا تغيير نوع الحقل باستخدام الأمر ALTER. دعنا نلقي نظرة على طاولة العملاء مرة أخرى كمثال.

يستخدم الحقل customer_id نوع بيانات سلسلة varchar. هذا خطأ لأن هذا الحقل من المفترض أن يخزن معرفات العملاء ، والتي تكون بتنسيق عدد صحيح. استخدام varchar غير مبرر. دعنا نحاول تصحيح سوء الفهم هذا باستخدام الأمر ALTER:

ALTER TABLE عملاء ALTER COLUMN customer_id TYPE عدد صحيح ؛

لكن نتيجة الإعدام حصلنا على خطأ:

خطأ: لا يمكن تحويل العمود "customer_id" تلقائيًا إلى نوع عدد صحيح
حالة SQL: 42804
تلميح: حدد تعبير USING لإجراء التحويل.

هذا يعني أنه لا يمكنك فقط أخذ نوع الحقل وتغييره إذا كان هناك بيانات في الجدول. منذ أن تم استخدام نوع varchar ، لا يمكن لـ DBMS تحديد ما إذا كانت القيمة عددًا صحيحًا. على الرغم من أن البيانات تتوافق تمامًا مع هذا النوع. لتوضيح هذه النقطة ، تقترح رسالة الخطأ استخدام تعبير USING لتحويل بياناتنا بشكل صحيح إلى عدد صحيح:

ALTER TABLE عملاء ALTER COLUMN customer_id TYPE عدد صحيح باستخدام (customer_id :: عدد صحيح) ؛

نتيجة لذلك ، ذهب كل شيء دون أخطاء:

يرجى ملاحظة أنه عند استخدام USING ، بالإضافة إلى تعبير معين ، من الممكن استخدام الوظائف والحقول الأخرى وعوامل التشغيل.

على سبيل المثال ، دعنا نحول حقل customer_id مرة أخرى إلى varchar ، ولكن مع تحويل تنسيق البيانات:

ALTER TABLE عملاء ALTER COLUMN customer_id TYPE varchar USING (customer_id || "-" || first_name) ؛

نتيجة لذلك ، سيبدو الجدول كما يلي:

البحث عن القيم "المفقودة"

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

لنفكر في خيارين للبحث.

الطريقة الأولى
دعنا ننفذ الاستعلام التالي للعثور على بداية الفترة الزمنية بالقيمة "الضائعة":

حدد customer_id + 1 من العملاء مو حيث لا يوجد (حدد NULL من العملاء من حيث mi.customer_id = mo.customer_id + 1) ORDER BY customer_id ؛

نتيجة لذلك ، نحصل على القيم: 5 و 9 و 11.

إذا كنت بحاجة إلى العثور ليس فقط على التكرار الأول ، ولكن كل القيم المفقودة ، فإننا نستخدم الاستعلام التالي (كثيف الموارد!):

مع seq_max AS (SELECT max (customer_id) من العملاء) ، seq_min AS (SELECT min (customer_id) من العملاء) حدد * FROM create_series ((SELECT min from seq_min) ، (SELECT max FROM seq_max)) EXCEPT SELECT customer_id FROM customers ؛

نتيجة لذلك ، نرى النتيجة التالية: 5 و 9 و 6.

الطريقة الثانية
نحصل على اسم التسلسل المرتبط بـ customer_id:

حدد pg_get_serial_sequence ("العملاء"، "customer_id") ؛

ونجد جميع المعرفات المفقودة:

WITH التسلسل_المعلومات AS (SELECT start_value، last_value من "SchemaName". "SequenceName") SELECT create_series ((sequence_info.start_value)، (sequence_info.last_value)) من التسلسل_المعلومات EXCEPT حدد customer_id من العملاء ؛

حساب عدد الصفوف في الجدول

يتم حساب عدد الصفوف بواسطة دالة العد القياسي ، ولكن يمكن استخدامها مع شروط إضافية.

إجمالي عدد الصفوف في الجدول:

حدد العد (*) من الجدول ؛

عدد الصفوف بشرط ألا يحتوي الحقل المحدد على NULL:

حدد العد (col_name) من الجدول ؛

عدد الأسطر الفريدة للحقل المحدد:

حدد عدد (col_name مميزة) من الجدول ؛

استخدام المعاملات

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

لنبدأ معاملة باستخدام الأمر BEGIN.

لاستعادة جميع العمليات بعد BEGIN ، استخدم الأمر ROLLBACK.

وللتطبيق - الأمر COMMIT.

عرض واستكمال الطلبات القابلة للتنفيذ

للحصول على معلومات حول الطلبات ، قم بتشغيل الأمر التالي:

SELECT pid، age (query_start، clock_timestamp ())، usename، query FROM pg_stat_activity أين استعلام! = " "AND الاستعلام NOT ILIKE"٪ pg_stat_activity٪ "ORDER BY query_start desc؛

لإيقاف طلب معين ، قم بتنفيذ الأمر التالي ، مع تحديد معرف العملية (pid):

حدد pg_cancel_backend (procpid) ،

لإنهاء الطلب ، نفِّذ:

حدد pg_terminate_backend (procpid) ،

العمل مع التكوين

البحث عن موقع مثيل الكتلة وتغييره

يكون الموقف ممكنًا عندما يتم تكوين العديد من مثيلات PostgreSQL على نظام تشغيل واحد ، والذي "يجلس" على منافذ مختلفة. في هذه الحالة ، يعد العثور على مسار إلى الموقع الفعلي لكل حالة مهمة مرهقة للأعصاب. من أجل الحصول على هذه المعلومات ، سنقوم بتنفيذ الاستعلام التالي لأي قاعدة بيانات للمجموعة المعنية:

إظهار data_directory ؛

دعنا نغير الموقع إلى شيء آخر باستخدام الأمر:

تعيين data_directory إلى new_directory_path ؛

ولكن يلزم إعادة التشغيل حتى تدخل التغييرات حيز التنفيذ.

الحصول على قائمة بأنواع البيانات المتاحة

دعنا نحصل على قائمة بأنواع البيانات المتاحة باستخدام الأمر:

حدد اسم النوع ، typlen من pg_type حيث typtype = "b" ؛

typname هو اسم نوع البيانات.
typlen هو حجم نوع البيانات.

تغيير إعدادات DBMS دون إعادة التشغيل

توجد إعدادات PostgreSQL في ملفات خاصة مثل postgresql.conf و pg_hba.conf. بعد تغيير هذه الملفات ، من الضروري أن يتلقى نظام إدارة قواعد البيانات (DBMS) الإعدادات مرة أخرى. للقيام بذلك ، يتم إعادة تمهيد خادم قاعدة البيانات. من الواضح أنه يجب عليك القيام بذلك ، ولكن في نسخة الإنتاج من المشروع ، والتي يستخدمها الآلاف من المستخدمين ، فهذا أمر غير مرغوب فيه للغاية. لذلك ، لدى PostgreSQL وظيفة يمكنك من خلالها تطبيق التغييرات دون إعادة تشغيل الخادم:

حدد pg_reload_conf () ،

لكن لسوء الحظ ، لا ينطبق هذا على جميع المعلمات. في بعض الحالات ، يلزم إعادة التشغيل لتطبيق الإعدادات.

لقد غطينا أوامر للمساعدة في تسهيل الأمور للمطورين ومديري قواعد البيانات الذين يستخدمون PostgreSQL. لكن هذه ليست كل التقنيات الممكنة. إذا واجهت مشاكل مثيرة للاهتمام ، فاكتب عنها في التعليقات. دعونا نشارك تجربة مفيدة!