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

कस्टम Postgresql त्रुटि कैसे बढ़ाएं और इसे Ecto . में कैसे संभालें

जहां तक ​​मुझे पता है, कस्टम पोस्टग्रेएसक्यूएल की त्रुटियों को संभालने के लिए कोई अंतर्निहित तंत्र नहीं है। हालांकि, आप इसे रिपोजिटरी स्तर पर कर सकते हैं।

ऐसा करने के लिए, आपको ERRCODE . का उपयोग करके PostgreSQL में त्रुटियों को उठाना होगा जैसे:

RAISE '[message for logs]' USING ERRCODE = 'integrity_constraint_violation';

और फिर उन्हें एप्लिकेशन में हैंडल करें:

defmodule Core.Repo do
  use Ecto.Repo, otp_app: :core

  defoverridable insert: 2

  def insert(changeset, opts) do
    super(changeset, opts)
  rescue
    exception in Postgrex.Error ->
      handle_postgrex_exception(exception, __STACKTRACE__, changeset)
  end

  # ... other functions

  defp handle_postgrex_exception(exception, stacktrace, changeset \\ nil)

  defp handle_postgrex_exception(%{postgres: %{code: :integrity_constraint_violation}}, _, nil) do
    {:error, :integrity_constraint_violation}
  end

  defp handle_postgrex_exception(
         %{postgres: %{code: :integrity_constraint_violation}},
         _,
         changeset
       ) do
    {:error, %{changeset | valid?: false}}
  end

  defp handle_postgrex_exception(exception, stacktrace, _) do
    reraise(exception, stacktrace)
  end
end

{:error, %{changeset | valid?: false}} जवाब। इसका मतलब है कि उस समय, प्रदर्शित करने के लिए कोई उपयोगी संदेश नहीं होगा।

पीएस आप शायद एक्टो के कार्यों को ओवरराइड करने के लिए कुछ मैक्रोज़ लिख सकते हैं और वहां कार्यान्वयन को छुपा सकते हैं (प्रस्तावित समाधान के बजाय) लेकिन मेरा मानना ​​​​है कि इसे बनाए रखना बहुत कठिन होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. जावा तिथियों के आधार पर पोस्टग्रेज में टाइमस्टैम्प सहेजा जा रहा है

  2. अजगर psycopg2 जाँच पंक्ति मौजूद है

  3. एकाधिक कॉलम कॉपी प्रारूप postgresql Node.js

  4. PostgreSQL UNIX डोमेन सॉकेट बनाम TCP सॉकेट

  5. रेल रिपोर्ट को वहां मौजूद कॉलम नहीं मिल रहा है