Esegui le query PostgreSQL dalla riga di comando


279

Ho inserito un dato in una tabella .... Voglio vedere ora l'intera tabella con righe, colonne e dati. Come posso visualizzarlo tramite comando?

Risposte:


476

psql -U username -d mydatabase -c 'SELECT * FROM mytable'

Se non hai familiarità con postgresql e non hai familiarità con l'uso dello strumento da riga di comando, psqlallora c'è un comportamento confuso di cui dovresti essere a conoscenza quando sei entrato in una sessione interattiva.

Ad esempio, avviare una sessione interattiva:

psql -U username mydatabase 
mydatabase=#

A questo punto è possibile immettere direttamente una query ma è necessario ricordare di terminare la query con un punto e virgola;

Per esempio:

mydatabase=# SELECT * FROM mytable;

Se si dimentica il punto e virgola, quando si preme invio non verrà visualizzato nulla sulla riga di ritorno perché psqlsi presupporrà che non si sia terminata l'immissione della query. Questo può portare a tutti i tipi di confusione. Ad esempio, se si immette nuovamente la stessa query, è molto probabile che si crei un errore di sintassi.

Come esperimento, prova a digitare qualsiasi garble che desideri al prompt di psql, quindi premi invio. psqlti fornirà silenziosamente una nuova linea. Se inserisci un punto e virgola su quella nuova riga e poi premi invio, riceverai l'ERRORE:

mydatabase=# asdfs 
mydatabase=# ;  
ERROR:  syntax error at or near "asdfs"
LINE 1: asdfs
    ^

La regola empirica è: se non hai ricevuto risposta psqlma ti aspettavi almeno QUALCOSA, allora hai dimenticato il punto e virgola;


4
Dal momento che almeno 7.2 (che è fin da quando mi sono preso la briga di controllare, potrebbe essere anche prima), psql ha avuto l'opzione --single-line(o -s) che rende immediato ogni comando senza la necessità di aggiungere un punto e virgola.
Gordon,

3
Ho impiegato un'ora a eseguire il debug e il problema era il punto e virgola mancante. GRAZIE
Dawson B,

106
SELECT * FROM my_table;

dov'è my_tableil nome del tuo tavolo.

MODIFICARE:

psql -c "SELECT * FROM my_table"

o semplicemente psqle quindi digitare le query.


7
psql -U username -c your_database "SELECT * FROM my_table"
DrColossos,

3
come detto, dovresti terminare il tuo comando con punto e virgola ; se sei su un sistema Windows, vedi fondamentalmente notws per gli utenti di Windows , appena messo cmd.exe /c chcp 1252dopo aver aperto il prompt della console.
D_Guidi,

2
per i futuri utenti, assicurati di aggiungere -d prima del nome del tuo database e -c prima della query: psql -U username -d mydatabase -c 'SELECT * FROM mytable'
jmhead

2
non ha funzionato per me. Ho fattopsql: FATAL: database "SELECT * FROM tb_name" does not exist
Jaswinder il

Come indicato da @DrColossos, sembra che le virgolette doppie intorno al comando siano necessarie almeno dagli ambienti cli / batch di Windows.
jewbix.cube,

43

Se il tuo DB è protetto da password, la soluzione sarebbe:

PGPASSWORD=password  psql -U username -d dbname -c "select * from my_table"

3
Non so mai in grado di fornire la password in questo modo. È davvero utile quando si fa il test. Grazie
zhihong,

21

Apri "SQL Shell (psql)" dalle tue Applicazioni (Mac).

inserisci qui la descrizione dell'immagine

Fare clic su Invio per le impostazioni predefinite. Immettere la password quando richiesto.

inserisci qui la descrizione dell'immagine

*) Digita \?aiuto

*) Digita \conninfoper vedere a quale utente sei connesso.

*) Genere \l per visualizzare l'elenco dei database.

inserisci qui la descrizione dell'immagine

*) Connettersi a un database \c <Name of DB>, ad esempio\c GeneDB1

inserisci qui la descrizione dell'immagine

Dovresti vedere il prompt dei tasti cambiare nel nuovo DB, in questo modo: inserisci qui la descrizione dell'immagine

*) Ora che ti trovi in ​​un determinato DB, vuoi conoscere gli schemi per quel DB. Il miglior comando per farlo è \dn.

inserisci qui la descrizione dell'immagine

Altri comandi che funzionano anche (ma non altrettanto bene) sono select schema_name from information_schema.schemata;e select nspname from pg_catalog.pg_namespace;:

inserisci qui la descrizione dell'immagine

-) Ora che hai gli schemi, vuoi conoscere le tabelle in quegli schemi. Per questo, puoi usare il dtcomando. Per esempio\dt "GeneSchema1".*

inserisci qui la descrizione dell'immagine

*) Ora puoi fare le tue domande. Per esempio:

inserisci qui la descrizione dell'immagine

*) Ecco come appaiono il DB, lo schema e le tabelle sopra in pgAdmin:

inserisci qui la descrizione dell'immagine


3
  1. Apri un prompt dei comandi e vai alla directory in cui Postgres è installato. Nel mio caso il mio percorso Postgres è "D: \ TOOLS \ Postgresql-9.4.1-3". Successivamente passa alla directory bin di Postgres. Quindi il prompt dei comandi mostra come "D: \ TOOLS \ Postgresql-9.4.1-3 \ bin>"
  2. Ora il mio obiettivo è selezionare "UserName" dalla tabella degli utenti usando il valore "UserId". Quindi la query del database è " Seleziona u." UserName "dagli utenti u Dove u." UserId "= 1 ".

La stessa query è scritta come di seguito per il prompt dei comandi di psql di postgres.

D: \ TOOLS \ Postgresql-9.4.1-3 \ bin> psql -U postgres -d DatabaseName -h localhost - t -c "Seleziona u. \" Nomeutente \ "dagli utenti u Dove u. \" UserId \ "= 1;


3

Non ho dubbi sulla risposta di @Grant. Ma a volte incontro alcuni problemi, ad esempio se il nome della colonna è simile a qualsiasi parola chiave riservata di postgresql come naturale, in questo caso SQL simile è difficile da eseguire dalla riga di comando in quanto "\ naturale \" sarà necessario nel campo Query. Quindi il mio approccio è scrivere l'SQL in un file separato ed eseguire il file SQL dalla riga di comando. Anche questo ha un altro vantaggio. Se è necessario modificare la query per uno script di grandi dimensioni, non è necessario toccare il file di script o il comando. Cambia solo il file SQL in questo modo

psql -h localhost -d database -U postgres -p 5432 -a -q -f /path/to/the/file.sql

3

Ho anche notato che la query

SELEZIONA * DA tablename;

dà un errore sul prompt dei comandi di psql e

SELEZIONA * DA "tablename";

funziona bene, davvero strano, quindi non dimenticare le doppie virgolette. Mi sono sempre piaciuti i database :-(


-8

Per un particolare tipo di istruzioni puoi trovare più appropriato da usare Azure Data Studio- per tutto il resto viene fornito con la riga di comando integrata. Usando lo studio puoi trovare più comode le dichiarazioni di battitura e leggere l'output.

Seguire i passaggi seguenti:

  1. Installa Azure Data Studio : è un editor moderno multipiattaforma incentrato sullo sviluppo dei dati; è open source ed estensibile - due cose su cui PostgreSQL stesso si basa;
  2. Installa l'estensione PostgreSQL
  3. Connettiti al tuo server locale o remoto:

    inserisci qui la descrizione dell'immagine

  4. Concentrati sulla scrittura e sull'esecuzione di solo SQL:

    inserisci qui la descrizione dell'immagine

Ci sono molte belle funzioni come il salvataggio delle connessioni, la creazione di gruppi di server e persino il terminale integrato se ti senti più a tuo agio nel fare qualche operazione tramite psql.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.