Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2007 Teil von November

SELFHTML Forumsarchiv
psql: nur bestimmte Spalten auzsgeben

Informationsseite
  1. Seite (DATENBANK) psql: nur bestimmte Spalten auzsgeben von Twilo, 29. 11. 2007, 23:12
nach unten

psql: nur bestimmte Spalten auzsgeben

Die folgende Nachricht zum Thema stammt von: Twilo, 29. 11. 2007, 23:12

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

--
Farbtabelle

nach obennach unten

psql: nur bestimmte Spalten auzsgeben

Die folgende Nachricht zum Thema stammt von: Ilja, 30. 11. 2007, 07:29

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

nach obennach unten

psql: nur bestimmte Spalten auzsgeben

Die folgende Nachricht zum Thema stammt von: Twilo, 30. 11. 2007, 15:30

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

--
Farbtabelle

nach oben
Teil von SELFHTML Forum Teil von SELFHTML Forumsarchiv Teil von 2007 Teil von November

© 1998-2006 Seite Impressum, Software: Classic Forum