সম্পূর্ণ সঞ্চিত পদ্ধতি কোডটি কীভাবে প্রদর্শন করবেন?


111

আপনি একটি সঞ্চিত পদ্ধতি / ফাংশনটি কীভাবে দেখেন?

বলুন মূল সংজ্ঞা ছাড়াই আমার একটি পুরানো ফাংশন রয়েছে - আমি পিজি / পিএসএইচএল-তে এটি কী করছে তা দেখতে চাই তবে আমি এটি করার কোনও উপায় বের করতে পারি না।

Postgres সংস্করণ 8.4.1 ব্যবহার করে

উত্তর:


19

আপনার সঞ্চিত পদ্ধতির উত্স পেতে pgAdmin ব্যবহার করুন বা pg_proc ব্যবহার করুন । পিজিএডমিন একই কাজ করে।


3
pg_proc এটাই! আমি কেন খুশি হয়েছি যে তারা এটিকে পিজ_প্রসেসার ... গিজ না বলে কয়েকটি বাইট স্পেস সাশ্রয় করেছে। :)
প্রিয়

14
--Echo- লুকানো প্যারামিটার দিয়ে পিএসকিএল শুরু করে যে তথ্যগুলি (উদাহরণস্বরূপ \ df কমান্ডের জন্য) পিএসএইচএল ব্যবহার করছে তা অনুসন্ধান করা খুব সহজ। এটি অভ্যন্তরীণভাবে ব্যবহৃত সমস্ত প্রশ্নগুলি দেখায়। pg_proc সম্পূর্ণ ক্রিয়াকলাপ বিবৃতি সঞ্চয় করে না। আপনি সম্পূর্ণ উত্স পুনরুদ্ধার করতে pg_get_functiondef () ব্যবহার করতে পারেন।
a_horse_with_no_name

5
সেই টেবিলটি ঠিক কোথায় রয়েছে সে সম্পর্কে যে কেউ বিভ্রান্ত হয়েছেন: pg_catolog -> সিস্টেম টেবিল -> pg_proc
দিমিত্রিস

242

\df+ <function_name>মধ্যে psql


6
এটি কি প্রিন্ট করার কোনও উপায় আছে? আমি জিজ্ঞাসার কারণ এটি এটিকে অপঠনযোগ্য করে তোলে।
12hys

3
এটি আমার জন্য বেশ মুদ্রিত। মনে রাখবেন আপনি যদি এইটি ইন্টারেক্টিভভাবে পিএসকিএল করে থাকেন এবং লাইনগুলি মোড়ানো হয়ে যায় এবং পেজারটি কিকস লেগে যায় তবে আপনি '-S' ('কম' কমান্ড লাইন আরগের মতো) টাইপ করে মোড়ানো লাইনগুলি টগল করতে পারেন, তারপরে স্ক্রোল করতে তীর কীগুলি ব্যবহার করুন কাছাকাছি.
জোনাথন হার্টলি

10
\x সুসংগঠনের জন্য, আপনি ফাংশন সংজ্ঞা প্রদর্শন করার আগে psql মেটা-কমান্ড ব্যবহার করতে পারেন । \xদীর্ঘ স্ট্রিং সহ রেকর্ডযুক্ত ক্যোয়ারী ফলাফলগুলি দেখার জন্যও দরকারী।
স্টিউ

149

\ef <function_name>পিএসএইচএল-তে এটি সম্পাদনযোগ্য পাঠ্য সহ পুরো ফাংশনটি দেবে।


2
সঠিক উত্তর। এটি সম্পাদকে ফাংশন সংজ্ঞা খুলবে।
পোনুসামি কে

2
এটাই সেরা উত্তর! এটি পঠনযোগ্য উপায়ে ফাংশনের সংজ্ঞা দেখায়।
ফারমকা

3
; <enter>বাফারটি কার্যকর করার জন্য টাইপ করতে ভুলবেন না ।
স্মৃতিভারাতুর

4
ERROR: more than one function named
ব্রায়ান হক

59
SELECT prosrc FROM pg_proc WHERE proname = 'function_name';

এটি কীভাবে ফাংশনটি চালাবেন তা ফাংশন হ্যান্ডলারকে বলে। এটি বাস্তবায়িত ভাষা / কল কনভেনশন উপর নির্ভর করে অনুবাদ করা ভাষাগুলি, একটি লিঙ্ক প্রতীক, একটি ফাইলের নাম বা অন্য যে কোনও কিছুতে আসল উত্স কোড হতে পারে


এটি দরকারী। আউটপুটটি সুন্দর-মুদ্রিত করার কোনও উপায় আছে কি?

এটি দরকারী কারণ এটি প্রয়োজন হয় না psql। নোট করুন যে ফাংশনটির নামগুলি নিম্নচ্যুত হয়েছে।
Seamus Abshere

@ ম্যাক্সিম, আপনি কীভাবে রিটার্নের ধরণ এবং ইনপুট আর্গুমেন্ট সনাক্ত করতে জানেন?
ফাইভেল

@Fivell শুধু ARG নাম, না ধরনের জন্য: SELECT proname, prosrc, proargnames FROM pg_proc WHERE proname like '%func_name%'। এটি কমপক্ষে 9.6। আপনি সম্পত্তিটির মাধ্যমে এই জাতীয় সংখ্যার কোডটি পেতে পারেন proargtypesতবে নাম হিসাবে এটি পেতে আপনাকে অন্য কিছু টেবিলের সাথে যোগ দিতে হবে।
থালিস কে।


10

যদি কেউ অবাক হয়ে যায় কীভাবে কীভাবে ক্যাটালগ টেবিলগুলি অনুসন্ধান করতে এবং pg_get_functiondef()ফাংশনটি এখানে ব্যবহার করতে হয় সেখানকার নমুনা ক্যোয়ারী:

SELECT n.nspname AS schema
      ,proname AS fname
      ,proargnames AS args
      ,t.typname AS return_type
      ,d.description
      ,pg_get_functiondef(p.oid) as definition
--      ,CASE WHEN NOT p.proisagg THEN pg_get_functiondef(p.oid)
--            ELSE 'pg_get_functiondef() can''t be used with aggregate functions'
--       END as definition
  FROM pg_proc p
  JOIN pg_type t
    ON p.prorettype = t.oid
  LEFT OUTER
  JOIN pg_description d
    ON p.oid = d.objoid
  LEFT OUTER
  JOIN pg_namespace n
    ON n.oid = p.pronamespace
 WHERE NOT p.proisagg
   AND n.nspname~'<$SCHEMA_NAME_PATTERN>'
   AND proname~'<$FUNCTION_NAME_PATTERN>'

pg_get_functiondef () ব্যবহারকারীর সংজ্ঞায়িত সামগ্রিক ফাংশন পরিচালনা করে না বলে মনে হচ্ছে। আমি যেমন ইআরআর পেয়ে যাচ্ছি: আমি কোনও ইউডিএ
টিম চাইল্ড

2
[42809] ত্রুটি: "অ্যারে_এজিজি" একটি সামগ্রিক ফাংশন
ড্যানিয়েল এল। ভ্যানডেনবোশ

1
@ ড্যানিয়েলএল.ভ্যানডেনবোশ সংশোধন করেছেন (কেবলমাত্র সামগ্রিক ফাংশন বাদ দিতে)
এমএসসিওউজ

আপনি আমার জীবন বাঁচিয়েছেন ... pg_get_functiondef () সংজ্ঞাটিতে নির্দিষ্ট শব্দ সহ প্রক্সগুলি খুঁজতে ব্যবহার করা যেতে পারেpg_get_functiondef(p.oid) ilike '%indicator_loss%'
জিরো

0

আপনি যদি আপনার সিস্টেমে এটি কনফিগার করা থাকে তবে আপনি পিএইচপিপিজিএডমিন দ্বারাও পেতে পারেন,

পদক্ষেপ 1: আপনার ডাটাবেস নির্বাচন করুন

পদক্ষেপ 2: ফাইন্ড বোতামে ক্লিক করুন

পদক্ষেপ 3: ফাংশনগুলিতে অনুসন্ধান বিকল্পটি পরিবর্তন করুন এবং তারপরে Find এ ক্লিক করুন।

আপনি সংজ্ঞায়িত ফাংশনগুলির তালিকা পাবেন name আপনি নাম অনুসারে ফাংশনগুলিও অনুসন্ধান করতে পারেন, আশা করি এই উত্তরটি অন্যদের সহায়তা করবে।


-1

সঞ্চিত পদ্ধতি / ফাংশনে লিখিত পূর্ণ কোড (ক্যোয়ারী) দেখতে, নীচের কমান্ডটি ব্যবহার করুন:

sp_helptext procedure/function_name

ফাংশন নাম এবং পদ্ধতির নামের জন্য 'dbo' উপসর্গ যুক্ত করবেন না। বা 'sys'।

প্রক্রিয়া বা ফাংশন নামের শেষে বন্ধনী যুক্ত করবেন না এবং পরামিতিগুলিও পাস করবেন না।

sp_helptext কীওয়ার্ডটি ব্যবহার করুন এবং তারপরে কেবল প্রক্রিয়া / ফাংশনটির নামটি দিন।

প্রক্রিয়াটির জন্য লিখিত পুরো কোডটি দেখতে নীচের কমান্ডটি ব্যবহার করুন:

sp_helptext ProcedureName

ফাংশনের জন্য পূর্ণ কোড লিখিত দেখতে নীচের কমান্ডটি ব্যবহার করুন:

sp_helptext FunctionName

sp_helptextপোস্টগ্র্যাস্কিল- এ কোনও নেই ।
জিসার্গ

-2

সাধারণভাবে বলতে গেলে আপনি পিজএডমিনের মতো একটি ডিবি ম্যানেজার অ্যাপ্লিকেশন ব্যবহার করবেন , আপনার আগ্রহী অবজেক্টটি ব্রাউজ করুন এবং "তৈরির স্ক্রিপ্ট হিসাবে তৈরি করুন" বা তার অনুরূপ ডানদিকে ক্লিক করুন।

আপনি কি এটি করার চেষ্টা করছেন ... কোনও ম্যানেজমেন্ট অ্যাপ ছাড়া?


2
কেবল কমান্ড লাইন - কোনও পরিচালনা অ্যাপ নেই। যদি পিজএডমিন এটি করতে পারে তবে এটি কোনও ধরণের কমান্ড ব্যবহার করতে হবে - আমি কেবল এটি সম্পর্কে কোনও দলিল খুঁজে পাচ্ছি না। আমি pg_ * টেবিলগুলি সন্ধান করছি তবে কিছুই মনে হচ্ছে না।
29

খুশী হয়ে আপনি একটি উত্তর পেয়েছেন, তবে আপনি নিজের জীবনকে কেন কঠিন করে তুলছেন তা নিশ্চিত নন! কেন শুধু পিজএডমিন ইনস্টল করবেন না?
অনাকাটা

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