Først skal du ikke bland psql meta-kommandoer og SQL kommandoer. Disse er separate sæt kommandoer. Der er tricks til at kombinere dem (ved at bruge psql-metakommandoerne \o og \\ og piping strenge til psql i shellen), men det bliver hurtigt forvirrende.
- Få dine filer til kun at indeholde SQL-kommandoer.
- Inkluder ikke
CREATE DATABASEsætning i SQL-filerne. Opret db'en separat, du har flere filer, du ønsker at udføre i den samme skabelon db.
Forudsat du fungerer som OS-bruger postgres og brug DB-rollen postgres som (standard) Postgres-superbruger er alle databaser i den samme DB-klynge på standardporten 5432 og rollen postgres har adgangskodefri adgang på grund af en IDENT indstilling i pg_hba.conf - en standardopsætning.
psql postgres -c "CREATE DATABASE mytemplate1 WITH ENCODING 'UTF8'
TEMPLATE template0"
Jeg baserede den nye skabelondatabase på standardsystemskabelondatabasen template0 . Grundlæggende i manualen her.
Dine spørgsmål
Hvordan man (...) kører et sæt pgsql cmd'er fra fil
Prøv:
psql mytemplate1 -f file
Eksempel på scriptfil for batch af filer i en mappe:
#! /bin/sh
for file in /path/to/files/*; do
psql mytemplate1 -f "$file"
done
Kommandomuligheden -f laver psql udføre SQL-kommandoer i en fil.
Sådan opretter du en database baseret på en eksisterende skabelon på kommandolinjen
psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'
Kommandomuligheden -c laver psql udføre en enkelt SQL-kommandostreng. Kan være flere kommandoer, afsluttet med ; - vil blive udført i én transaktion og kun resultatet af den sidste kommando returneret.
Læs om psql kommando muligheder i manualen.
Hvis du ikke leverer en database at oprette forbindelse til, psql vil oprette forbindelse til standard vedligeholdelsesdatabasen ved navn "postgres". I det andet svar er det irrelevant, hvilken database vi forbinder til.