sql >> Database teknologi >  >> RDS >> PostgreSQL

Tjek om databasen findes i PostgreSQL ved hjælp af shell

Bemærk/opdatering (2021):Mens dette svar virker , filosofisk er jeg enig med andre kommentarer om, at den rigtige måde at gøre dette på er at spørge Postgres .

Tjek, om de andre svar, der har psql -c eller --command i dem passer bedre til din brug (f.eks. Nicholas Grilly's, Nathan Osman's, bruce's eller Pedro's variant

Jeg bruger følgende modifikation af Arturos løsning:

psql -lqt | cut -d \| -f 1 | grep -qw <db_name>

Hvad det gør

psql -l udsender noget i stil med følgende:

List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-----------+----------+------------+------------+----------------------- my_db | my_user | UTF8 | en_US.UTF8 | en_US.UTF8 | postgres | postgres | LATIN1 | en_US | en_US | template0 | postgres | LATIN1 | en_US | en_US | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | LATIN1 | en_US | en_US | =c/postgres + | | | | | postgres=CTc/postgres (4 rows)

At bruge den naive tilgang betyder, at det lykkes at søge efter en database kaldet "Liste, "Adgang" eller "rækker". Så vi sender dette output gennem en masse indbyggede kommandolinjeværktøjer for kun at søge i den første kolonne.

-t flag fjerner sidehoveder og sidefødder:

my_db | my_user | UTF8 | en_US.UTF8 | en_US.UTF8 | postgres | postgres | LATIN1 | en_US | en_US | template0 | postgres | LATIN1 | en_US | en_US | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | LATIN1 | en_US | en_US | =c/postgres + | | | | | postgres=CTc/postgres

Den næste bit, cut -d \| -f 1 opdeler output med det lodrette rør | karakter (escaped fra skallen med en omvendt skråstreg), og vælger felt 1. Dette efterlader:

 my_db             
 postgres          
 template0         
                   
 template1         
         
 

grep -w matcher hele ord, og vil derfor ikke matche, hvis du søger efter temp i dette scenarie. -q option undertrykker ethvert output skrevet til skærmen, så hvis du ønsker at køre dette interaktivt ved en kommandoprompt, kan du med at udelukke -q så noget bliver vist med det samme.

Bemærk at grep -w matcher alfanumerisk, cifre og understregningen, som er præcis det sæt af tegn, der er tilladt i databasenavne uden anførselstegn i postgresql (bindestreger er ikke lovlige i identifikatorer uden anførselstegn). Hvis du bruger andre tegn, grep -w virker ikke for dig.

Udgangsstatussen for hele denne pipeline vil være 0 (succes), hvis databasen eksisterer eller 1 (fejl), hvis det ikke gør det. Din shell vil indstille den specielle variabel $? til udgangsstatus for den sidste kommando. Du kan også teste status direkte i en betinget:

if psql -lqt | cut -d \| -f 1 | grep -qw <db_name>; then
    # database exists
    # $? is 0
else
    # ruh-roh
    # $? is 1
fi
 


  1. Brug sammensat primærnøgle som fremmednøgle

  2. Kør SCRIPT fra PL/SQL Block

  3. Hvordan kontrollerer man, om der findes en række i MySQL? (dvs. tjek om der findes en e-mail i MySQL)

  4. Rediger materialiseret visningsforespørgsel