คุณดูกระบวนงาน / ฟังก์ชันที่จัดเก็บไว้อย่างไร?
สมมติว่าฉันมีฟังก์ชันเก่าที่ไม่มีคำจำกัดความดั้งเดิม - ฉันต้องการดูว่ามันกำลังทำอะไรใน pg / psql แต่ดูเหมือนว่าฉันจะหาวิธีทำไม่ได้
ใช้ Postgres เวอร์ชัน 8.4.1
คุณดูกระบวนงาน / ฟังก์ชันที่จัดเก็บไว้อย่างไร?
สมมติว่าฉันมีฟังก์ชันเก่าที่ไม่มีคำจำกัดความดั้งเดิม - ฉันต้องการดูว่ามันกำลังทำอะไรใน pg / psql แต่ดูเหมือนว่าฉันจะหาวิธีทำไม่ได้
ใช้ Postgres เวอร์ชัน 8.4.1
คำตอบ:
ใช้ pgAdmin หรือใช้pg_procเพื่อรับแหล่งที่มาของกระบวนงานที่เก็บไว้ของคุณ pgAdmin ทำเช่นเดียวกัน
\x
เมตา - คำสั่ง psqlก่อนที่จะแสดงนิยามฟังก์ชัน \x
ยังมีประโยชน์สำหรับการดูผลการค้นหาที่มีระเบียนที่มีสตริงยาว
\ef <function_name>
ใน psql มันจะให้ฟังก์ชันทั้งหมดพร้อมข้อความที่แก้ไขได้
;
<enter>
after เพื่อดำเนินการบัฟเฟอร์
ERROR: more than one function named
SELECT prosrc FROM pg_proc WHERE proname = 'function_name';
สิ่งนี้จะบอกตัวจัดการฟังก์ชันถึงวิธีเรียกใช้ฟังก์ชัน อาจเป็นซอร์สโค้ดจริงของฟังก์ชันสำหรับภาษาที่ตีความสัญลักษณ์ลิงก์ชื่อไฟล์หรืออะไรก็ได้ขึ้นอยู่กับหลักการใช้งานภาษา / การเรียก
psql
นี้จะเป็นประโยชน์เพราะมันไม่จำเป็นต้องมี โปรดทราบว่าชื่อฟังก์ชันดูเหมือนจะลดขนาดลง
SELECT proname, prosrc, proargnames FROM pg_proc WHERE proname like '%func_name%'
. อย่างน้อยก็ในหน้า 9.6 คุณสามารถรับรหัสตัวเลขของประเภทผ่านคุณสมบัติproargtypes
ได้ แต่คุณต้องเข้าร่วมกับตารางอื่นเพื่อให้เป็นชื่อ
ใช้\df
เพื่อแสดงโพรซีเดอร์ที่เก็บไว้ทั้งหมดใน Postgres
หากใครสงสัยว่าจะค้นหาตารางแค็ตตาล็อกได้อย่างรวดเร็วและใช้ประโยชน์จาก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(p.oid) ilike '%indicator_loss%'
คุณยังสามารถรับ phpPgAdmin ได้หากคุณกำหนดค่าไว้ในระบบของคุณ
ขั้นตอนที่ 1: เลือกฐานข้อมูลของคุณ
ขั้นตอนที่ 2: คลิกที่ปุ่มค้นหา
ขั้นตอนที่ 3: เปลี่ยนตัวเลือกการค้นหาเป็นฟังก์ชันจากนั้นคลิกที่ค้นหา
คุณจะได้รับรายการฟังก์ชันที่กำหนดไว้คุณสามารถค้นหาฟังก์ชันตามชื่อได้เช่นกันหวังว่าคำตอบนี้จะช่วยผู้อื่นได้
หากต้องการดูรหัสทั้งหมด (แบบสอบถาม) ที่เขียนในขั้นตอน / ฟังก์ชันที่จัดเก็บไว้ให้ใช้คำสั่งด้านล่าง:
sp_helptext procedure/function_name
สำหรับชื่อฟังก์ชันและชื่อกระบวนงานอย่าเพิ่มคำนำหน้า 'dbo' หรือ 'sys.'
อย่าเพิ่มวงเล็บที่ส่วนท้ายของขั้นตอนหรือชื่อฟังก์ชันและอย่าส่งผ่านพารามิเตอร์
ใช้คำสำคัญ sp_helptext จากนั้นส่งผ่านขั้นตอน / ชื่อฟังก์ชัน
ใช้คำสั่งด้านล่างเพื่อดูโค้ดทั้งหมดที่เขียนขึ้นสำหรับ Procedure:
sp_helptext ProcedureName
ใช้คำสั่งด้านล่างเพื่อดูโค้ดทั้งหมดที่เขียนขึ้นสำหรับฟังก์ชัน:
sp_helptext FunctionName
sp_helptext
ใน postgresql
โดยปกติแล้วคุณจะใช้แอปพลิเคชันตัวจัดการฐานข้อมูลเช่นpgAdminเรียกดูวัตถุที่คุณสนใจและคลิกขวาเพื่อไปที่ "script as create" หรือสิ่งที่คล้ายกัน
คุณกำลังพยายามทำสิ่งนี้ ... โดยไม่มีแอปการจัดการหรือไม่?