Saya bertanya-tanya bagaimana cara menanyakan definisi tampilan terwujud di Postgres. Sebagai referensi, apa yang saya harap lakukan sangat mirip dengan apa yang dapat Anda lakukan untuk tampilan reguler:
SELECT * FROM information_schema.views WHERE table_name = 'some_view';
yang memberi Anda kolom berikut:
table_catalog
table_schema
table_name
view_definition
check_option
is_updatable
is_insertable_into
is_trigger_updatable
is_trigger_deletable
is_trigger_insertable_into
Apakah ini mungkin untuk pandangan terwujud?
Dari penelitian saya sejauh ini, tampaknya pandangan terwujud sengaja dikeluarkan dari information_schema, karena
Information_schema hanya dapat menampilkan objek yang ada dalam standar SQL.
( http://www.postgresql.org/message-id/[email protected] )
Karena mereka tampaknya sepenuhnya dikecualikan dari information_schema, saya tidak yakin bagaimana cara melakukannya, tetapi yang ingin saya lakukan ada dua:
- Menanyakan apakah ada tampilan terwujud tertentu. (Sejauh ini satu-satunya cara yang saya temukan untuk melakukan ini adalah mencoba membuat tampilan mat dengan nama yang sama dan melihat apakah itu meledak.)
- Dan kemudian query definisi tampilan terwujud (mirip dengan
view_definition
kolom aktifinformation_schema.views
).
postgresql
materialized-view
postgresql-9.4
information-schema
Sean the Bean
sumber
sumber
SELECT to_regclass('some_schema.some_mat_view')
- jika ditemukan, itu tidak harus menjadi MV. Detail: stackoverflow.com/questions/20582500/…Jawaban:
Sepertinya 9.3 dan lebih tinggi yang dapat Anda lakukan:
Info lebih lanjut ditemukan di sini: /programming/29297296/postgres-see-query-used-to-create-materialized-view
sumber
Ternyata ini tidak serumit yang saya kira! (Dengan hanya sedikit pengetahuan tentang pg_catalog ...)
Bagian 1: Permintaan apakah ada tampilan terwujud:
Baik dan mudah.
Bagian 2: Permintaan definisi tampilan terwujud:
Untuk mendapatkan kueri untuk mendapatkan definisi tampilan mat, pertama-tama saya harus mencari definisi
information_schema.views
tampilan dengan menjalankan:Kemudian saya menyalin query dan berubah
c.relkind = 'v'::"char"
untukc.relkind = 'm'::"char"
untuk mendapatkan pandangan tikar (bukan pandangan biasa). Lihat kueri lengkap di sini: http://pastebin.com/p60xwfesPada titik ini Anda bisa dengan mudah menambahkan
AND c.relname = 'some_mat_view'
dan menjalankannya untuk mendapatkan definisisome_mat_view
.Tetapi Anda masih harus melakukan ini lagi saat Anda ingin mencari definisi tampilan mat ...
Bonus: Buat tampilan untuk mempermudah ini
Saya memilih untuk membuat tampilan baru agar lebih mudah mencari definisi tampilan mat di masa depan. Saya pada dasarnya baru saja menambahkan
CREATE VIEW materialized_views AS
ke awal kueri yang ditautkan di atas untuk membuat tampilan baru, dan sekarang saya bisa melakukan kueri seperti:Jauh lebih baik!
Saya juga bisa menggunakan tampilan ini untuk dengan mudah menanyakan apakah ada tampilan terwujud dengan mengubah
*
kecount(*) > 0
.Penafian : Saya tidak tahu itu kolom lain dalam hasil kueri sepenuhnya benar, karena pandangan terwujud secara fundamental berbeda dari pandangan standar (saya pikir mereka benar). Tapi ini setidaknya permintaan
table_schema
,table_name
danview_definition
dengan benar.sumber
Kekurangannya dengan jawaban lain di sini adalah Anda baru saja mendapatkan definisi SQL, sedangkan dalam kebanyakan kasus Anda tertarik pada kolom yang sebenarnya, dan dapat memanipulasi mereka sebagai teks. Berikut ini adalah jawaban saya dari pertanyaan serupa , yang mencakup nama kolom dan tipe data:
Saya tidak bisa mengatakan bahwa saya sepenuhnya memahami model data yang mendasarinya, jadi gunakan solusi saya di bawah ini dengan sebutir garam:
Anda harus berubah
'your_schema'
dan'your_materialized_view'
.sumber