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


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.