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

En PostgreSQL, ¿cómo insertar datos con el comando COPIAR?

COPY tbl FROM STDIN;

pgAdmin no lo admite.
Obtiene un error de sintaxis simple porque Postgres obtiene los datos como código SQL.

Cuatro posibles soluciones:

1. Use un INSERT de varias filas en cambio:

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 valores como cadenas o literales numéricos.

Puede generar los datos con pg_dump usando --inserts . Relacionado:

  • Exportar filas específicas de una tabla de PostgreSQL como secuencia de comandos INSERT SQL

2. O llame a su secuencia de comandos 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 función 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 utilizando un archivo por lotes con [plantilla], [codificación], [propietario] y un archivo .sql

Asegúrese de que haya un marcador de fin de datos (\. ) para el text predeterminado 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 desde un archivo, ya que el fin del archivo sirve perfectamente; solo se necesita cuando se copian datos hacia o desde aplicaciones cliente usando 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 su guión:

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 que tienen uno de los roles predeterminados 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 lea un archivo local para el cliente con el meta-comando psql \copy . Ver:

  • ¿Cómo actualizar filas seleccionadas con valores de un archivo CSV en Postgres?
  • Cómo usar \copy en postgresql con pgadmin4