sql >> Base de Datos >  >> RDS >> PostgreSQL

Shell script para ejecutar comandos pgsql en archivos

En primer lugar, no mezclar psql meta-comandos y SQL comandos Estos son conjuntos separados de comandos. Hay trucos para combinarlos (usando los meta-comandos de psql \o y \\ y canalizar cadenas a psql en el shell), pero eso se vuelve confuso rápidamente.

  • Haga que sus archivos contengan solo comandos SQL.
  • No incluya el CREATE DATABASE instrucción en los archivos SQL. Cree la base de datos por separado, tiene múltiples archivos que desea ejecutar en la misma base de datos de plantilla.

Suponiendo está operando como usuario del sistema operativo postgres y use el rol DB postgres como superusuario de Postgres (predeterminado), todas las bases de datos están en el mismo clúster de base de datos en el puerto predeterminado 5432 y el rol postgres tiene acceso sin contraseña debido a un IDENT configuración en pg_hba.conf - una configuración predeterminada.

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

Basé la nueva base de datos de plantillas en la base de datos de plantillas del sistema predeterminada template0 . Conceptos básicos en el manual aquí.

Tus preguntas

Cómo (...) ejecutar un conjunto de pgsql cmds desde un archivo

Prueba:

psql mytemplate1 -f file

Archivo de script de ejemplo para un lote de archivos en un directorio:

#! /bin/sh

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

La opción de comando -f hace psql ejecutar comandos SQL en un archivo.

Cómo crear una base de datos basada en una plantilla existente en la línea de comando

psql -c 'CREATE DATABASE my_db TEMPLATE mytemplate1'

La opción de comando -c hace psql ejecutar una sola cadena de comando SQL. Pueden ser múltiples comandos, terminados por ; - se ejecutará en uno transacción y solo se devolvió el resultado del último comando.
Lea sobre las opciones del comando psql en el manual.

Si no proporciona una base de datos para conectarse, psql se conectará a la base de datos de mantenimiento predeterminada llamada "postgres". En la segunda respuesta es irrelevante a qué base de datos nos conectamos.