Neden postgresql pg_dump bir görünümü tablo olarak dışa aktarır?


10

PostgreSQL 9.3 pg_dumparacını yalnızca genel şema tanımını kullanarak çıkarmak için kullanıyorum:

pg_dump -s -n public -h host -U postgres --dbname=db > ./schema.sql

ancak kontrol ettiğimde schema.sqlgörüşlerimizden biri bir CREATE TABLEifade yerine bir ifadede görünür CREATE VIEW.

Ama, ben pg_dumpbelirli bir görünüm kullanarak:

pg_dump -s -t myview -h host -U postgres --dbname=db > ./schema.sql

ardından schema.sqlgerçek görünüm tanımını içerir.

Yani niye bu gerçekleşti? Sağolun beyler!

Yanıtlar:


12

Dahili olarak, görünüm yalnızca kural içeren bir tablodur, bu nedenle bu mantıklıdır.

Buraya bakın: https://postgresql.org/docs/9.5/static/rules-views.html

PostgreSQL'deki görünümler kural sistemi kullanılarak uygulanır. Aslında, aşağıdakiler arasında esasen bir fark yoktur:

CREATE VIEW myview AS SELECT * FROM mytab;

iki komutla karşılaştırıldığında:

CREATE TABLE myview (same column list as mytab);
CREATE RULE "_RETURN" AS ON SELECT TO myview DO INSTEAD
    SELECT * FROM mytab;

çünkü CREATE VIEWkomutun dahili olarak yaptığı budur . Bunun bazı yan etkileri vardır. Bunlardan biri, PostgreSQL sistem kataloglarındaki bir görünüm hakkındaki bilgilerin bir tablodaki bilgilerle tamamen aynı olmasıdır. Ayrıştırıcı için tablo ve görünüm arasında kesinlikle hiçbir fark yoktur. Aynı şey: ilişkiler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.