psql: nur bestimmte Spalten auzsgeben
Twilo
- datenbank
Hallo,
ich benötige von einer Tabelle jeweils alle Spaltennamen, jedoch nicht folgende "gueltigab", "ungueltigab", "zuletzt_geaendert" und "eingetragen"
sortiert soll dann nach Spalte1, Spalte2, Spalte3, SpalteN.
lässt sich dieses Vorhaben mit der Bash realisieren?
mit den Befehl
psql -h new -d dgb_rtest2 -U dgb -c "SELECT attname FROM pg_attribute, pg_class WHERE attrelid = pg_class.oid AND relname='adresse' AND attnum > 0 AND attname not in ('gueltigab', 'ungueltigab', 'zuletzt_geaendert' ,'eingetragen');"
erhalte ich alle Spalten die ich brauche, leider jedoch Zeilenweise
also:
Spalte1
Spalte2
SpalteN
ich brauche die Ausgabe jedoch wie folgt Spalte1, Spalte2, Spalte3 - diese Ausgabe könnte ich dann statt den 3 Fragezeichen verwenden
das ganze möchte ich dann wie folgt verwenden
TABLES='tabelle1 tabelle2 tabelle3 tabelleN'
function xyz(){
for table in $TABLES
do
psql -h ${DBHOST} -d ${DBNAME} -U ${DBUSER} -c "SELECT ??? FROM ${table} ORDER BY ???;" > /tmp/${table}.txt
done
}
FreeBSD 6.2
Postgresql 7.4.13
Bash 3.1.17(0)-release (i386-portbld-freebsd6.2)
mfg
Twilo
yo,
mir fallen zwei möglichkeiten ein, entweder du benutzt die aggregatfunktion ähnlich dem group_concat von mysql. in oracle habe ich sie mir "gebastelt", keine ahnung ob das auch unter postgre geht.
ober aber du klebst die einzelnen zeilen mit den jeweiligen spaltennamen in deiner funktion aneinander (concat), bevor du die ausgabe machst.
Ilja
Hallo,
mir fallen zwei möglichkeiten ein, entweder du benutzt die aggregatfunktion ähnlich dem group_concat von mysql. in oracle habe ich sie mir "gebastelt", keine ahnung ob das auch unter postgre geht.
ober aber du klebst die einzelnen zeilen mit den jeweiligen spaltennamen in deiner funktion aneinander (concat), bevor du die ausgabe machst.
ich hab es jetzt erst einmal wie folgt gelöst
function xyz(){
for table in $TABLES
do
spalten=`psql -h ${DBHOST} -d ${DBNAME} -U ${DBUSER} -c "SELECT array_to_string( array( SELECT attname FROM pg_attribute, pg_class WHERE attrelid = pg_class.oid AND relname='${table}' AND attnum > 0 AND attname not in ('gueltigab', 'ungueltigab', 'zuletzt_geaendert' ,'eingetragen') ), ', ' )" |grep ,`
psql -h ${DBHOST} -d ${DBNAME} -U ${DBUSER} -c "SELECT ${spalten} FROM ${table} ORDER BY ${spalten};" > /tmp/${table}.txt
done
}
optimal wäre es, wenn ich die Spaltenabfrage im unteren SQL-Statement mit einbauen könnte.
mfg
Twilo