Índice

  1. Sobre ArPug (el grupo de Usuarios)
    1. ¿Quiénes somos?
    2. ¿Qué hacemos?
    3. ¿Cómo surgió ArPug?
    4. ¿Cómo es la organización interna del ArPug?
    5. ¿Cómo participar?
    6. ¿Cuales son la estructura y/o normas para agregar contenido a la Wiki?
    7. ¿Cómo colaboro con ésta lista de preguntas?
    8. Quiero aprender PostgreSQL. ¿Dónde consigo material?
    9. La respuesta que necesito no está en esta sección o es insuficiente. …
  2. Linux
    1. ¿Como instalar el servidor en Ubuntu?
    2. ¿Como acceder al servidor en Ubuntu?
    3. ¿Como instalar un respaldo automático en Linux?
    4. ¿Como optimizar consultas al aumentar la memoria compartida de PostgreSQL …
    5. ¿Como crear bases con codificación LATIN1?
    6. ¿Cómo instalar lenguaje procedural PlPython en Linux?
    7. ¿Como ingresar como usuario postgres?
    8. ¿Como crear otro super usuario?
    9. ¿Como ingresar a psql como otro usuario?
  3. Windows
    1. ¿Como instalar el motor de base de datos PostgreSQL en Windows?
    2. ¿Como ingresar y crear una base de prueba en Windows?
    3. ¿Como restaurar una base de datos en Windows?
    4. ¿Como habilitar puerto 5432 en Windows?
    5. ¿Como ingresar sin contraseña?
    6. ¿Como configurar de Conexiones encriptadas SSL en Windows?
    7. ¿Cómo instalar lenguaje procedural PlPython en Windows?
    8. ¿Cómo borrar o modificar la contraseña de la cuenta del servicio postgres?
    9. ¿Como iniciar, detener o ejecutar comandos como el usuario postgres?
    10. El servicio PostgreSQL no inicia correctamente
    11. ¿Como crear bases de datos con codificación Latin1?
    12. ¿Como solucionar el error de inicio de sesión secundaria?
    13. ¿Como solucionar problema de instalación de servicio netlogon?
    14. ¿Como solucionar problema de inicio por datos invalidos en archivo PID?
  4. General
    1. ¿Como cambiar el lenguage de pgAdmin III a español?
    2. ¿Como obtener ayuda en Español sobre SQL en pgAdmin III?
    3. ¿Como cambiar la contraseña de postgres?
    4. ¿Como migrar entre versiones?
    5. ¿Como cambio el nombre de una base de datos?
    6. ¿Como conectarse a PostgreSQL desde ...?
    7. ¿Como cambiar el encoding (codificación) de una conexión (UTF8 <-> …
    8. ¿Como habilitar el acceso remoto a PostgreSQL?
    9. ¿Como iniciar en modo mono-usuario (para recuperación)?
    10. Consejos para analizar el rendimiento de consultas y/o optimizar …

Preguntas Frecuentes

Aquí se recopilan preguntas y respuestas útiles, relevantes y/o realizadas con cierta frecuencia en la lista de correo o similares, con el objetivo de facilitar la búsqueda de dicha información.

Tambien debería usarse para incluír información relevante sobre la comunidad y en especial el ArPug, miembros, organización, etc.

Para ver las Preguntas Frecuentes en la wiki de PostgreSQL diríjase a  http://wiki.postgresql.org/wiki/Preguntas_Frecuentes

Sobre ArPug (el grupo de Usuarios)

¿Quiénes somos?

ArPug = Ar.P.U.G. = Argentina PostgreSQL User Group = Grupo de Usuarios de PostgreSQL de Argentina

O sea, somos un grupo de personas con un interés en común: PostgreSQL y de un lugar en particular: Argentina

¿Qué hacemos?

Estamos intentando organizarnos, armar eventos y reuniones, mantener un sitio web con herramientas para la comunidad (wiki, pootle, etc.), compartir proyectos, experiencias y demás temas relacionados a PostgreSQL.

¿Cómo surgió ArPug?

Formalmente, la lista de correo apareció en Diciembre de 2008, el sitio web ya estaba funcionando mucho antes (y se utilizaba la lista pgsql-es-ayuda, genérica en ese momento).

Si bien había varias personas en la comunidad argentina desde hace rato, se podría decir que el ArPug se fué gestando y termino de nacer con el primer evento PgDay2008 el 22 de Noviembre de este año, donde fue la primer reunion de gente interesada de todo el país, y muchos nos pusimos en contacto por primera vez con la comunidad e incluso personas del exterior que asistieron al evento.

¿Cómo es la organización interna del ArPug?

Este tema falta definir. En el Primer PgDay los organizadores presentaron una charla con estos temas, que quedaron pendientes para la próxima reunión.

¿Cómo participar?

Suscribiéndote a la lista de correo  arpug@postgresql.org, registrándote en el portal (wiki), asistiendo a cualquiera de nuestros eventos o reuniones, agregando información a la wiki, etc. (ver Página Principal)

¿Cuales son la estructura y/o normas para agregar contenido a la Wiki?

Este sitio se basa en experiencias previas de otras comunidades:

Por lo que se tomo una mezcla del formato y estructura de dichos portales para empezar, pero a diferencia de dichas comunidades, todavia no tenemos una Normativa o Etiqueta que cumplir, por lo que la única regla para contribuir es: que no hay ningúna regla. O sea, usá tu propio criterio para crear páginas y contenido.

¿Cómo colaboro con ésta lista de preguntas?

Con criterio, a sentirse libre de agregar las preguntas y respuestas que consideren relevantes. No agregar información redundante que ya tenga su lugar (ej, en la wiki de PostgreSQL o la documentación oficial). Ver página Como Contribuir para información de como registrarse una cuenta para editar este sitio.

Quiero aprender PostgreSQL. ¿Dónde consigo material?

Ver:

  • Sección Documentación
    • TutorialPostgreSql: Tutorial introductorio y genérico de PostgreSQL, Modelo Relacional y Lenguaje SQL
    • PgAdmin3: Tutorial introductorio de la herramienta pgAdmin III (diseño, administración y mantenimiento para PostgreSQL)
    • Tutorial PostgreSQL: tutorial oficial de PostgreSQL (traducción al español)
    • Referencia SQL: instrucciones, sentencias, comandos y clausulas SQL (traducción al español del manual oficial)
  • Enlaces

La respuesta que necesito no está en esta sección o es insuficiente. ¿Dónde puedo conseguir más información?

En la Sección de Soporte encontrará los canales de chat para solicitar ayuda en linea y las listas de correo para hacer preguntas por email.

Linux

¿Como instalar el servidor en Ubuntu?

En Ubuntu o Debian se puede instalar los paquetes oficiales para dichas distribuciones.

Primero se debe entrar en una terminal presionando ´´ALT+F2´´ y escribiendo ´´gnome-terminal´´. Luego, en la terminal escribir ´´sudo apt-get install postgresql-8.4 pgadmin3´´

Ejemplo:

reingart@desktop:~$ sudo apt-get install postgresql-8.4 pgadmin3 -y
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias       
Leyendo la información de estado... Hecho
Paquetes sugeridos:
  postgresql-contrib oidentd ident-server
Se instalarán los siguientes paquetes NUEVOS:
  pgadmin3 postgresql-8.4
0 actualizados, 2 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 6.152 kB de archivos.
Se utilizarán 17,7 MB de espacio de disco adicional después de esta operación.
Des:1 http://ar.archive.ubuntu.com/ubuntu/ natty/universe pgadmin3 amd64 1.12.2-1 [2.111 kB]
Des:2 http://ar.archive.ubuntu.com/ubuntu/ natty/main postgresql-8.4 amd64 8.4.8-0ubuntu0.11.04 [4.042 kB]
Descargados 6.106 kB en 3min. 45seg. (27,1 kB/s)                               
Seleccionando el paquete pgadmin3 previamente no seleccionado.
(Leyendo la base de datos ... 278792 ficheros o directorios instalados actualmente.)
Desempaquetando pgadmin3 (de .../pgadmin3_1.12.2-1_amd64.deb) ...
Seleccionando el paquete postgresql-8.4 previamente no seleccionado.
Desempaquetando postgresql-8.4 (de .../postgresql-8.4_8.4.8-0ubuntu0.11.04_amd64.deb) ...
Procesando disparadores para man-db ...
Procesando disparadores para bamfdaemon ...
Rebuilding /usr/share/applications/bamf.index...
Procesando disparadores para desktop-file-utils ...
Procesando disparadores para python-gmenu ...
Rebuilding /usr/share/applications/desktop.es_AR.utf8.cache...
Procesando disparadores para python-support ...
Configurando pgadmin3 (1.12.2-1) ...
Configurando postgresql-8.4 (8.4.8-0ubuntu0.11.04) ...
update-alternatives: utilizando /usr/share/postgresql/8.4/man/man1/postmaster.1.gz para proveer /usr/share/man/man1/postmaster.1.gz (postmaster.1.gz) en modo automático.
 * Starting PostgreSQL 8.4 database server                               [ OK ] 

Una vez terminado el proceso, debería quedar ejecutando el servidor y es posible ingresar por el menu de programas o ´´ALT+F2´´ y escribiendo ´´pgadmin3´´ o ´´pgsql´´

También se puede descargar y ejecutar los instaladores de un solo click, pero no es lo mas recomendable para sistemas que ya soporten paquetes oficiales.

¿Como acceder al servidor en Ubuntu?

En general, en Ubuntu una vez instalado el servidor solo se puede acceder como el usuario ´´postgres´´, para lo cual uno tiene que cambiarse a dicho usuario del sistema operativo con ´´sudo´´ por ejemplo:

reingart@desktop:~$ sudo -u postgres psql
psql (8.4.8)
Type "help" for help.

postgres=# 

De lo contrario dará el siguiente error de acceso (por no coincidir la identificación del usuario del Sistema Operativo con la de PostgeSQL):

reingart@desktop:~$ psql -U postgres
psql: FATAL:  la autentificaci?n Ident fall? para el usuario <<postgres>>

Para evitar tener que usar el usuario ´´postgres´´ y ejecutar ´´sudo´´, es recomendable crear una cuenta en PostgreSQL llamada del mismo nombre que el usuario que opera el equipo, ejecutando ´´sudo -u postgres createuser usuario1´´ (cambiar usuario1 por su nombre, escribir la nueva contraseña dos veces y tipear ´´y´´ para crear un superusuario):

reingart@desktop:~$ sudo -u postgres createuser -EP usuario1
Enter password for new role: 
Enter it again: 
Shall the new role be a superuser? (y/n) y

Luego debería ser posible ingresar de forma local directamente con psql. Para utilizar PgAdmin3, se debe crear un nuevo servidor con los siguientes datos:

  • Name (nombre): local
  • Host (equipo): dejar en blanco
  • Port (puerto): dejar 5432
  • Username (nombre de usuario): completar con el nombre creado en el paso anterior, ej usuario1
  • Password (contraseña): dejar en blanco

Con dichos datos debería aparecer una conexión "local (local:s.PGSQL.5432)" y debería poder acceder sin problemas.

¿Como instalar un respaldo automático en Linux?

En debian hacer un archivo en /etc/cron.daily/backup:

#!/bin/sh
umask 0026
su postgres -c "/usr/bin/pg_dumpall" | bzip2 > /home/backups/postgresql`date +%F`.dump.bz2
  • Fijarse que tenga permisos de ejecución (chmod 755 /etc/cron.daily/backup)
  • Esto respalda todas las bases de datos, para respaldar una sola reemplazar "pg_dumpall" por "pg_dump mibase".
  • Le agrega la fecha al nombre de archivo (ej postgresql20081202.dump.bz2), y lo graba en /home/backups (revisar path)
  • Esto lo hace una vez por día, sino, para decidir la hora exacta (o si uno no es root):
    • grabar el archivo en otra parte (por ej en el home y no en etc)
    • probablemente habrá que sacar el su postgres -c y comillas (no ejecutarse como superusuario)
  • ejecutar un "crontab -e" y agregar la entrada de cron. Por ej (para ejecutarlo a las 6:25am):
    25 6    * * *   usuario    /home/usuario/backup
    

En otros linux es parecido

¿Como optimizar consultas al aumentar la memoria compartida de PostgreSQL en Linux?

Para optimizar las consultas, se puede aumentar la memoria compartida, por ej. modificando las siguientes directivas del archivo postgresql.conf:

max_connections = 20
shared_buffers = 384MB
work_mem = 64MB
maintenance_work_mem = 132MB
effective_cache_size = 3GB

Al aumentar el shared_buffers hay que aumentar la memoria compartida del kernel. Se puede ejecutar por linea de comandos la siguiente orden para elevarla por ej. 512M:

sysctl -w kernel.shmmax = 536870912

Una vez que el cambio sea definitivo, guardar la configuración del kernel en el archivo /etc/sysctl.conf:

kernel.shmmax = 536870912

NOTA: esto fue levantado de la lista y era para un caso específico, sus resultados pueden variar (ver la documentación).

¿Como crear bases con codificación LATIN1?

Generalmente por defecto los servidores Debian no instalan todas las codificaciones, por lo que si se intenta crear una base de datos con codificación en latin1 (iso-8859-1, win1252) en vez de utf-8, tendremos el siguiente inconveniente:

$ createdb mibase -E latin1 createdb: falló la creación de la base de datos: ERROR: la codificación LATIN1 no coincide con la configuración regional del servidor es_AR.UTF-8 DETAIL: La configuración regional LC_CTYPE del servidor requiere la codificación UTF8.

Para solucionarlo, se debe instalar el locale para la configuración necesaria, y crear una nueva instancia de la base de datos:

/etc/init.d/postgresql-8.3 stop # detener el servidor

# reconfigurar locales, marcar es_AR.ISO-8859-1
dpkg-reconfigure locales

# generar el locale (si en el paso anterior no se pudo)
locale-gen es_AR

# renombrar directorios originales
mv /var/lib/postgresql/8.3/main /var/lib/postgresql/8.3/orig
mv /etc/postgresql/8.3/main /etc/postgresql/8.3/orig

# crear instancia (initdb - "culster")
pg_createcluster 8.3 main --locale=es_AR.ISO-8859-1

/etc/init.d/postgresql-8.3 start # iniciar el servidor

¿Cómo instalar lenguaje procedural PlPython en Linux?

En debian/ubuntu:

sudo apt-get install postgresql-plpython-8.3

Para crear el lenguaje en bases de datos ya instaladas, abrir una consola SQL y escribir:

CREATE LANGUAGE plpythonu;

¿Como ingresar como usuario postgres?

En linux, puede ingresar como usuario postgres (superusuario administrador) y no se solicitará contraseña ejecutando:

sudo su postgres

Para configurar este tipo de acceso (si no estubiese configurado), debe habilitar la configuración de acceso (/etc/postgresql/8.1/main/pg_hba.conf) "identidad del mismo usuario" (ident sameuser) :

local   all         postgres                          ident sameuser

Nota: postgres´ debe ser el nombre de usuario unix y de la base de datos. La conexión es local` hecha por socket de dominio unix (no por TCP/IP)

Advertencia: habilite esta configuración sólo si confia en los servicios de ident de su equipo unix.

Ver respuesta Como ingresar sin contraseña para ingresar sin contraseña por conexiones TCP/IP locales.

Ver respuesta Como cambiar la contraseña de postgres para reestablecer la contraseña por una nueva y poder ingresar por conexiones TCP/IP.

¿Como crear otro super usuario?

En linux, por defecto se crea el usuario postgres (superusuario administrador), y para ingresar hay iniciar sesión unix con dicho usuario.

Para poder ingresar a PostgreSQL con otro usuario distinto (ej. nuestro nombre de usuario unix) y también ser administrador, se puede ejecutar en la consola unix:

sudo su postgres
createuser -s -E -P mariano

o en una linea:

sudo su postgres -c "createuser -s -E -P mariano"

Reemplazar mariano por el nombre de usuario. Recordar que -s crea el rol como superusuario (administrador) por lo que no tendrá restricciones de acceso. Adicionalmente las opciones -E y -P nos solicitarán una contraseña que se encriptará, para poder ingresar por conexiones que requieran contraseña.

El comando createuser también puede ser usado en Windows.

Ver siguiente pregunta ¿Como ingresar a `psql` como otro usuario? si el nombre de usuario unix no coincide con el nombre de usuario de postgres.

¿Como ingresar a psql como otro usuario?

Para ingresar ("loguearse" o "iniciar sesión") a PostgreSQL vía la herramienta por linea de comandos ´psql´ bajo un usuario específico (por ej., distinto al nombre de usuario unix), utilizar la opción -U:

psql -U mariano mibase

Reemplazar mariano por el nombre de usuario y mibase por el nombre de la base de datos a ingresar.

La herramienta psql también puede ser usada en Windows con estos mismos parámetros.

Windows

¿Como instalar el motor de base de datos PostgreSQL en Windows?

Ver:

Para descargar los instaladores ver sección Archivos, Servidor PostgreSQL

¿Como ingresar y crear una base de prueba en Windows?

  1. Ir al Administrador (Inicio->Todos los Programas->PostgreSQL 8.1->PgAdminIII)
  2. Doble click en el primer servidor (PostgreSQL Database Server 8.1 (localhost:5432))
  3. Ingresar contraseña previamente creada en paso 1.2.6.5: ingresar una contraseña para la administración
    1. Abir el árbol hasta que aparezca "Roles de Login", click derecho, "Crear Nuevo Rol de Login"
      1. Nombre del Rol: usuario de prueba (ej. prueba)
      2. Contraseña: ingresar una contraseña para prueba
      3. Tildar "Puede crear objetos de base de datos"
      4. Ok
    2. Ir a "Base de Datos", click derecho, "Crear Nueva Base de Datos"
      1. Nombre: nombre de la base (ej. prueba)
      2. Propietario: usuario de prueba (ej. prueba)
      3. Codificado: LATIN1
      4. Ok
    3. Abrir "Base de Datos", doble click sobre nombre de la base.

En este punto ya se puede operar sobre esta base de pruebas, navegando el arbol de objetos o con la herramienta de consulta (menú herramientas)

Para más información ver Tutorial de pgAdmin III

¿Como restaurar una base de datos en Windows?

Para restaurar un backup, habrir PgAdminIII, buscar la base de datos, hacer click izquierdo sobre "Restaurar"

  1. Nombre del Archivo: buscar el backup (*.backup)
  2. Ok
  3. Cuando termina dice el botón "Hecho"

Para más información ver Tutorial de pgAdmin III

¿Como habilitar puerto 5432 en Windows?

Habilitar puerto en firewall de windows (para que se pueda conectar a postgresql desde afuera):

  1. Inicio->Panel de Control->Conexiones de Red
  2. En Tareas de Red, seleccionar Cambiar Configuración de Firewall de Windows
  3. Ir a la Solapa de Excepciones
  4. Agregar Puerto
  5. Nombre: postgresql
  6. Número de Puerto: 5432
    1. Marcar TCP
    2. Aceptar
  7. Abrir puerto 5432 en el router hacia la máquina (depende del modelo del router y proveedor de internet)

¿Como ingresar sin contraseña?

Si no recuerda la contraseña del superusuario (si olvidó la clave de postgres), se puede acceder a PostgreSQL sin contraseña modificando la configuración de acceso en c:\archivos de programa\postgresql\8.4\data, Archivo pg_hba.conf, buscar linea:

host    all         all         127.0.0.1/32          md5

y cambiar el método de acceso md5 por trust por:

host    all         all         127.0.0.1/32          trust

Nota:: Aunque PostgreSQL no requiera contraseña, algunos programas como PgAdmin3 igualmente la solicitan, en dicho caso ingresar cualquier contraseña.

Advertencia: Con este cambio, se habilita el acceso irrestricto (sin contraseña) desde el equipo local (localhost), por lo que cualquier programa ejecutandose localmente en el equipo (o usuario conectado por Escritorio Remoto o similar) puede acceder como super usurario a la base de datos PostgreSQL. Se recomenda cambiar la contraseña y volver al método de acceso md5 para requerir contraseña.

Ver respuesta Como cambiar la contraseña de postgres para reestablecer la contraseña por una nueva.

¿Como configurar de Conexiones encriptadas SSL en Windows?

  1. Bajar e instalar  OpenSSL versión light
  2. Crear certificados por línea de comandos (inicio, ejecutar, cmd):
    cd "c:\Archivos de programa\PostgreSQL\8.1\data"
    openssl req -new -text -out server.req
    openssl rsa -in privkey.pem -out server.key
    openssl req -x509 -in server.req -text -key server.key -out server.crt    
    
    • Nota 1: cuando pregunta phass phrase, ingresar siempre el mismo texto secreto a modo de contraseña
    • Nota 2: este ejemplo es para pruebas/desarrollo (certificado auto-firmado), para producción revisar el procedimiento y establecer los permisos adecuados a los archivos (ver siguiente)
  3. Opcional: Establecer la seguridad de los certificados solo para el usuario postgres:
    1. Ir a c:\Archivos de programa\PostgreSQL\8.1\data
    2. Click izquierdo sobre server.key, Propiedades
    3. Solapa seguridad
    4. Quitar Usuarios y toda cuenta no privilegiada (administradores)
    5. Agregar usuario Postgres permiso de lectura
  4. Modificar configuración en c:\archivos de programa\postgresql\8.1\data:
    1. Archivo pg_hba.conf
      1. Agregar lineas que habiliten el SSL:
        hostssl  all    all  127.0.0.1/32    md5
        hostssl  all    all  0.0.0.0 0.0.0.0 md5
        
      • Nota: Si corresponde, cambiar all all ya que permite conectarse a todas las bases de datos con cualquier usuario, encriptado por ssl y con contraseña.
    2. Archivo postgresql.conf
      1. Verificar que esten descomentadas (sin el # al inicio) las siguientes lineas:
        listen_addresses = '*'	
        ssl = on
        
  5. Reiniciar el motor
    1. En PgAdminIII, seleccionar la conexión, ej: postgresql (localhost:5432):
      1. Herramientas, Detener Servicio
      2. Herramientas, Iniciar Servicio

¿Cómo instalar lenguaje procedural PlPython en Windows?

  • Instalar Python:
  • Ejecutar el Instalador de PostgreSQL
    • En el paso 7 (Enable Procedural Languaje o Habilitar Lenguaje procedural) (PgInstaller)
    • Debería aparecer habilitada la opción "PL/python", marcarla y seguir con la instalación.
  • Para crear el lenguaje en bases de datos ya instaladas, abrir una consola SQL y escribir:
    CREATE LANGUAGE plpythonu;
    

¿Cómo borrar o modificar la contraseña de la cuenta del servicio postgres?

El instalador genera una cuenta para el servicio de windows, si desea cambiar la contraseña (ej, para poder volver a ejecutar el instalador o actualizar la versión):

net user postgres password

Para borrar la cuenta, una vez que se eliminaron los archivos (por ej., para empezar una nueva instalación desde 0):

net user postgres /delete

Cambiar postgres por el nombre del usuario, y agregar /domain si es una cuenta de dominio

Para agregar la cuenta (por ej., en caso de reinstalar windows):

net user postgres password /add

Nota:: Reemplazar la palabra password por la contraseña de acceso real.

¿Como iniciar, detener o ejecutar comandos como el usuario postgres?

En ocasiones, puede ser necesario ingresar a una consola con el usuario Postgres de windows para ejecutar comandos, por ej. , pg_ctl para reiniciar el motor, y ver la salida de eventuales errores.

Como usuario Administrador esto no es posible, ya que nos advertirá:

No se permite ejecución del servidor PostgreSQL por un usuario con privilegios administrativos. El servidor debe ser iniciado con un usuario no privilegiado para prevenir posibles compromisos de seguridad del sistema. Vea la documentación para obtener más información acerca de cómo iniciar correctamente el servidor.

Por lo tanto, para abrir una consola como usuario no privilegiado (postgres), ejecutar el siguiente comando e ingresar la contraseña de esta cuenta (si no se recuerda de la instalación, ver pregunta anterior):

runas /user:postgres cmd

Se abrirá una consola (ejecutando el usuario Postgres), en la cual se puede ejecutar comandos como el usuario Postgres, por ej., reiniciar el motór:

cd C:\Archivos de programa\PostgreSQL\8.1\bin
pg_ctl.exe restart -D ..\data

El servicio PostgreSQL no inicia correctamente

En ocasiones de error, el servicio no arrancará, y no es posible, por ej., conectarse con con PgAdmin3 u otras aplicaciones:

El servidor no escucha El servidor no acepta conexiones: la librerí­a de conexión reporta could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "X.X.X.X" and accepting TCP/IP connections on port 5432?

O intentando iniciar el servicio:

El servicio de PostgreSQL Server 8.3 está iniciándose.... El servicio de PostgreSQL Server 8.3 no ha podido iniciar El servicio no informó de un error. Puede obtener más ayuda con el comando NET HELPMSG 3534.

En este caso, el servidor no esta respondiendo, por lo que se podría revisar:

  • Ir al Panel de Control, Herramientas Administrativas, Servicios y revisar el estado del servicio PostgreSQL. Revisar directorio de instalación (ruta de acceso) y usuario (solapa Inicio de Sesión).
  • Verificar que haya espacio en el disco
  • Verificar los permisos (click derecho sobre la carpeta C:\Archivos de Programa\PostgreSQL\8.x\data o similar, solapa Seguridad). Verificar que el usuario Postgres (o el que corresponda) tenga acceso de modificación. En el caso de reinstalación de Windows, recrear la cuenta Postgres y configurar el servicio (ver puntos anteriores)
  • Verificar sucesos (Panel de Control, Herramientas Administrativas, Visor de sucesos, Aplicación). Ver los que tengan como origen a PostgreSQL. Verificar los logs (ver directorio pg_log dentro de data).
  • Iniciar PostgreSQL por línea de comandos y ver la salida (ver pregunta anterior)

¿Como crear bases de datos con codificación Latin1?

A partir de 8.3, no es posible crear bases de datos en codificación LATIN1 (ISO-8859-1) de manera simple:

ERROR: encoding LATIN1 does not match server's locale Spanish_Argentina.1252 DETALLE: The server's LC_CTYPE setting requires encoding WIN1252.

Como solucion pueden ser creadas en WIN1252 (que a fines prácticos funciona como LATIN1 en Windows):

CREATE DATABASE prueba
  WITH ENCODING='WIN1252';

Otro posible error es:

ERROR: la nueva codificación (WIN1252) es incopatible con la codificación de la base de datos patrón (UTF8) HINT; Use la misma codificación que la base de datos patrón, o bien use template0 como patrón.

En este caso, al crear la base de datos, seleccionar como plantilla template0

Nota: LATIN1/WIN1252 Funciona mejor con el driver ODBC, tanto para los nombres de tablas/campos como para los datos.

¿Como solucionar el error de inicio de sesión secundaria?

Si al iniciar PostgreSQL ocurre el error:

"The Secondary logon service is not running" (el servicio de inicio de sesión secundaria no se está ejecutando)

Se debe habilitar el servicio "Servicio de sesión secundaria" (fijase que esté en modo Manual o Automático) llendo a Inicio, Configuración, Panel de Control, Herramientas Administrativas, Servicios.

¿Como solucionar problema de instalación de servicio netlogon?

Si al instalar se produce un error al intentar iniciar el servicio, verifique el visor de sucesos si encuentra:

El servicio PostgreSQL depende del servicio Inicio de sesión en red, el cual no pudo iniciarse debido al siguiente error: %%0 (Id suceso 7001)

o

Este equipo ha sido configurado como miembro de un grupo de trabajo y no como miembro de un dominio. No es necesario ejecutar el servicio de inicio de sesión de red en esta configuración (Netlogon 3095)

Para solucionarlo ver  este artículo

¿Como solucionar problema de inicio por datos invalidos en archivo PID?

Ocacionalmente, luego de un reinicio "sucio" (sin detener correctamente los servicios), puede suceder que el archivo postmaster.pid quede con datos inválidos, por lo que el servidor no levantará (ya que justamente lleva el control del proceso del servidor). Por Ejemplo:

C:\Program Files\PostgreSQL\8.3\bin>pg_ctl.exe -D ..\data start
pg_ctl: invalid data in PID file "../data/postmaster.pid"

Para solucionar el problema, se debe borrar el archivo postmaster.pid e iniciar nuevamente el servidor:

C:\Program Files\PostgreSQL\8.3\data>del postmaster.pid

General

¿Como cambiar el lenguage de pgAdmin III a español?

Si el pgAdmin III aparece en inglés, se puede cambiar el lenguaje a Español (Castellano) haciendo:

  • Ir al menú File (Archivo), Options (Opciones)
  • En la solapa General, cambiar User Language (lenguaje del usuario) a (es_ES) Spanish para español
  • Cerrar pgAdmin III y volver a ingresar para tener los mensajes del programa en español

Para mayor información ver Tutorial de pgAdmin III

¿Como obtener ayuda en Español sobre SQL en pgAdmin III?

En el ArPUG estamos realizando una tarea de traducción del manual oficial al español (castellano), que puede ser usada como ayuda en linea (online) en PgAdmin3 (al presionar F1 dentro de la herramienta de ejecución de consultas - SQL queries).

Para ello, cambiar la configuración de la ayuda en dicho programa ingresando a Archivo, Opciones, y modificando PG Help Path a http://www.arpug.com.ar/trac/wiki/

La traducción de la documentación está disponible instantaneamente, el sitio tiene funciones de búsqueda, indexación, etc.. y se puede consultar el listado de comandos, sentencias y clausulas traducidas al español en la sección Referencia SQL

Para mayor información sobre este tema dirigirse a Traducción y Tutorial de pgAdmin III

¿Como cambiar la contraseña de postgres?

Una vez ingresado a PgAdmin3 o psql (ver respuesta Como ingresar sin contraseña o Como ingresar como usuario postgres si olvidó la clave), ingresar el siguiente comando para cambiar la contraseña:

ALTER USER postgres WITH ENCRYPTED PASSWORD 'nuevaclave';

¿Como migrar entre versiones?

Si esta en la misma versión principal (por ej. de 8.4.0 a 8.4.1) no hace falta realizar ningún proceso de migración.

Si cambia la versión principal (por ej. de 8.3 a 8.4), es necesario realizar una copia de seguridad o respaldo (backup) del servidor viejo y luego restaurarla (restore) en el nuevo servidor. Esto tiene que hacerse con pg_dump, ya sea por linea de comando o usando PgAdminIII (se recomienda usar la última versión para aprovechar cualquier mejora que estos programas pudieran tener). Los respaldos a nivel de sistema de archivo no funcionan porque cambia la organización interna (o sea, copiar el directorio data o cambiar solamente los binarios no sirve).

Ambos versiones del servidor pueden convivir en el mismo equipo, en puertos diferentes, y esto puede aprovecharse para hacer la migración con alguna herramienta de replicación o simplemente ejecutando pg_dumpall y psql:

pg_dumpall -p 5432 | psql -d postgres -p 6543

asumiendo la versión vieja reside en el puerto 5432 y la nueva en el 6543. Una vez finalizada la restauración, puede darse de baja el servidor viejo, reasignando el puerto original al servidor nuevo.

¿Como cambio el nombre de una base de datos?

Para cambiar el nombre de una base de datos, conectarse a la base de datos postgres mediante psql (o PgAdminIII) y ejecutar la consulta:

ALTER DATABASE nombre_viejo RENAME TO nombre_nuevo;

Nota: La base de datos a renombrar no debe tener ningún cliente conectado.

¿Como conectarse a PostgreSQL desde ...?

Ver Interfases de Conexión y Lenguajes de Programación para información sobre como conectarse usando una interfaz (ODBC, JDBC, Access, etc.) o lenguaje de programación específico (Visual Basic, Python, PHP, .NET, Java, etc.) .

¿Como cambiar el encoding (codificación) de una conexión (UTF8 <-> LATIN1)?

Si no es posible crear la base de datos en la codificación deseada, se puede crearla en una codificación que soporte el servidor (UTF8, WIN1252, etc.) y luego que el cliente seleccione la codificación elegida:

SET client_ecoding TO 'LATIN1';

Dicho ajuste puede puede especificarse en la cadena da conexión (ver ODBC) o bien en los ajustes de usuario:

ALTER USER nombre_usuario SET client_encoding TO 'latin1';

¿Como habilitar el acceso remoto a PostgreSQL?

Generalmente, por defecto, postgres viene configurado para permitir el ingreso de usuarios locales (desde la misma máquina). Para habilitar que puedan ingreasar desde otros equipos, se debe ir al directorio de configuración y:

  1. Modificar configuración de acceso en pg_hba.conf, agregando la linea que habilite el acceso desde equipos remotos (con contraseña):
    host  all    all  0.0.0.0/0 md5
    
  2. Modificar configuración general en postgresql.conf, verificando que se esté escuchando en todas las direcciones:
    listen_addresses = '*'	
    
  3. Reiniciar el motor (/etc/init.d/postgresql restart o Reiniciar Servicio en Windows)

Para otros métodos de acceso e información más detallada, ver  Autenticación del Cliente

¿Como iniciar en modo mono-usuario (para recuperación)?

Para recuperación de desastres (fallas de hardware, eliminación/formateo de archivos, daños de datos, etc.), primero se podría probar si levanta en modo "mono-usuario" (single-user) con el programa  postgres (siempre que se tenga la carpeta data y demás archivos necesarios):

postgres --single -D ruta_a_la_carpeta_data mi_base_de_datos

Opciones útiles para recuperación:

  • --singe: habilita el modo usuario único para recuperación/depuración
  • -D: especifica la ruta a la carpeta data
  • -P: ignorar los índices del sistema (si están fallando)
  • -O: permite modificar la estructura de las tablas del sistema
  • -r nombre_de_archivo: especifica el archivo donde se guarda la salida (útil para volcados/dumps manuales)
  • -j: habilita el uso de instrucciones de múltiples líneas

Eso debería iniciar una terminal interactiva básica para consultar la base de datos (no es un interprete de órdenes avanzado, por ej. no tiene historial).

Si no levanta o hay errores posteriores, habría que ver que esta fallando, y como último recurso (solo si el servidor no inicia por problemas de corrupción de datos), se puede usar el programa  pg_resetxlog para limpiar la WAL y opcionalmente reestablecer la información de control almacenada en el archivo pg_control.

Luego de ejecutar este comando, debería ser posible reiniciar el servidor, pero tener en cuenta que la base de datos puede estar en un estado inconsistente debido a transacciones parcialmente comprometidas. Inmediatamente debería volcar los datos, ejecutar initdb y recargarlos. Luego de restaurar los datos, verificar por inconsistencias y repararlas si es necesario.

Para levantar una carpeta de datos recuperada o restaurada, se puede usar  pg_ctl (ver preguntas anteriores)

Consejos para analizar el rendimiento de consultas y/o optimizar PostgreSQL

Algunos consejos simples para tunear PostgreSQL:

  • Utilizar la última versión del motor para aprovechar todas las mejoras disponibles
  • Subir la memoria compartida (ver arriba)
  • Analizar las consultas con EXPLAIN (ver Uso de EXPLAIN)
  • Mantener las estadísticas actualizadas (autovacuum y/o ANALYZE) (ver Estadísticas)
  • Crear índices en los casos que sean necesarios (ver anteriores)
  • Reclamar el espacio de filas muertas (autovacuum y/o VACUUM)
  • Ajustar FILL FACTOR para que las filas actualizadas entren en la mísma página (ver Parámetros de Almacenamiento)
  • Utilizar CLUSTER para ordenar físicamente las filas de la misma manera que el índice
  • Reindexar con REINDEX si sospecha que un índice no esta funcionando optimamente
  • Compactar físicamente la tabla con VACUUM FULL (no recomendado para uso rutinario)

YMMV