Angabe "Optionen" für Spalten zu definieren, ob sie "angezeigt" werden oder nicht scheint ein wenig Overhead. Stellen Sie sich vor, Sie behalten diese Liste in human_column
. Um es zu ändern, müssten Sie es mit neuen Werten is_displayed
aktualisieren. Dann müssten Sie die Spaltenliste erstellen, die in der Abfrage ausgewählt werden soll.
Wenn Sie eine Ansicht zu erstellen, führen Sie die gleiche (eine Liste der Spalten angeben angezeigt werden) und dann können Sie nur die Ansicht abfragen, ohne die Notwendigkeit, dynamisch die Abfrage zu erstellen. Sie können auch jederzeit die aktuelle Liste der enthaltenen Spalten aus dem Katalog oder information_schema überprüfen.
Das einzige „nicht gemütlich“ Merkmal einer Ansicht - Sie können keine Spalten darin ändern, so müssen Sie es wieder fallen zu lassen und erstellen.
Drop/create view on Demand sieht mir billiger dann auf jeder dynamisch Aufbau Abfrage mit der Liste der Spalten noch aus.
Demo:
db=# create view v as select oid,datname from pg_database;
CREATE VIEW
db=# select * from v;
oid | datname
-------+-----------
13505 | postgres
16384 | t
1 | template1
13504 | template0
16419 | o
(5 rows)
Überprüfung Liste der Spalten:
db=# select column_name,ordinal_position,column_default,is_nullable,data_type,character_maximum_length from information_schema.columns where table_name = 'v';
column_name | ordinal_position | column_default | is_nullable | data_type | character_maximum_length
-------------+------------------+----------------+-------------+-----------+--------------------------
oid | 1 | | YES | oid |
datname | 2 | | YES | name |
(2 rows)
gleiche gilt für Original-Tabelle:
db=# select column_name,ordinal_position,column_default,is_nullable,data_type,character_maximum_length from information_schema.columns where table_name = 'pg_database';
column_name | ordinal_position | column_default | is_nullable | data_type | character_maximum_length
---------------+------------------+----------------+-------------+-----------+--------------------------
datname | 1 | | NO | name |
datdba | 2 | | NO | oid |
encoding | 3 | | NO | integer |
datcollate | 4 | | NO | name |
datctype | 5 | | NO | name |
datistemplate | 6 | | NO | boolean |
datallowconn | 7 | | NO | boolean |
datconnlimit | 8 | | NO | integer |
datlastsysoid | 9 | | NO | oid |
datfrozenxid | 10 | | NO | xid |
datminmxid | 11 | | NO | xid |
dattablespace | 12 | | NO | oid |
datacl | 13 | | YES | ARRAY |
(13 rows)
Sie sollten nicht aktualisieren 'pg_attribute' sicher. und Sie können benutzerdefinierte "Attribute" zu einer Spalte hinzufügen - also nur eine Liste irgendwo gespeichert haben. Sie müssen jedoch dynamisch eine Ansicht oder Ähnliches erstellen und dann eine Fahndungsliste zurückgeben. Wenn die Liste nicht änderbar ist - erstellen Sie einfach eine Ansicht? .. –
können Sie Ihre eigene "Sprache" und verwenden Sie die pro Spalte Kommentar für Anmerkungen. Etwas spröde, obwohl – pbuck
Ich denke, dass dies nicht verwandt ist zu persistence layer (database) Ihrer Anwendung, eher zu Ihrem Server. – gokcand