sql >> Database >  >> RDS >> PostgreSQL

Shell-script om pgsql-commando's in bestanden uit te voeren

Ten eerste, doe niet mix psql meta-opdrachten en SQL commando's. Dit zijn afzonderlijke reeksen opdrachten. Er zijn trucs om die te combineren (met behulp van de psql-meta-commando's \o en \\ en piping strings naar psql in de shell), maar dat wordt al snel verwarrend.

  • Zorg ervoor dat uw bestanden alleen SQL-commando's bevatten.
  • Voeg de CREATE DATABASE niet toe statement in de SQL-bestanden. Maak de db apart aan, je hebt meerdere bestanden die u wilt uitvoeren in dezelfde sjabloon db.

Aangenomen je werkt als OS-gebruiker postgres en gebruik de DB-rol postgres als (standaard) Postgres-superuser bevinden alle databases zich in hetzelfde DB-cluster op de standaardpoort 5432 en de rol postgres heeft wachtwoordloze toegang dankzij een IDENT instelling in pg_hba.conf - een standaardinstelling.

psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
                  TEMPLATE template0"

Ik heb de nieuwe sjabloondatabase gebaseerd op de standaard systeemsjabloondatabase template0 . Basisprincipes in de handleiding hier.

Uw vragen

Hoe (...) een set pgsql-cmds uit een bestand uitvoeren

Probeer:

psql mytemplate1 -f file

Voorbeeld scriptbestand voor batch bestanden in een map:

#! /bin/sh

for file in /path/to/files/*; do
    psql mytemplate1 -f "$file"
done

De opdrachtoptie -f maakt psql voer SQL-commando's uit in een bestand.

Een database maken op basis van een bestaande sjabloon op de opdrachtregel

psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'

De opdrachtoptie -c maakt psql voer een enkele SQL-opdrachtreeks uit. Kunnen meerdere commando's zijn, beëindigd door ; - wordt uitgevoerd in één transactie en alleen het resultaat van de laatste opdracht wordt geretourneerd.
Lees over de psql-opdrachtopties in de handleiding.

Als u geen database opgeeft om verbinding mee te maken, psql zal verbinding maken met de standaard onderhoudsdatabase met de naam "postgres". In het tweede antwoord is het niet relevant met welke database we verbinding maken.



  1. MSSQL-fout 'De onderliggende provider is mislukt bij Open'

  2. Hoe verander ik het kolomtype in Heroku?

  3. De gemakkelijke manier om een ​​MySQL Galera-cluster op AWS te implementeren

  4. TAN() Voorbeelden in SQL Server