কীভাবে ফাংশন, পদ্ধতি, পোস্টগ্রেএসকিএল-তে সোর্স কোড ট্রিগার করে?


168

পোস্টগ্রেএসকিএল-এ কীভাবে ফাংশন এবং ট্রিগারগুলি সোর্সকোড প্রিন্ট করবেন? কারও যদি ফাংশনটি প্রদর্শনের জন্য কোয়েরি জেনে থাকে তবে আমাকে জানান, উত্স কোডটি ট্রিগার করে।


11
অনুগামীদের জন্য একটি নোট হিসাবে যারা এখানে কীভাবে সমস্ত ট্রিগারগুলি তালিকাভুক্ত করবেন তা নির্ধারণের চেষ্টা করছেন, এটি select * from pg_trigger;যদি select tgrelid::regclass, tgname from pg_trigger;
আপনিও

উত্তর:


152

\df+মধ্যে psql আপনি sourcecode দেয়।


17
ভাল লাগল :) আমি \dfআপনার ফাংশনের নামটি খুঁজতে, তারপরে \xপ্রসারিত আউটপুট দেওয়ার জন্য ব্যবহার করার পরামর্শ দিই\df+ name_of_function
স্যাম ওয়াটকিন্স

33
f df + কোডের চেয়ে অনেক বেশি আউটপুট দেয়। আপনি যদি চান সমস্ত কোড হয়, \ sf কৌশলটি করবে!
টেলিক

ইনস্টলড এক্সটেনশিয়নের ফাংশনগুলি কীভাবে দেখতে পাবেন ? উদাহরণ আমি ltree ব্যবহার করছি , কিন্তু কোন প্রতিক্রিয়া আছে \df ltxtquery
পিটার ক্রাউস

\x ONট্রান্সপোজড ডিসপ্লের জন্য প্রয়োজনীয়
andilabs

130

ফাংশনের জন্য:

আপনি নীচের মত, pg_proc ভিউ জিজ্ঞাসা করতে পারেন

select proname,prosrc from pg_proc where proname= your_function_name; 

আরেকটি উপায় হ'ল কমেন্টটি কার্যকর করুন \dfএবং \efযা কার্যগুলি তালিকাবদ্ধ করতে পারে।

skytf=> \df           
                                             List of functions
 Schema |         Name         | Result data type |              Argument data types               |  Type  
--------+----------------------+------------------+------------------------------------------------+--------
 public | pg_buffercache_pages | SETOF record     |                                                | normal


skytf=> \ef  pg_buffercache_pages

এটি ফাংশনের উত্স কোডটি প্রদর্শন করবে।

ট্রিগারগুলির জন্য:

সোর্স কোড পাওয়ার কোনও প্রত্যক্ষ উপায় আছে কিনা তা আমি জানি না। কেবল নিম্নলিখিত পদ্ধতিটি জানুন, এটি আপনাকে সাহায্য করবে!

  • পদক্ষেপ 1: ট্রিগারটির টেবিল ওড পান:
    skytf => pg_trigger থেকে tgrelid নির্বাচন করুন যেখানে tgname = 'insert_tbl_tmp_trigger';
      tgrelid
    ---------
       26599
    (1 সারি)
  • পদক্ষেপ 2: উপরের ওডের টেবিলের নামটি পান!
    স্কাইটিএফ => ওড নির্বাচন করুন, pg_class থেকে পুনরায় নামকরণ করুন যেখানে oid = 26599;
      oid | relname           
    ------- + + -----------------------------
     26599 | tbl_tmp
    (1 সারি)
  • পদক্ষেপ 3: সারণির তথ্য তালিকাবদ্ধ করুন
    skytf => t d tbl_tmp

এটি আপনাকে টেবিলের ট্রিগার সম্পর্কিত বিশদ প্রদর্শন করবে। সাধারণত একটি ট্রিগার একটি ফাংশন ব্যবহার করে। সুতরাং আপনি ট্রিগার ফাংশনের উত্স কোডটি ঠিক উপরে যেমনটি আমি উল্লেখ করেছি ঠিক তেমন পেতে পারেন!


37

পোস্টগ্র্রেএসকিউএল -9.5 থেকে কয়েকটি উদাহরণ এখানে রয়েছে

প্রদর্শন তালিকা:

  1. কার্যাবলী: \df+
  2. ট্রিগার: \dy+

প্রদর্শন সংজ্ঞা:

postgres=# \sf
function name is required

postgres=# \sf pg_reload_conf()
CREATE OR REPLACE FUNCTION pg_catalog.pg_reload_conf()
 RETURNS boolean
 LANGUAGE internal
 STRICT
AS $function$pg_reload_conf$function$

postgres=# \sf pg_encoding_to_char
CREATE OR REPLACE FUNCTION pg_catalog.pg_encoding_to_char(integer)
 RETURNS name
 LANGUAGE internal
 STABLE STRICT
AS $function$PG_encoding_to_char$function$

7
\xপ্রসারিত ডিসপ্লে চালু করতে প্রথমে ব্যবহার করা পাঠযোগ্যতার সাথে সহায়তা করে।
পকেটস্যান্ড

26

অনেক সম্ভাবনা আছে। সহজ উপায় হ'ল কেবল পিজিএডমিন ব্যবহার করা এবং এসকিউএল উইন্ডো থেকে এটি পান। তবে আপনি যদি এই প্রোগ্রামটিমেটিকভাবে পেতে চান তবে পরীক্ষা করুন pg_procএবং pg_triggerসিস্টেম ক্যাটালগ বা তথ্য স্কিমা থেকে routinesএবং triggersভিউগুলি (এটি এসকিউএল স্ট্যান্ডার্ড উপায়, তবে এটি সমস্ত বৈশিষ্ট্য বিশেষত PostgreSQL- নির্দিষ্ট করে নাও পারে)। উদাহরণ স্বরূপ:

SELECT
    routine_definition 
FROM
    information_schema.routines 
WHERE
    specific_schema LIKE 'public'
    AND routine_name LIKE 'functionName';

3
মিম্ম .. আমার পিজিপিএসকিউএল ফাংশন রয়েছে, এতে খালি রুটিন_ডিফাইশন রয়েছে এবং ক্ষেত্র রুটিন_বডিতে 'এক্সটার্নাল' স্টেট রয়েছে। কোন ইঙ্গিত আমি যেখানে এটি পেতে পারেন?
alfonx

2
+1 এটি আরও প্রমিত / পোর্টেবল সমাধান। এসকিউএল দেখার জন্য:SELECT view_definition FROM information_schema.views WHERE table_schema = ? AND table_name = ?
ফ্রান্টা

তবে যে ক্ষেত্রে কোনও একই নাম এবং বিভিন্ন ফাংশন যুক্তি দিয়ে ফাংশন তৈরি করার কারণে কোনও ফাংশনের নাম অনন্য নয় সে ক্ষেত্রে কী হবে? stackoverflow.com/questions/47341513/...
mg1075

@ এলফোনেক্স pgproc.prosrcকলাম দেখুন
টোম জুলুসকি

12

কেবল ফাংশনটি প্রদর্শন করার চেয়ে সামান্য বেশি, কীভাবে সম্পাদনা-স্থান সুবিধা পাবেন।

\ef <function_name>খুব সহজ। এটি সম্পাদনযোগ্য বিন্যাসে ফাংশনের উত্স কোডটি খুলবে। আপনি কেবল এটি দেখতে সক্ষম হবেন না, আপনি এটি সম্পাদনা করতে এবং চালিত করতে পারেন।

মাত্র \ef ফাংশন_নাম ছাড়াই সম্পাদনাযোগ্য ক্রিয়েট ফাংশন টেম্পলেট খুলবে।

আরও রেফারেন্সের জন্য -> https://www.postgresql.org/docs/9.6/static/app-psql.html


11

\sf পিএসকিএল-এ ফাংশন_নাম একক ফাংশনের সম্পাদনযোগ্য উত্স কোড দেয়।

Https://www.postgresql.org/docs/9.6/static/app-psql.html থেকে :

f sf [+] ফাংশন_ বিবরণ এই কমান্ডটি একটি ক্রিয়েট বা রিপ্লেস ফাংশন কমান্ড আকারে নামযুক্ত ফাংশনটির সংজ্ঞাটি আনে এবং দেখায়।

যদি + কমান্ডের নামের সাথে যুক্ত হয় তবে আউটপুট লাইনগুলি সংখ্যাযুক্ত হয়, ফাংশনটির প্রথম লাইনের সাথে লাইন 1 হয়।


একটি ফাংশনের উত্স কোড দেখায়। function ef ফাংশনটির নাম এটি সম্পাদনাযোগ্য টেমপ্লেটে খোলে
amar

9

@ ফ্র্যাঙ্কের উত্তরের পাশাপাশি আপনি এটি এসকিএল ইন্টারফেস থেকে ব্যবহার করতে পারেন:

select 
    prosrc
from pg_trigger, pg_proc
where
 pg_proc.oid=pg_trigger.tgfoid
 and pg_trigger.tgname like '<name>'

(এখান থেকে নেওয়া হয়েছে: http://www.postgresql.org/message-id/Pine.BSF.4.10.10009140858080.28013-100000@megazone23.bigpanda.com )


0

সংস্করণ থেকে: পিএসকিএল (9.6.17, সার্ভার 11.6)

আমি উপরের সমস্ত উত্তর চেষ্টা করেছি কিন্তু আমার জন্য

postgres=> \sf jsonb_extract_path_text
CREATE OR REPLACE FUNCTION pg_catalog.jsonb_extract_path_text(from_json jsonb, VARIADIC path_elems text[])
 RETURNS text
 LANGUAGE internal
 IMMUTABLE PARALLEL SAFE STRICT
AS $function$jsonb_extract_path_text$function$



postgres=> \df+
ERROR:  column p.proisagg does not exist
LINE 6:   WHEN p.proisagg THEN 'agg'
               ^
HINT:  Perhaps you meant to reference the column "p.prolang".

df আমার জন্য কাজ করে না বলে মনে হচ্ছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.