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

Postgresql में सम्मिलित कथन में पासवर्ड एन्क्रिप्ट करें एक त्रुटि फेंकता है (स्पष्ट प्रकार कास्ट जोड़ने की आवश्यकता है)

यह वास्तव में उत्तर नहीं है बल्कि एक संक्षिप्त व्याख्या है कि त्रुटि के स्रोत को कैसे खोजा जाए।

सबसे पहले pgcrypto . को खोजें विस्तार:

select e.extname, n.nspname
from pg_catalog.pg_extension e left join pg_catalog.pg_namespace n on n.oid = e.extnamespace;

इसे कुछ इस तरह वापस करना चाहिए:

╔════════════════════╤════════════╗
║      extname       │  nspname   ║
╠════════════════════╪════════════╣
║ plpgsql            │ pg_catalog ║
║ adminpack          │ pg_catalog ║
║ plpythonu          │ pg_catalog ║
║ pg_stat_statements │ public     ║
║ plpython3u         │ pg_catalog ║
║ hstore             │ public     ║
║ uuid-ossp          │ public     ║
║ pg_trgm            │ public     ║
║ ltree              │ public     ║
║ tablefunc          │ public     ║
║ unaccent           │ public     ║
║ pgcrypto           │ nd         ║
╚════════════════════╧════════════╝

तो pgcrypto स्कीमा में स्थापित nd मेरे डेटाबेस में।

इसके बाद search_path पर नजर डालते हैं पैरामीटर जो जानकारी प्रदान करता है कि DB वस्तुओं को कहाँ खोजा जाए:

show search_path;
╔═════════════════╗
║   search_path   ║
╠═════════════════╣
║ "$user", public ║
╚═════════════════╝

इसका अर्थ है कि ऑब्जेक्ट को वर्तमान उपयोगकर्ता के नाम के साथ स्कीमा में खोजा जाएगा और, यदि कुछ नहीं मिला, तो स्कीमा public में खोजा जाएगा। ।

अंत में वर्तमान उपयोगकर्ता की जाँच करें:

select current_user;
╔══════════════╗
║ current_user ║
╠══════════════╣
║ postgres     ║
╚══════════════╝

तो जैसा कि आप स्कीमा में स्थापित एक्सटेंशन को देख सकते हैं nd search_path . का उपयोग करके नहीं ढूंढा जा सकता जो वास्तव में postgres, public . है और हमें त्रुटि मिली:

select gen_salt('md5');
ERROR:  function gen_salt(unknown) does not exist
LINE 1: select gen_salt('md5');
               ^
HINT:  No function matches the given name and argument types. You might need to add explicit type casts.

ऊपर बताए गए आपके डीबी के वास्तविक मूल्यों के आधार पर इसे ठीक करने के कई तरीके हैं।

आप एक्सटेंशन को किसी अन्य स्कीमा में स्थानांतरित कर सकते हैं जैसे:

alter extension pgcrypto set schema public;

आप search_path बदल सकते हैं विकल्प जैसे:

set search_path to '"$user", public'; -- for the active session only
alter database your_db_name set search_path to '"$user", public'; -- permanently for the database

अंत में आप SQL कथन में स्कीमा को स्पष्ट रूप से निर्दिष्ट कर सकते हैं:

select schema_where_it_installed.gen_salt('md5');
-- For my example:
select nd.gen_salt('md5');



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. यदि मौजूद नहीं है तो MySql तालिका सम्मिलित करें अन्यथा अद्यतन करें

  2. MySQL रूट पासवर्ड कैसे पता करें

  3. क्या mysql 5.0 इंडेक्स शून्य मान रखता है?

  4. हजारों लगातार कनेक्शन के बाद MySQL सॉकेट कनेक्शन से इंकार कर देता है

  5. मैसकल चयन से जावास्क्रिप्ट ऐरे उत्पन्न करें