Uso de COPY FROM STDIN en postgres

14

Acabo de comenzar a usar Postgres y estoy tratando de crear una base de datos de muestra para comprender sus funciones, mirando a mi alrededor, encontré algunos scripts en pgfoundry.org. Entiendo los comandos, ya que anteriormente usaba Oracle y MS-SQL, pero todos los scripts que estoy ejecutando devuelven errores cuando alcanzan la instrucción "COPY FROM". Más precisamente, el error se arroja al primer elemento que debe insertarse en la tabla dada.

Intenté ejecutar los scripts como consultas y como pgScripts, pero de ambas maneras obtengo un error en la primera fila después de COPY FROM.

Estoy usando pgAdminIII y usé StackBuilder para instalar PostgreSQL 9.2.4.1 como un controlador DB. ¿Puedo perder alguna configuración básica que me impide ejecutar este comando, o simplemente no entendí cómo funciona?

EDITAR:
El error es:

ERROR:  syntax error at or near "7"
LINE 5600: 7 4 13 37 2012-03-10 16:41:43.797787 2012-03-10 16:41:43.797...
           ^

********** Error **********

ERROR: syntax error at or near "7"
SQL status: 42601
Char: 140891`

donde está el texto:

COPY action_abilitations (id, group_action_id, partecipation_role_id, group_id, created_at, updated_at) FROM stdin;
7   4   13  37  2012-03-10 16:41:43.797787  2012-03-10 16:41:43.797787`
Eugenio Laghi
fuente
1
Bienvenido a dba.SE. Usted necesita incluir la (palabra por palabra) de mensajes con error con una pregunta como esa. Si su configuración regional no es en inglés, puede restablecerla en su sesión antes de ejecutar el script para obtener mensajes de error en inglés predeterminados: SET lc_messages = Csimplemente ejecútelo en la ventana del editor de SQL, que "contiene" una sesión.
Erwin Brandstetter
Gracias, estoy tratando de descubrir cómo cambiar mi configuración regional, incluiré el mensaje de error tan pronto como descubra cómo hacerlo.
Eugenio Laghi
1
Ah, me olvidaba comillas simples: SET lc_messages = 'C'.
Erwin Brandstetter

Respuestas:

10

pgScript es una extensión de script local de pgAdmin, que probablemente no desee aquí.

pgAdmin es una GUI, no una aplicación de consola; no hay una stdinque pueda usar fácilmente. Si necesita stdintransmitir su contenido, use psql, que es una aplicación de consola, con el \copymetacomando de psql .

Si tiene un archivo (que obviamente tiene), simplemente use SQL COPYde pgAdmin:

COPY action_abilitations (id, group_action_id, ...)
FROM 'C:\Users\usernexus\Desktop\database05-12-2012.sql';

El archivo debe ser legible para el postgresusuario del sistema.

Más información en esta solicitud estrechamente relacionada con la lista de soporte de pgAdmin .

Erwin Brandstetter
fuente
ok, ¿quieres decir que debería ejecutar el script con una línea como psql postgres -p 5432 -f C:\Users\usernexus\Desktop\database05-12-2012.sql:? Además, solo estoy probando todo localmente, acabo de instalar pgAdmin en mi computadora portátil.
Eugenio Laghi
1
@ EugenioLaghi: No exactamente. psql -fejecutaría un archivo de script SQL. Pareces lidiar con un archivo de datos . Actualicé mi respuesta.
Erwin Brandstetter
¡GRACIAS! Al principio estaba tratando de ejecutar un script, ¡pero ahora al menos descubrí cómo COPIAR datos de un archivo! Ayer por la noche estaba demasiado cansado para entender .. :)
Eugenio Laghi
¿Cómo me aseguro de que el usuario de postgres pueda leer el archivo? Hice que eso sucediera para el archivo txt, incluso para mi escritorio (donde se encuentra el archivo), pero el permiso sigue denegado.
@Geo: Comience una nueva pregunta, incluida la versión de Postgres, el sistema operativo, dónde se encuentra el archivo, el comando literal que utilizó y más si es relevante ...
Erwin Brandstetter