Ezequiel, parte de nuestro equipo de trabajo, nos ha hecho el favor de escribir este artículo ya que domina a la perfección el tema.
Solución:
COPY tbl FROM STDIN;
no es compatible con pgAdmin.
Obtiene un error de sintaxis simple porque Postgres obtiene los datos como código SQL.
cuatro soluciones posibles:
1. Usar una fila múltiple INSERT
en lugar de:
INSERT INTO beer(name, tags, alcohol, brewery, id, brewery_id, image)
VALUES
('Bons Voeux', 'blonde', 9.5, 'Brasserie Dupont', 250, 130, 'generic.png')
, ('Boerke Blond', 'blonde', 6.8, 'Brouwerij Angerik', 233, 287 'generic.png')
;
Tenga en cuenta la sintaxis diferente (SQL) para los valores como string o literales numéricos.
Puede generar los datos con pg_dump
utilizando --inserts
. Relacionado:
- Exporte filas específicas de una tabla de PostgreSQL como secuencia de comandos INSERT SQL
2. O llama a tu script en la línea de comando usando psql
. Como usuario del sistema postgres
:
psql -f beer.sql -U my_login_role -d db_name
base de datos (-d
) y rol de inicio de sesión (-U
para “Usuario”) se puede omitir si los valores predeterminados son correctos. Ejemplos de sintaxis:
- Cree una base de datos de Postgres usando un archivo por lotes con [template],[encoding],[owner] y un archivo .sql
Asegúrese de que haya un marcador de fin de datos (.
) por defecto text
formato. (Tienes eso.) El manual:
El final de los datos se puede representar mediante una sola línea que contiene solo un punto de barra invertida (
.
). No es necesario un marcador de fin de datos cuando se lee de un archivo, ya que el fin del archivo sirve perfectamente; solo se necesita cuando se copian datos hacia o desde aplicaciones cliente utilizando el protocolo de cliente anterior a 3.0.
3. O mueva sus datos a un archivo separado en el servidor, diga ‘beer_data.csv’ y use COPY .. FROM 'filename'
en tu guion:
COPY beer (name, tags, alcohol, brewery, id, brewery_id, image)
FROM '/path/to/beer_data.csv';
Que funciona de cualquier manera. Sin embargo, necesita privilegios de superusuario. El manual:
[…]
COPY
Solo se permite nombrar un archivo o comando a los superusuarios de la base de datos o a los usuarios a los que se les otorga una de las funciones predeterminadas.
pg_read_server_files
,pg_write_server_files
, o
pg_execute_server_program
, ya que permite leer o escribir cualquier archivo o ejecutar un programa al que el servidor tenga privilegios para acceder.
(pg_read_server_files
, pg_write_server_files
y pg_execute_server_program
son nuevos en Postgres 11.)
4. O leer un archivo local al cliente con el metacomando psql copy
. Ver:
- ¿Cómo actualizar las filas seleccionadas con valores de un archivo CSV en Postgres?
- Cómo usar copy en postgresql con pgadmin4
El primer paso es crear la base de datos. belgianbeers
en pgAdmin.
Luego abra el indicador y ejecute psql -U postgres -d belgianbeers -a -f beers.sql
Esta línea de comando ejecuta e actualiza las tablas de la base de datos.
Nota: -U postgres
= especifica postgres
como nombre de usuario
Comentarios y puntuaciones del artículo
Nos puedes añadir valor a nuestro contenido informacional colaborando tu experiencia en las interpretaciones.