วิธีดูโค้ด CREATE VIEW สำหรับมุมมองใน PostgreSQL


คำตอบ:


229

ต้องกลับมาที่นี่เพื่อค้นหาpg_get_viewdef(จะจำได้อย่างไร !!) ดังนั้นค้นหาคำสั่งที่น่าจดจำมากขึ้น ... และได้รับ:

\d+ viewname

คุณสามารถดูคำสั่งที่คล้ายกันได้โดยพิมพ์\?ที่บรรทัดคำสั่ง pgsql

เคล็ดลับโบนัส: คำสั่ง emacs sql-postgresทำให้ pgsql เป็นที่พอใจมากขึ้น (แก้ไขคัดลอกวางประวัติคำสั่ง)


1
ฉันมักจะรวมเคล็ดลับนี้กับคำสั่ง \ o ฉันดัมพ์ \ d + ไปยังไฟล์บางไฟล์จากนั้นใช้ vim macro i เพื่อแก้ไขไฟล์เหล่านั้นเพื่อจัดหาความต้องการของฉัน
— Brain90

สิ่งที่น่าเศร้าคือ: สิ่งนี้ไม่สามารถใช้งานได้หากไม่มี psql คำสั่ง SQL ที่ "บริสุทธิ์" (โดยไม่ต้องใช้ pg_get_viewdef เลย) สามารถทำได้ซึ่งสามารถพกพาได้มากกว่าเช่น Perl กับ DBI
— Jinxed

1
สิ่งที่จะมีประโยชน์มากขึ้นคือสามารถแก้ไขรหัสการกำหนดมุมมองโดยตรงด้วยการเปลี่ยนแปลงของคำสั่ง \ e เช่น \ ef สำหรับฟังก์ชั่น คุณลักษณะ A \ ev จะดี จนถึงตอนนี้วิธีการแก้ปัญหาที่แนะนำโดย @ Brain90 นั้นใกล้เคียงที่สุดเท่าที่ฉันเคยพบมาเพื่อแก้ไขนิยามมุมมองอย่างรวดเร็ว
— Thalis K.

1
เคล็ดลับที่เกี่ยวข้อง: \dvแสดงรายการทั้งหมด
— นาธานลอง

120
select pg_get_viewdef('viewname', true)

รายการฟังก์ชั่นเหล่านั้นมีอยู่ในคู่มือ:

http://www.postgresql.org/docs/current/static/functions-info.html


เจ๋งมากมันพิมพ์ออกมาสวย! :) คู่มือบอกว่ามันเลิกแม้ว่า ... :( ขอบคุณ!
— Elias Dorneles

8
@elias: เพียงแค่ใช้เวอร์ชันที่ใช้ OID โดยส่งชื่อไปที่ oid:select pg_get_viewdef('viewname'::regclass, true)
— a_horse_with_no_name

2
@elias เป็นทางเลือกในการคัดเลือกนักแสดงเช่นกัน: SELECT pg_get_viewdef(to_regclass('viewname'))(ต้องมีอย่างน้อย v9.4)
— น้ำ

49
select definition from pg_views where viewname = 'my_view'

1
ขอบคุณสำหรับสิ่งนี้ .. มันช่วยให้สามารถเข้าถึงการกำหนดมุมมองจากโปรแกรมของฉันมากกว่าจาก psql-client
— Dominik Dorn

2
สิ่งนี้มีประโยชน์เพิ่มเติมในการใช้งานกับ Amazon Redshift เช่นกัน
— เบรนต์เขียนรหัส

สิ่งนี้ใช้ไม่ได้กับมุมมองในสกีมาที่ไม่ได้อยู่ในเส้นทางการค้นหา และจะไม่แยกความแตกต่างระหว่างสองมุมมองที่มีชื่อเดียวกันในสกีมาที่แตกต่างกัน เมื่อฉันเขียนสคีมาฉันหมายถึงเนมสเปซที่คุณสร้างด้วย CREATE SCHEMA
— Michael Dillon

1
@MichaelDillon เลือก * แทนการเลือกคำจำกัดความและคุณจะสามารถดูว่าสคีมานั้นมาจากมุมมองใดรวมถึงข้อมูลอื่น ๆ
— Anders Kreinøe

หากมุมมองของคุณไม่ได้อยู่ในเส้นทางการค้นหาให้ใช้select definition from pg_views where schemaname = 'my_schema' and viewname = 'my_view'
— bonh


8

GoodNews ตั้งแต่ v.9.6 ขึ้นไปการแก้ไขมุมมองได้รับมาจาก psql เพียงแค่เรียกใช้\evคำสั่ง คำจำกัดความการดูจะแสดงในเครื่องมือแก้ไขที่กำหนดค่าของคุณ

julian@assange=# \ev {your_view_names}

โบนัส. บางคำสั่งที่เป็นประโยชน์ในการโต้ตอบกับแบบสอบถามบัฟเฟอร์

Query Buffer
  \e [FILE] [LINE]       edit the query buffer (or file) with external editor
  \ef [FUNCNAME [LINE]]  edit function definition with external editor
  \ev [VIEWNAME [LINE]]  edit view definition with external editor
  \p                     show the contents of the query buffer
  \r                     reset (clear) the query buffer
  \s [FILE]              display history or save it to file
  \w FILE                write query buffer to file

4
ฮ่าฮ่าแค่ทักทายเขา เขาทำเงินให้กับ psql มากในช่วงแรก ๆ git.postgresql.org/gitweb/…
— Brain90

3

นี่เป็นสิ่งเล็กน้อยที่จะชี้ให้เห็น
การใช้ฟังก์ชั่น pg_get_viewdef หรือ pg_views หรือ information_schema.views คุณจะได้รับเวอร์ชันที่แก้ไขใหม่ของ DDL ดั้งเดิมของคุณเสมอ
เวอร์ชัน rewited อาจเป็นหรือไม่เหมือนกับสคริปต์ DDL ดั้งเดิมของคุณ

หาก Rule Manager เขียนคำจำกัดความมุมมองใหม่ DLL ต้นฉบับของคุณจะหายไปและคุณจะสามารถอ่านคำจำกัดความมุมมองรุ่นที่เขียนใหม่เท่านั้น
ไม่ใช่มุมมองทั้งหมดจะถูกเขียนใหม่ แต่ถ้าคุณใช้ตัวเลือกย่อยหรือเข้าร่วมอาจเป็นมุมมองของคุณจะถูกเขียนใหม่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.