PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

PostgreSQL त्रुटि लॉग को कैसे डिकोड करें

PostgreSQL त्रुटि रिपोर्टिंग एक स्टाइल गाइड का अनुसरण करती है जिसका उद्देश्य डेटाबेस व्यवस्थापक को समस्याओं का कुशलतापूर्वक निवारण करने के लिए आवश्यक जानकारी प्रदान करना है। त्रुटि संदेशों में आम तौर पर एक संक्षिप्त विवरण होता है, उसके बाद कुछ विस्तृत जानकारी होती है, और एक संकेत, यदि लागू हो, समाधान का सुझाव देता है। अन्य बारीक विवरण हैं, जिन्हें गाइड में समझाया गया है, जैसे कि भूतकाल या वर्तमान काल का उपयोग यह इंगित करने के लिए कि क्या त्रुटि अस्थायी या स्थायी है।

त्रुटियों के प्रकार और गंभीरता के स्तर

त्रुटियों की रिपोर्ट करते समय, PostgreSQL एक SQLSTATE त्रुटि कोड भी लौटाएगा, इसलिए त्रुटियों को कई वर्गों में वर्गीकृत किया जाता है। कक्षाओं की सूची की समीक्षा करते समय, ध्यान दें कि सफलता और चेतावनी को PostgreSQL द्वारा त्रुटि लॉग में भी लॉग किया जाता है - ऐसा इसलिए है क्योंकि लॉगिंग_कलेक्टर, लॉगिंग के लिए जिम्मेदार पोस्टग्रेएसक्यूएल प्रक्रिया, सभी संदेशों को stderr को भेजती है। डिफ़ॉल्ट रूप से।

जब लॉगिंग संग्राहक को प्रारंभ नहीं किया गया है, तो सिस्टम लॉग में त्रुटियाँ लॉग की जाती हैं। उदाहरण के लिए, पैकेज स्थापना के बाद सेवा शुरू करने का प्रयास करते समय:

[[email protected] ~]# systemctl start postgresql
Job for postgresql.service failed because the control process exited with error code.
See "systemctl  status postgresql.service" and "journalctl  -xe" for details.
[[email protected] ~]# systemctl status postgresql
● postgresql.service - PostgreSQL database server
   Loaded: loaded (/usr/lib/systemd/system/postgresql.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2018-01-24 19:10:04 PST; 8s ago
Process: 1945 ExecStartPre=/usr/libexec/postgresql-check-db-dir postgresql (code=exited, status=1/FAILURE)

Jan 24 19:10:04 omiday.can.local systemd[1]: Starting PostgreSQL database server...
Jan 24 19:10:04 omiday.can.local postgresql-check-db-dir[1945]: Directory "/var/lib/pgsql/data" is missing or empty.
Jan 24 19:10:04 omiday.can.local postgresql-check-db-dir[1945]: Use "/usr/bin/postgresql-setup --initdb"
Jan 24 19:10:04 omiday.can.local postgresql-check-db-dir[1945]: to initialize the database cluster.
Jan 24 19:10:04 omiday.can.local postgresql-check-db-dir[1945]: See /usr/share/doc/postgresql/README.rpm-dist for more information.
Jan 24 19:10:04 omiday.can.local systemd[1]: postgresql.service: Control process exited, code=exited status=1
Jan 24 19:10:04 omiday.can.local systemd[1]: Failed to start PostgreSQL database server.
Jan 24 19:10:04 omiday.can.local systemd[1]: postgresql.service: Unit entered failed state.
Jan 24 19:10:04 omiday.can.local systemd[1]: postgresql.service: Failed with result 'exit-code'.

क्लाइंट को त्रुटि संदेश लौटाते समय, और इसलिए त्रुटि लॉग में लॉगिंग करते समय, संदेशों को एक गंभीरता स्तर के साथ लॉग किया जाता है जिसे क्लाइंट_मिन_मैसेज पैरामीटर का उपयोग करके नियंत्रित किया जाता है। सर्वर लॉग फ़ाइलों में लॉगिंग को पैरामीटर log_min_messages द्वारा नियंत्रित किया जाता है, जबकि log_min_error_statement SQL कथनों को लॉग करने में सक्षम बनाता है जो एक विशिष्ट गंभीरता स्तर की त्रुटि का कारण बनते हैं।

PostgreSQL को निम्न गंभीरता स्तरों पर लॉग इन करने के लिए कॉन्फ़िगर किया जा सकता है:

  • आतंक: सभी डेटाबेस सत्र निरस्त कर दिए गए हैं। यह एक गंभीर स्थिति है जो सभी ग्राहकों को प्रभावित करती है।
  • घातक: एक त्रुटि के कारण वर्तमान सत्र निरस्त कर दिया गया है। ग्राहक पुन:प्रयास कर सकता है। क्लस्टर में अन्य डेटाबेस प्रभावित नहीं होते हैं।
  • लॉग: सामान्य ऑपरेशन संदेश।
  • त्रुटि: आदेश निष्पादित करने में विफलता। यह एक स्थायी त्रुटि है।
  • चेतावनी: एक घटना, जो कमांड को पूरा करने से नहीं रोक रही है, अगर संबोधित नहीं किया गया तो विफलताओं का कारण बन सकती है। सर्वर और एप्लिकेशन दोनों पर समस्याओं का शीघ्र पता लगाने के लिए चेतावनियों की निगरानी एक अच्छा अभ्यास है।
  • सूचना: जानकारी जिसका उपयोग ग्राहक अपने कोड को बेहतर बनाने के लिए कर सकते हैं।
  • जानकारी: ग्राहकों द्वारा स्पष्ट रूप से अनुरोधित लॉग।
  • DEBUG1..DEBUG5: डेवलपर जानकारी।

नोट:उच्च स्तर के संदेशों में निचले स्तर के संदेश शामिल होते हैं यानी लॉगिंग स्तर को लॉग पर सेट करना, PostgreSQL को FATAL और PANIC संदेशों को भी लॉग करने का निर्देश देगा।

सामान्य त्रुटियां और उन्हें कैसे ठीक करें

एक गैर-विस्तृत सूची इस प्रकार है:

त्रुटि संदेश

psql: could not connect to server: No such file or directory

कारण

[[email protected] ~]# psql -U postgres
psql: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

संकल्प

सत्यापित करें कि PostgreSQL सेवा ऑपरेटिंग सिस्टम टूल (ps, netstat, ss, systemctl) का उपयोग करके चल रही है या डेटा निर्देशिका में postmaster.pid की उपस्थिति की जांच करें।

त्रुटि संदेश

psql: FATAL:  Peer authentication failed for user "postgres"

कारण

[[email protected] ~]# psql -U postgres
psql: FATAL:  Peer authentication failed for user "postgres"

संकल्प

लॉग फ़ाइल में इस आशय का अधिक विस्तृत संदेश होगा:

LOG:  provided user name (postgres) and authenticated user name (root) do not match
FATAL:  Peer authentication failed for user "postgres"
DETAIL:  Connection  matched  pg_hba.conf  line  80:  "local  all  all  peer"

इन चरणों का पालन करें:

  1. पोस्टग्रेज़ उपयोगकर्ता के रूप में लॉग इन करें:

    [[email protected] ~]# su - postgres
    [[email protected] ~]$ psql
    psql (9.6.6)
    Type "help" for help.
    
    postgres=#
  2. pg_hba.conf में निम्नलिखित परिवर्तन करें जो रूट उपयोगकर्ता को पासवर्ड के बिना लॉग इन करने की अनुमति देगा:

    --- a/var/lib/pgsql/data/pg_hba.conf
    +++ b/var/lib/pgsql/data/pg_hba.conf
    @@ -77,6 +77,7 @@
    # TYPE  DATABASE        USER            ADDRESS                 METHOD
    
    # "local" is for Unix domain socket connections only
    +local   all             postgres                                trust
    local   all             all                                     peer
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            ident
  3. सेवा को पुनः लोड करें और परीक्षण करें:

    [[email protected] ~]# psql -U postgres
    psql (9.6.6)
    Type "help" for help.
    
    postgres=#

त्रुटि संदेश

psql: could not connect to server: Connection refused
        Is the server running on host "192.168.0.11" and accepting
        TCP/IP connections on port 5432?

कारण

एक क्लाइंट ने सार्वजनिक आईपी पते से कनेक्शन का प्रयास किया।

नोट:यह क्लाइंट को लौटाई गई त्रुटि है, psql के ऊपर के उदाहरण में। वेब एप्लिकेशन के मामले में वेब सर्वर त्रुटि लॉग की जांच करें।

संकल्प

सार्वजनिक आईपी पते पर सुनने के लिए सेवा को कॉन्फ़िगर करें:

नोट:सर्वोत्तम अभ्यास के रूप में postgresql.conf को संपादित करने के बजाय सिस्टम बदलें का उपयोग करें।

postgres=# alter system set listen_addresses TO 'localhost,192.168.0.11';
ALTER SYSTEM

अल्टर सिस्टम कमांड ने नीचे दिखाए गए अनुसार postgresql.auto.conf को संशोधित किया है:

--- a/var/lib/pgsql/data/postgresql.auto.conf
+++ b/var/lib/pgsql/data/postgresql.auto.conf
@@ -1,2 +1,3 @@
# Do not edit this file manually!
-# It will be overwritten by the ALTER SYSTEM command.
+# It will be overwritten by ALTER SYSTEM command.
+listen_addresses = 'localhost,192.168.0.11'

सेवा को पुनरारंभ करें और परीक्षण करें:

[[email protected] ~]# psql -U webuser -h 192.168.0.11 webapp
psql: FATAL:  no pg_hba.conf entry for host "192.168.0.11", user "webuser", database "webapp", SSL off

हम अगले विषय में इस त्रुटि का समाधान करेंगे।

त्रुटि संदेश

psql: FATAL:  no pg_hba.conf entry for host "192.168.0.11", user "webuser", database "webapp", SSL off

कारण

IP पते 192.168.0.11 पर चल रही PostgreSQL सेवा उपयोगकर्ता वेबउपयोगकर्ता को डेटाबेस वेबएप से कनेक्ट करने की अनुमति देने के लिए कॉन्फ़िगर नहीं की गई है।

संकल्प

कनेक्शन की अनुमति देने के लिए एक्सेस फ़ाइल pg_hba.conf को संशोधित करें:

--- a/var/lib/pgsql/data/pg_hba.conf
+++ b/var/lib/pgsql/data/pg_hba.conf
@@ -81,6 +81,7 @@
local   all             postgres                                trust
local   all             all                                     peer
# IPv4 local connections:
host    all             webuser         127.0.0.1/32            md5
+host    all             webuser         192.168.0.11/32         md5
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             webuser         ::1/128                 md5

सेवा को पुनः लोड करें और परीक्षण करें:

[[email protected] ~]# psql -U webuser -h 192.168.0.11 webapp
Password for user webuser:
psql (9.6.6)
Type "help" for help.

webapp=> \c
You are now connected to database "webapp" as user "webuser".

त्रुटि संदेश

ERROR:  syntax error at or near "grant"

कारण

ग्रांट PostgreSQL आरक्षित कीवर्ड में से एक है

संकल्प

आरक्षित खोजशब्दों को उद्धृत किया जाना चाहिए:

webapp=> create table "grant" (id numeric);
CREATE TABLE
And verify:
webapp=> \d "grant"
     Table "public.grant"
 Column |  Type   | Modifiers
--------+---------+-----------
 id     | numeric |

webapp=>

त्रुटि संदेश

ERROR:  cannot drop table cust because other objects depend on it

कारण

एक क्लाइंट ने टेबल कस्टम को हटाने का प्रयास किया जिसमें चाइल्ड टेबल हैं।

संकल्प

लॉग फ़ाइल में HINT की समीक्षा करें:

ERROR:  cannot drop table cust because other objects depend on it
DETAIL:  table cust_region_1 depends on table cust
HINT:  Use DROP ... CASCADE to drop the dependent objects too.
STATEMENT:  drop table cust;

त्रुटि संदेश

ERROR:  invalid input syntax for type numeric: "b" at character 26

कारण

लॉग फ़ाइल एक ऐसे मान को सम्मिलित करने के प्रयास का खुलासा करती है जो कॉलम प्रकार से मेल नहीं खाता:

ERROR:  invalid input syntax for type numeric: "b" at character 26
STATEMENT:  insert into cust values ('b', 2);

संकल्प

यह एक एप्लिकेशन साइड एरर है जिसे डेवलपर्स द्वारा ठीक किया जाना चाहिए, या यदि इसे क्लाइंट द्वारा शुरू किया गया था जैसे कि DBA रनिंग psql। उत्पादन डीबीए द्वारा किसी कार्रवाई की आवश्यकता नहीं है, क्योंकि क्लाइंट को पूर्ण त्रुटि संदेश भी वापस कर दिया गया था।

आज श्वेतपत्र डाउनलोड करें क्लस्टरकंट्रोल के साथ पोस्टग्रेएसक्यूएल प्रबंधन और स्वचालन इस बारे में जानें कि पोस्टग्रेएसक्यूएल को तैनात करने, मॉनिटर करने, प्रबंधित करने और स्केल करने के लिए आपको क्या जानना चाहिए। श्वेतपत्र डाउनलोड करें

लॉग की समीक्षा और निगरानी करना

सबसे सरल विकल्प PostgreSQL को log_destination पैरामीटर के माध्यम से syslog का उपयोग करने के लिए कॉन्फ़िगर करना है ताकि लॉग को आपके पसंदीदा केंद्रीकृत लॉगिंग सिस्टम (जैसे rsyslog) पर भेज दिया जा सके और फिर विशिष्ट त्रुटि स्थितियों पर अलर्ट करने के लिए वहां संसाधित किया जा सके।

एक अन्य उपकरण, जिसके लिए किसी के भी करीब सेटअप की आवश्यकता नहीं है, वह है tail_n_mail, जो क्रोन डेमॉन के संयोजन में काम करता है।

फिर भी इस सूची में एक अन्य उपकरण pgBadger है जो न केवल PostgreSQL लॉग फ़ाइलों की रिपोर्टिंग, कल्पना और विश्लेषण के लिए विकल्पों के एक समृद्ध सेट के साथ आता है, बल्कि सांख्यिकी संग्राहक द्वारा लॉग की गई जानकारी भी है।

जटिलता के पैमाने पर आगे बढ़ते हुए, संगठन को एक ईएलके स्टैक स्थापित करने के लिए समय और प्रयास का निवेश करने से लाभ हो सकता है, जो अलर्ट और रिपोर्ट उत्पन्न करने के लिए फाइलबीट पोस्टग्रेएसक्यूएल मॉड्यूल का उपयोग करता है।

निष्कर्ष

त्रुटि लॉग की समीक्षा करना, महत्वपूर्ण मुद्दों पर अधिसूचित होना, और एक बहुमुखी लॉग प्रबंधन प्रणाली का होना जो समस्या निवारण में सहायता करता है, एक स्वस्थ डेटाबेस वातावरण को बनाए रखने में महत्वपूर्ण है। सौभाग्य से, PostgreSQL एक समृद्ध त्रुटि प्रबंधन ढांचा प्रदान करता है, जो चुनने के लिए उपलब्ध उत्पादों की विशाल विविधता में परिलक्षित होता है। किसी विशिष्ट वातावरण के लिए सबसे उपयुक्त विकल्प चुनने के मानदंड में न केवल उत्पाद सुविधाएँ बल्कि आवश्यक तकनीकी विशेषज्ञता भी शामिल होनी चाहिए।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL - अलग-अलग समय क्षेत्र में दिनांक कैसे प्रस्तुत करें?

  2. आईडी के आधार पर लाखों पंक्तियों को हटाने का सबसे अच्छा तरीका

  3. PostgreSQL के लिए बहु-किरायेदार विकल्प

  4. Postgresql स्कीमा पथ को स्थायी रूप से सेट करें

  5. PostgreSQL में Oracle डेटाबेस तक पहुँचने के तरीके