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 DATABASE
sæ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.