Tengo algunos archivos .sql con miles de instrucciones INSERT y necesito ejecutar estos insertos en mi base de datos PostgreSQL para agregarlos a una tabla. Los archivos son tan grandes que es imposible abrirlos y copiar las instrucciones INSERT en una ventana del editor y ejecutarlas allí. Descubrí en Internet que puede usar lo siguiente navegando a la carpeta bin de su instalación de PostgreSQL:
psql -d myDataBase -a -f myInsertFile
En mi caso:
psql -d HIGHWAYS -a -f CLUSTER_1000M.sql
Luego me piden una contraseña para mi usuario, pero no puedo ingresar nada y cuando presiono enter recibo este error:
psql: FATAL: la autenticación de contraseña falló para el usuario "myUsername"
¿Por qué no me deja ingresar una contraseña? ¿Hay alguna forma de evitar esto, ya que es fundamental que pueda ejecutar estos scripts?
Resolví este problema agregando una nueva entrada en mi archivo pg_hba.conf con la siguiente estructura:
# IPv6 local connections:
host myDbName myUserName ::1/128 trust
El archivo pg_hba.conf generalmente se puede encontrar en la carpeta 'data' de su instalación de PostgreSQL.
fuente
Respuestas:
Tiene cuatro opciones para proporcionar una contraseña:
http://www.postgresql.org/docs/current/static/libpq-envars.html
http://www.postgresql.org/docs/current/static/libpq-pgpass.html
https://www.postgresql.org/docs/current/static/libpq-connect.html#LIBPQ-CONNSTRING
fuente
-u
parámetro como se documenta en el manualPor supuesto, obtendrá un error fatal para la autenticación, porque no incluye un nombre de usuario ...
Prueba este, está bien para mí :)
Si la base de datos es remota, use el mismo comando con el host
fuente
-a
param?-a
no es necesario aquí. Es "Imprimir todas las líneas de entrada no vacías a la salida estándar a medida que se leen"Deberías hacerlo así:
Ver:
fuente
Permission denied
chmod 777 myfile
errorPermission denied
fue corregidoUse esto para ejecutar archivos * .sql cuando el servidor PostgreSQL se encuentre en un lugar diferente:
Luego se le solicita que ingrese la contraseña del usuario.
EDITAR: actualizado en base al comentario proporcionado por @zwacky
fuente
-a
: all echo ,:-q
quiet-f
fuente
Si ha iniciado sesión en psql en el shell de Linux, el comando es:
para un camino absoluto y
para la ruta relativa desde donde ha llamado psql.
fuente
A través del terminal, inicie sesión en su base de datos e intente esto:
o
o
fuente
Puede proporcionar tanto el nombre de usuario como la CONTRASEÑA en la línea de comando.
fuente
incluso podrías hacerlo de esta manera:
Si tiene
sudo
acceso en la máquina y no se recomienda para scripts de producción solo para probar en su propia máquina, es la forma más fácil.fuente
Vea cómo ejecutar un SQL en la línea de comando para PostgreSQL en Linux:
Abra una terminal y asegúrese de poder ejecutar el
psql
comando:La mía es la versión 9.1.6 ubicada en
/bin/psql
.Cree un archivo de texto simple llamado
mysqlfile.sql
Edite ese archivo, ponga una sola línea allí:
Ejecute este comando en la línea de comandos (sustituyendo su nombre de usuario y el nombre de su base de datos por pgadmin y kurz_prod):
El siguiente es el resultado que obtengo en el terminal (no se me solicita una contraseña):
fuente
Puede abrir un símbolo del sistema y ejecutar como administrador. Luego escribe
Password for user postgres:
Aparecerá.Escriba su contraseña e ingrese. No pude ver la contraseña que estaba escribiendo, pero esta vez cuando presioné enter funcionó. En realidad estaba cargando datos en la base de datos.
fuente
-d "postgres"
-d
para el nombre de la base de datos, verifiquepsql --help
Logré que escribió (ubicado en el directorio donde está mi script)
donde
-u user
es el rol propietario de la base de datos donde quiero ejecutar el script, luego sepsql
conecta a lapsql
consola y luego-d my_database
me cargamydatabase
finalmente-a -f file.sql
donde-a
echo toda la entrada del script y-f
ejecuta los comandos desdefile.sql
adentromydatabase
, luego salgo.Estoy usando: psql (PostgreSQL) 10.12 en (Ubuntu 10.12-0ubuntu0.18.04.1)
fuente