Scripts y Conexion remota

Hola, mi consulta es la siguiente:

Al momento de correr los scripts en la base de datos, el Script04 es el que inserta los datos en las correspondientes tablas. Pero, sucede que la sintaxis del script usa el comando SQL COPY xxx FROM stdin. Ahora bien, corriendolo desde el servidor, ocurren errores, y el script no se ejecuta. Buscando, encontré que agregando stdin es para ejecutar scripts desde la máquina cliente, por favor confirmenme eso.

Y otra cosa, sucede que estoy usando el SQL Manager 2007 para acceder desde la máquina cliente, a la base de datos “pilaga” del servidor, pero no me permite conectar. Aparentemente es algun tema de configuracion del pg_hba.conf. Yo le agregué la IP de la máquina cliente, de esta forma:

host all all 192.x.x.x md5

pero no funciona.

Estoy usando postgresql 8.3.

Saludos, y gracias de antemano.

Ya solucioné el tema de la conexion con la base de datos.

El tema era que cuando agregaraba el host que se iba a conectar, tenia que poner la IP de la forma siguiente, por ejemplo:

192.X.X.10/10

en caso de que quisieramos solamente esa maquina. Si queremos mas, ponemos un rango mas amplio.

Ahora el tema es que el script04 sigue sin andar. No me lo deja correr con esa sintaxis, la del COPY FROM stdin.

Hola José,

Vamos por partes:

Al momento de correr los scripts en la base de datos, el Script04 es el que inserta los datos en las correspondientes tablas. Pero, sucede que la sintaxis del script usa el comando SQL COPY xxx FROM stdin. Ahora bien, corriendolo desde el servidor, ocurren errores, y el script no se ejecuta. Buscando, encontré que agregando stdin es para ejecutar scripts desde la máquina cliente, por favor confirmenme eso.

La sintaxis “SQL COPY xxx FROM stdin” no implica que tengas que correr el script desde el cliente, en realidad “stdin” es usado para indicar que los datos provienen de la entrada standart. Esto significa que no vas a poder ejecutarlo desde ningún cliente gráfico, si no mas bien desde la linea de comandos. Para hacer esto podes utilizar el cliente que viene por default con postgresql llamado “psql”.

Para hacer esto hay 2 opciones(teniendo la base “pilaga” creada):

  1. Podes loguearte en la base del pilagá, estando situado en la carpeta que contiene los scripts SQL y cargarlos desde ahí. Para hacer esto tenes que ejecutar los siguientes comandos:
    psql -U ‘usuario’ ‘base’

Donde “usuario” es el usuario propietario de la base, y “base” es el nombre de la base. En este caso “pilaga”

\i ‘nombre_de_archivo.sql’

Una vez por cada archivo que tengas.Terminado esto, ya tendrías que tener la base funcionando.

  1. hacer lo mismo pero sin loguearte en la base, ya que psql admite un parámetro para ejecutar querys contenidas en un archivo directamente:

psql -U ‘usuario’ ‘base’ -f ‘nombre_de_archivo’

Donde “nombre_de_archivo” es el nombre del script SQL a ejecutar. Nuevamente, esta operación la vas a tener que ejecutar para todos los archivos.

Y otra cosa, sucede que estoy usando el SQL Manager 2007 para acceder desde la máquina cliente, a la base de datos "pilaga" del servidor, pero no me permite conectar. Aparentemente es algun tema de configuracion del pg_hba.conf. Yo le agregué la IP de la máquina cliente, de esta forma:

host all all 192.x.x.x md5

pero no funciona.

El archivo pg_hba.conf es una de las partes esenciales de la autenticación en Posqtgresql. Básicamente contiene las configuraciones de los permisos, formas y procedencias de las conexiones hacia un determinado cluster. Los permisos estan organizados por procedencia de la conexión entrante, por lo tanto la linea que hay que modificar para acceder desde un cliente dentro de la red es la que esta debajo del comentario: # IPv4 local connections

Si la linea que modificaste es efectivamente esa, quizás también el problema radique en que al cliente que elegiste no este enviando la clave encriptada como le estas indicando(la parte que dice md5). Lo mas recomendable es utilizar este valor en ‘password’, que indica que el password va a ser enviado en texto plano.

Igualmente, con esto no terminamos. La otra configuración necesaria para que el cluster acepte conexiones desde la red, se encuentra en otro archivo de configuración llamado “postgresql.conf”.
Ahí vas a encontrar una sección comentada bajo el nombre de “CONNECTIONS AND AUTHENTICATION”. Donde probablemente el atributo “listen_addresses” tenga el valor “localhost”. Esto indica que el cluster no recibe conexiones entrantes desde la red. Para cambiar esto, hay que ingresar la dirección ip por la que deseas ingresar. Usando ‘*’ se aceptan en todas las ips.

Dicho todo esto, tengo que comentarte que no es una buena idea permitir el ingreso desde afuera al cluster. Lo mas seguro es conectarse vía SSH a la máquina donde esta el motor y utilizar cualquiera de las opciones que puse arriba.

Para mas información con respecto a las configuraciones de conexión podes visitar: PostgreSQL: Documentation: 8.1: Connections and Authentication

Estoy usando postgresql 8.3.

Lo recomendado sería que hagas un downgrade al menos a la 8.2.x. Para mas información sobre las versiones recomendadas para Toba, podes visitar la página: http://toba.siu.edu.ar/trac/toba/wiki/Instalacion

Bueno, espero que te sea útil.

Saludos, Esteban.

Ok, solucionados esos temas. Gracias!

Otra cosa, se presentan problemas con el encoding. Pilaga requiere LATIN1, pero al momento de crear la base de datos desde el pgAdminIII, no nos deja con el Locale de la maquina. Lo tenemos en un Windows Server 2008.
Lo pusimos con UTF8, pero como era probable, aparecieron problemas al correr el script de carga de datos.

Saludos!

Solucionado tambien, antes de tiempo, je.

Quedó en WIN1252, y se corrieron correctamente los scripts.

Saludos!