sql >> Databasteknik >  >> RDS >> PostgreSQL

Skalskript för att köra pgsql-kommandon i filer

Först och främst, gör inte blanda psql metakommandon och SQL kommandon. Dessa är separata uppsättningar kommandon. Det finns knep för att kombinera dessa (med psql-metakommandona \o och \\ och piping strängar till psql i skalet), men det blir snabbt förvirrande.

  • Låt dina filer bara innehålla SQL-kommandon.
  • Inkludera inte CREATE DATABASE uttalande i SQL-filerna. Skapa db separat, du har flera filer du vill köra i samma mall db.

Förutsatt du arbetar som OS-användare postgres och använd DB-rollen postgres som (standard) Postgres superanvändare är alla databaser i samma DB-kluster på standardporten 5432 och rollen postgres har lösenordslös åtkomst på grund av en IDENT inställning i pg_hba.conf - en standardinställning.

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

Jag baserade den nya malldatabasen på standardsystemmalldatabasen template0 . Grunderna i manualen här.

Dina frågor

Hur man (...) kör en uppsättning pgsql cmds från filen

Försök:

psql mytemplate1 -f file

Exempel skriptfil för batch av filer i en katalog:

#! /bin/sh

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

Kommandoalternativet -f gör psql exekvera SQL-kommandon i en fil.

Hur man skapar en databas baserad på en befintlig mall på kommandoraden

psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'

Kommandoalternativet -c gör psql exekvera en enda SQL-kommandosträng. Kan vara flera kommandon, avslutade med ; - kommer att köras i ett transaktion och endast resultatet av det senaste kommandot som returnerades.
Läs om psql-kommandoalternativ i manualen.

Om du inte tillhandahåller en databas att ansluta till, psql kommer att ansluta till standardunderhållsdatabasen med namnet "postgres". I det andra svaret är det irrelevant vilken databas vi ansluter till.



  1. Oracle Wait-händelser som alla borde känna till

  2. Är Microsoft Access lätt att lära sig?

  3. Använder Salesforce SOQL från Linux

  4. Hur skapar man Codeigniter-språkfiler från databasen?