Twilo: psql: nur bestimmte Spalten auzsgeben

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

  1. 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

    1. 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