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

Shell-script til at udføre pgsql-kommandoer i filer

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.



  1. Metoden org.postgresql.jdbc4.Jdbc4Connection.isValid(int) er endnu ikke implementeret

  2. Hvordan bruger jeg password hashing med PDO for at gøre min kode mere sikker?

  3. Sådan slettes lagret procedure i MySQL

  4. Trigger for at forhindre indsættelse for duplikerede data af to kolonner