วิธีดูโค้ด 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.