Come eseguire più query utilizzando psql comando da shell bash?

Ho bisogno di eseguire postgresql query da riga di comando psql -c comando.
Per ogni comando psql, si apre una nuova connessione tcp per connettersi al server di database e di eseguire la query che è un overhead per il gran numero di query.

Attualmente posso eseguire query come questa:

psql -U postgres -h <ip_addr> -c "SELECT * FROM xyz_table;"

Quando ho provato a eseguire più query, come di seguito, ma solo l’ultima query ha eseguito.

psql -U postgres -h <ip_addr> -c "SELECT * FROM xyz_table; SELECT * FROM abc_table;"

Qualcuno mi può aiutare e dirmi il modo corretto per farlo?

  • Entrambi sono eseguite le istruzioni, ma solo l’ultima restituisce un set di risultati. Controllare il manuale: postgresql.org/docs/current/interactive/app-psql.html
  • Grazie, @FrankHeikens! Penso che si dovrebbe anche aggiungere che, come una risposta (o proporre una modifica accettato di rispondere). La risposta in alto promuove la disinformazione che solo un comando non viene elaborato.
InformationsquelleAutor Pankaj Goyal | 2015-03-02



4 Replies
  1. 55

    -c processi di un solo comando. Senza di essa, tuttavia psql si aspetta comandi per essere passato in input standard, ad esempio:

    psql -U postgres -h <ip_addr> <database_name> << EOF
    SELECT * FROM xyz_table;
    SELECT * FROM abc_table;
    EOF

    O utilizzando echo e tubi.

    • Ho anche letto su psql -U postgres -h <ip_addr> <database_name> -f - a fare lo stesso. Qualsiasi pro o contro?
    • dovrebbe essere esattamente la stessa.
    • Come Jolly indicato nella domanda, commento, l’esecuzione di con -c <comando> effettivamente eseguire tutte le istruzioni, ma solo il risultato ultimo sarà restituito.
    • Sì che bello, ma se ho davvero bisogno di eseguire psql due volte, e mantenere i comandi nella stessa sessione, è possibile?
  2. 8

    Utilizzando echo e un tubo per montarlo su una sola riga:

    echo 'SELECT * FROM xyz_table; \n SELECT * FROM abc_table' | psql -U postgres 
    • Su alcuni sistemi potrebbe essere necessario fare echo -e ...
  3. 5

    almeno da 9.6.2 questo approccio funziona così:

    psql -c “select now()” -c “select version()” -U postgres -h 127.0.0.1

    ora

    2017-12-26 20:25:45.874935+01
    (1 riga)

    versione

    PostgreSQL 9.6.2 su x86_64-pc-linux-gnu, compilato con gcc (Ubuntu 5.3.1-14ubuntu2) 5.3.1 20160413, 64-bit
    (1 riga)

Lascia un commento