FAQ/es

From PostgreSQL wiki
< FAQ
Jump to navigationJump to search

PostgreSQL en Castellano

Acerca de este documento

Esta es una traducción de Preguntas Frecuentes en inglés.

Los documentos con preguntas específicas a cada plataforma se encuentran en el Sitio Oficial; las traducciones existentes se listan a continuación:

¿Dónde puedo hacer preguntas sobre PostgreSQL en castellano?

La gran mayoría de listas de correo de PostgreSQL están en inglés. Si quiere hacer una pregunta técnica en castellano, utilice la lista pgsql-es-ayuda. Si desea charlar sobre temas de promoción de PostgreSQL, utilice la lista pgsql-es-fomento.

¿Dónde puedo obtener un manual de PostgreSQL en castellano?

No contamos con ninguna traducción completa de la documentación oficial en castellano. Sin embargo, hay algo de documentación en castellano en este mismo wiki.

¿Cómo puedo participar en la traducción al castellano?

Por el momento no tenemos ninguna iniciativa organizada para la traducción de la documentación oficial. Si desea puede traducir páginas de la Wiki (almacenando la traducción en una nueva página de la misma Wiki, por supuesto). También puede interesarle participar en la traducción de los programas de PostgreSQL.

¿Cómo puedo convertir una cantidad numérica a palabras?

Puedes usar una función como esta.

Preguntas Generales

¿Qué es PostgreSQL? ¿Cuál es su pronunciación? ¿Qué es Postgres?

PostgreSQL es pronunciado Post-Gres-Q-L. (Para aquellos curiosos acerca de como se dice "PostgreSQL", está disponible un archivo de audio.)

PostgreSQL es un sistema de bases de datos objeto-relacional con características de los mejores sistemas de bases de datos comerciales. PostgreSQL es libre y su código fuente completo esta disponible.

El desarrollo de PostgreSQL es realizado por un equipo de desarrolladores en su mayoría voluntarios extendido por todo el mundo, que se comunican via Internet. Se trata de un proyecto comunitario y no está controlado por compañía alguna. Para participar, vea las Preguntas Frecuentes de Desarrolladores

"Postgres" es ampliamente utilizado como seudónimo de PostgreSQL. Era el nombre original del proyecto en Berkeley y es fuertemente preferido sobre otros seudónimos. Si encuentra "PostgreSQL" difícil de pronunciar, llámelo "Postgres".

¿Quién controla PostgreSQL?

Si usted está buscando alguien que controle PostgreSQL, un comité central, o una compañía que esté a cargo, no pierda su tiempo — no existe. Tenemos un comité de dirección (core committee) y committers en el árbol CVS, pero estos grupos cumplen propósitos más bien administrativos que de control. El proyecto está dirigido por la comunidad de desarrolladores y usuarios, en la que cualquiera puede participar. Todo lo que necesita hacer es suscribirse a las listas de correo y participar en los debates. Vea Preguntas frecuentes para desarrolladores para obtener más información sobre cómo involucrarse en el desarrollo de PostgreSQL.

¿Cuál es el copyright de PostgreSQL?

PostgreSQL es distribuido bajo la licencia BSD clásica. Básicamente, esto permite a los usuarios hacer lo que quieran con el código, incluyendo la reventa de binarios modificados sin necesariamente entregar el código fuente modificado. La única restricción es que no somos legalmente responsables de los problemas que usted tenga con el software. También existe el requisito de que este copyright aparezca en todas las copias del software.

Observe que no entregamos una traducción del texto de la licencia. Si tiene dudas acerca del texto de la misma, consulte con un abogado.

El texto original actualizado de la licencia (en inglés) se puede ver en http://anoncvs.postgresql.org/cvsweb.cgi/~checkout~/pgsql/COPYRIGHT Una versión (obtenida en marzo de 2009) se copia a continuación.

PostgreSQL Database Management System
(formerly known as Postgres, then as Postgres95)

Portions Copyright (c) 1996-2009, PostgreSQL Global Development Group
Portions Copyright (c) 1994, The Regents of the University of California

Permission to use, copy, modify, and distribute this software and its
documentation for any purpose, without fee, and without a written agreement
is hereby granted, provided that the above copyright notice and this
paragraph and the following two paragraphs appear in all copies.

IN NO EVENT SHALL THE UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING
LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS
DOCUMENTATION, EVEN IF THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
ON AN "AS IS" BASIS, AND THE UNIVERSITY OF CALIFORNIA HAS NO OBLIGATIONS TO
PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.

¿Qué plataformas soporta PostgreSQL?

En general, cualquier plataforma moderna tipo Unix debe ser capaz de ejecutar PostgreSQL. Las plataformas que han pasado las pruebas recientemente pueden encontrarse en la Granja de pruebas. La documentación oficial contiene más información sobre las plataformas soportadas, en http://www.postgresql.org/docs/current/static/supported-platforms.html

PostgreSQL también corre de forma nativa en sistemas operativos basados en Microsoft Windows NT como Win2000 SP4, WinXP y Win2003. Está disponible un instalador precompilado en http://www.postgresql.org/download/windows. Las versiones de Windows basadas en MSDOS (Win95, Win98, WinME) pueden correr PostgreSQL usando Cygwin.

¿Dónde puedo obtener PostgreSQL?

Existen distribuciones binarias para varios sistemas operativos y plataformas; visite nuestra área de descargas.

El código fuente puede descargarse a través de la web en http://www.postgresql.org/ftp/ o por FTP en ftp://ftp.postgresql.org/pub/.

¿Cuál es la versión más reciente?

La última versión de PostgreSQL puede verse en la página frontal de nuestro sitio web.

Típicamente tenemos una nueva versión mayor una vez al año, y versiones menores cada pocos meses. Las actualizaciones de versiones menores típicamente aparecen simultáneamente para todas las ramas de versiones mayores soportadas. Para saber más sobre nuestra política de versionamiento (versiones mayores vs. versiones menores), visite http://www.postgresql.org/support/versioning (en inglés).

¿Dónde puedo obtener soporte?

La comunidad PostgreSQL provee asistencia a muchos de sus usuarios vía email. El principal sitio web para suscribirse a las listas es: http://www.postgresql.org/community/lists/. La lista general o bugs es un buen lugar para comenzar.

El mayor canal IRC es #postgresql en Libera (irc.libera.chat). Para conectarse usted puede usar el programa Unix irc -c '#postgresql' "$USER" irc.libera.chat o usando otros clientes IRC. Y un canal en español también existe en la misma red, (#postgresql-es), y uno en frances,(#postgresqlfr), y uno en Portugués, (#postgresql-br). También hay un canal de PostgreSQL en EFnet.

Una lista de compañías de soporte comercial esta disponible en: http://www.postgresql.org/support/professional_support.

¿Cómo puedo enviar un informe de error?

Visite el formulario de errores de PostgreSQL. También verifique nuestro sitio FTP para ver si hay una versión más reciente de PostgreSQL.

La presentacion de errores utilizando el formulario de errores o postandolo en cualquier lista de correo de PostgreSQL, tipicamente genera una de las siguientes respuestas:

  • No es un error, y por qué
  • Se trata de un error conocido y ya está en la lista de cosas por hacer (TODO list).
  • El error ha sido corregido en la versión actual
  • El error ha sido reparado, pero no es todavía empaquetado en una liberacion oficial
  • Una petición se hace para obtener información más detallada:
    • Sistema operativo
    • Versión de PostgreSQL
    • Caso de test reproducible
    • Información de depuración
    • Salida del depurador Backtrace
  • El error es nuevo. Lo siguiente puede ocurrir:
    • Un parche es creado y se incluirá en la próxima mayor o menor liberación.
    • El error no puede ser corregido de inmediato y se añade a TODO list.

¿Cómo puedo encontrar información acerca de errores conocidos o de características desaparecidas?

PostgreSQL soporta un subconjunto extendido de SQL:2003. Vea nuestra TODO list para errores conocidos, características desaparecidas, y planes para el futuro.

Una solicitud de caracteristica suele resultar en una de las siguientes respuestas:

  * La característica ya está en TODO list
  * La característica  no es la deseada debido a que:
    + Se duplica la funcionalidad existente ya que sigue el estándar SQL.
    + La característica aumentaría la complejidad del código, pero añadiria poco
      beneficio.
    + La característica sería poco fiable o insegura
  * La nueva característica se añade a TODO list

PostgreSQL no utiliza un sistema de seguimiento de errores, porque consideramos que es más eficiente responder directamente por la dirección de correo electrónico y mantener Todo list actualizado. En la práctica, los errores no duran mucho tiempo en el software,y los errores que afectan a un gran número de usuarios se corrigen rápidamente. El único lugar para encontrar todos los cambios, mejoras, y correciones en una liberación de PostgreSQL es leer los mensajes de registro del CVS. Incluso las notas de liberación no listan cada cambio realizado al software.

¿Qué documentación está disponible?

PostgreSQL incluye extensa documentación, incluyendo un enorme manual, paginas man, y algunos test de ejemplos. Vea el directorio /doc.También puede navegar por los manuales en línea en http://www.postgresql.org/docs.

Hay dos libros de PostgreSQL disponibles en línea en http://www.postgresql.org/docs/books/awbook.html y http://www.commandprompt.com/ppbook/. Hay un numero de libros de PostgreSQL disponibles para su compra. Uno de los más populares es por Korry Douglas.Una lista de reseñas de libros se puede encontrar en http://www.postgresql.org/docs/books/. También hay una colección de artículos técnicos de PostgreSQL en http://wiki.postgresql.org/wiki/Community_Generated_Articles%2C_Guides%2C_and_Documentation.

El programa cliente de línea de comandos psql tiene algunos comandos(\d) para mostrar información acerca de tipos,operadores,funciones,agregados,etc. Use \? para mostrar los comandos disponibles.

Nuestro sitio web contiene aún más documentación.

¿Cómo puedo aprender SQL?

Primero, considerar los libros específicos de PostgreSQL mencionados anteriormente. Muchos de nuestros usuarios también gustan de The Practical SQL Handbook, Bowman, Judith S., editado por.,Addison-Wesley.Otros,gustan de The Complete Reference SQL, Groff editado por., McGraw-Hill.

También hay muchos tutoriales agradables disponibles en línea:

   * http://www.intermedia.net/support/sql/sqltut.shtm
   * http://sqlcourse.com
   * http://www.w3schools.com/sql/default.asp
   * http://mysite.verizon.net/Graeme_Birchall/id1.html
   * http://sqlzoo.net

¿Cómo puedo enviar un parche o unirme al equipo de desarrollo?

Vea las Preguntas Frecuentes de Desarrolladores

¿Cómo comparar a PostgreSQL con otros DBMS?

Hay varias maneras de medir el software: características, desempeño, fiabilidad, soporte, y precio.

Características

PostgreSQL tiene la mayoría de las características presentes en grandes DBMS, como transacciones, subselects, disparadores, vistas, claves foráneas integridad referencial,y un sofisticado bloqueo. Tenemos algunas características que ellos no tienen, como tipos definidos por el usuario, herencia, normas, y control de concurrencia multi-versión para reducir la contención de bloqueo.

Rendimiento

El rendimiento de PostgreSQL es comparable con otras bases de datos comerciales y de código abierto. Es más rápida para algunas cosas, lenta para otras.Nuestro rendimiento es usualmente +/-10% comparado con otras bases de datos.

Fiabilidad

Nos damos cuenta que un DBMS debe ser fiable, o es inútil. Nosotros nos esforzaremos por liberar un realease bien probado, el código estable que tenga un mínimo de errores. Cada release tiene al menos un mes de pruebas beta,y nuestra historia de liberaciones demuestra que podemos ofrecer un release estable,sólido que está listo para su uso en producción. Creemos que nos comparamos favorablemente con otros software de bases de datos en está área.

Soporte

Nuestras listas de correo proporcionan contacto con un grupo numeroso de desarrolladores y usuarios para ayudar a resolver los problemas encontrados. Si bien no podemos garantizar una corrección, los DBMS comerciales tampoco suministran una correción siempre. Acceso directo a los desarrolladores, la comunidad de usuarios, manuales, y el código fuente suelen a menudo hacer que el soporte de PostgreSQL sea superior al de otros DBMS. Hay soporte comercial disponible por incidentes para aquellos que lo necesiten. (Ver FAQ en la seccion 2.7)

Precio

Somos libres para todos los usos, tanto comerciales como no comerciales. Puede añadir nuestro código a su producto sin limitaciones, excepto las señaladas en nuestra licencia estilo BSD como se ha indicado anteriormente.

¿PostgreSQL puede ser embebido?

PostgreSQL está diseñado con una arquitectura cliente/servidor, lo que requiere procesos separados para cada cliente y el servidor, y varios procesos auxiliares. Muchas arquitecturas embebidas pueden apoyar este tipo de requisitos. Sin embargo, si su arquitectura embebida requiere del servidor de base de datos para ejecutar dentro del proceso de solicitud, no se puede utilizar Postgres. Debe seleccionar una solución ligera de base de datos.

¿Qué debo hacer para darme de baja de las listas de correo de PostgreSQL?

La página de Majordomo de PostgreSQL permite la suscripción o cancelación de la suscripción de cualquiera de las listas de correo electrónico PostgreSQL.(Es posible que tenga que tener su contraseña de Majordomo enviada a su correo electrónico para acceder y registrarse)Todas las listas de correo electrónico de PostgreSQL están configuradas para que el grupo dé respuesta y replique a la lista de correo electrónico y al autor original del correo electrónico.

Esto se hace para que los usuarios reciban el mensaje de correo electrónico lo más rápido posible y den sus respuestas. Si usted prefiere no recibir un duplicado del correo electrónico de la lista, en caso de que usted ya haya recibido un mensaje de correo electrónico directamente, compruebe eliminatecc de la pagina de configuraciones de Majordomo.

También usted mismo puede prevenir recibir copias de los mensajes de correo electrónico por usted posteados en la lista,desmarcando selfcopy.


Preguntas Usuario Cliente

¿Qué interfaces están disponibles para PostgreSQL?

La instalación de PostgreSQL incluye sólo C y la interfaces embebidas de C. Todas las demás interfaces son proyectos independientes que se descargan separadamente, siendo independientes les permite tener su propia calendario de liberaciones y equipos de desarrollo.

Algunos lenguajes de programación como PHP incluyen una interfaz para PostgreSQL. Interfaces de lenguajes como Perl, TCL, Python, y muchos otros están disponibles en http://pgfoundry.org.

¿Qué herramientas están disponibles para usar PostgreSQL con paginas Web?

Una buena introducción a la base de datos-backed por las páginas Web se puede ver en: http://www.webreview.com

Para integración Web, PHP (http://www.php.net) es una excelente interface.

Para casos complejos, muchos usan Perl y DBD::Pg with CGI.pm y/o mod_perl.

¿PostgreSQL tiene una interfaz gráfica de usuario?

Hay un gran número de Herramientas GUI que están disponibles para PostgreSQL tanto comerciales como desde desarrollos de código abierto. Una lista detallada se puede encontrar en la guia de herramientas GUI de la comunidad PostgreSQL.


Preguntas Administrativas

¿Cómo puedo instalar PostgreSQL en un lugar diferente a /usr/local/pgsql?

Especifique la opción --prefix cuando se ejecuta configure.

¿Cómo puedo controlar las conexiones desde otros hosts?

Por defecto, PostgreSQL sólo permite conexiones desde la máquina local usando sockets de dominio Unix o conexiones TCP/IP. Otras máquinas no podrán conectarse a menos que usted modifique listen_addresses en el archivo postgresql.conf, active la autenticación basada en el host modificando el archivo $ PGDATA/pg_hba.conf, y reinicie el servidor de base de datos.

¿Cómo puedo ajustar el motor de base de datos para un mejor rendimiento?

Hay tres áreas principales para una potencial mejora del rendimiento:

Cambios de consultas

Esto implica modificar las consultas para obtener un mejor rendimiento:

  • Creación de indices, incluidos los de expresiones y de indices parciales.
  • Uso de COPY en lugar de múltiples INSERTs .
  • Agrupación de múltiples declaraciones dentro de una sola transacción para reducir el sobrecosto de commit.
  • Uso de CLUSTER cuando se hace la recuperación de muchas filas de un índice.
  • Uso de LIMIT para el retorno de un subconjunto de consultas de salida.
  • Uso de Sentecias Preparadas (PREPARED STATEMENTS).
  • Uso de ANALYZE para mantener la precisión en las estadísticas del optimizador.
  • Uso regular de VACUUM o pg_autovacuum.
  • Borrado de índices durante cambios grandes de datos.

Configuración del Servidor

Una serie de ajustes en postgresql.conf afectara su rendimiento. Para más detalles, véase la Guía de administración / Ambiente del Servidor en tiempo de ejecución/configuración en tiempo de ejecución para un lista completa, véase los comentarios.

Seleccion de Hardware

El efecto de hardware en el rendimiento se detalla en:

¿Qué características de depuración están disponibles?

Hay muchas variables log_ * de configuración del servidor en http://www.postgresql.org/docs/current/interactive/runtime-config-logging.html que permiten la impresión de las consultas y el tratamiento de las estadísticas que puede ser muy útil para la depuración y la medición del desempeño.

¿Por qué obtengo "Lo siento, demasiados clientes" cuando intento conectarme?

Ha alcanzado el límite predeterminado de 100 sesiones de base de datos. Usted necesita aumentar el límite del servidor sobre el número de procesos concurrentes backend, puede empezar por cambiar el valor en max_connections en postgresql.conf y reiniciar el servidor.

¿Cuál es el proceso de actualización de PostgreSQL?

Véase http://www.postgresql.org/support/versioning para un debate general acerca de la actualización, y http://www.postgresql.org/docs/current/static/install-upgrading.html para instrucciones específicas.

¿Postgresql manejará los recientes cambios de horario oficial en varios países?

Los releases de PostgreSQL desde la versión 8.0 y superiores dependen de la ampliamente usada base de datos tzdata (también llamada la base de datos zoneinfo o el Olson timezone database) para información de horarios oficiales. Para tratar con los cambios legales en el horario oficial que lo afecten, instale el nuevo conjunto de archivos tzdata y reinicie el servidor.

Todos los releases de actualización incluyen la última versión disponible de los archivos de tzdata, así, mantener actualizada con los releases menores de su versión mayor usualmente es suficiente.

En plataformas que reciben actualizaciones regulares que incluyen nuevos archivos tzdata, puede ser más conveniente depender de la copia del sistema de los archivos de los archivos tzdata. Esto es posible como una opción en tiempo de compilación. La mayoría de las distribuciones de Linux escogen este enfoque para las versiones pre-compiladas de PostgreSQL.

Los releases de PostgreSQL antes de 8.0 dependen siempre de la información de zona horaria del sistema operativo.

¿Qué hardware de computador debo utilizar?

Debido a que la mayoría de hardware es compatible con PC, la gente tiende a creer que todo el hardware de PC es de igual calidad. No lo es. RAM ECC , SCSI, y las placas base de calidad son más fiables y tienen un mejor rendimiento que el hardware menos costoso. PostgreSQL se puede ejecutar en casi cualquier hardware, pero si la fiabilidad y el rendimiento son importantes, es prudente la investigación de su opciones de hardware a fondo. Un controlador de disco con caché soportada por baterias también es útil. Nuestras listas de correo electrónico pueden ser utilizadas para discutir opciones de hardware y de compensaciones.

Cuestiones Operativas

¿Cómo puedo seleccionar sólo las primeras filas de una consulta? ¿y al azar en una fila?

Para recuperar sólo unas pocas filas, si conoce el número de líneas necesarias en el momento de SELECT usar LIMIT. Si un índice coincide con el ORDER BY es posible que la consulta entera no tenga que ser ejecutada. Si no se sabe el número de filas en el SELECT time, utilice un cursor y FETCH.

Para seleccionar una fila aleatoria, utilice

  SELECT col
  FROM tab
  ORDER BY random()
  LIMIT 1;

¿Cómo puedo encontrar que tablas, índices, bases de datos, y usuarios están definidos?

Utilice el comando \dt para ver los tablas en psql. Para obtener una lista completa de los comandos internos de psql puede usar \?. También puede leer el código fuente de psql en el archivo pgsql /src/bin/psql/describe.c, que contiene comandos SQL que generan la salida de la barra psql de comandos. También puede iniciar psql con la opción -E, lo que imprimirá las consultas que utiliza para ejecutar los comandos que usted da. PostgreSQL también proporciona una interfaz INFORMATION SCHEMA compatible con SQL que puede consultar para obtener información sobre la base de datos.

También existen las tablas del sistema que comienza con pg_ que también describen esto.

Utilice psql-l para listar todas las bases de datos.

Pruebe también el archivo pgsql/src/tutorial/syscat.source. Ilustra muchos de los SELECT necesarios para obtener información desde tablas del sistema de bases de datos.

¿Cómo cambiar el tipo de datos de una columna?

Cambiar el tipo de datos de una columna que se puede hacer fácilmente en 8.0 y despues con ALTER TABLE ALTER COLUMN TYPE.

En versiones anteriores, siga estos pasos:

   BEGIN;
   ALTER TABLE tab ADD COLUMN new_col new_data_type;
   UPDATE tab SET new_col = CAST(old_col AS new_data_type);
   ALTER TABLE tab DROP COLUMN old_col;
   COMMIT;

puede que entonces quieran hacer VACUUM FULL ficha para recuperar el espacio en disco utilizados por las filas vencidas.

¿Cuál es el tamaño máximo de una fila, una tabla, y una base de datos?

Estos son los límites:

   ¿Tamaño máximo para una base de datos? sin limites (existen bases de datos de 32 TB)
   ¿Tamaño máximo para una tabla? 32 TB
   ¿Tamaño máximo para una fila? 400 GB
   ¿Tamaño máximo para un campo? 1 GB
   ¿Número máximo de filas en una tabla? sin limites
   ¿Número máximo de columnas en una tabla? 250-1600 dependiendo el tipo de columna
   ¿Número máximo de índices en una tabla? sin limites

Por supuesto, esto realmente no es ilimitado,pero esta limitado por el espacio de disco disponible y el espacio de memoria/swap. El rendimiento puede sufrir cuando estos valores inusualmente grandes se obtienen.

El máximo tamaño de una tabla de 32 TB no requiere el soporte de archivos de gran tamaño desde el sistema operativo. Las grandes tablas se almacenan como múltiples archivos de 1 GB, para el sistema de archivos los límites de tamaño no son importantes.

El tamaño máximo de una tabla, el tamaño de la fila, y el número máximo de columnas puede ser cuadruplicado por el aumento del tamaño de bloque por defecto a 32k. El tamaño máximo de la tabla también puede incrementarse utilizando la tabla de particionado.Una limitación es que los índices no pueden ser creados en columnas más largas que alrededor de 2.000 caracteres.Afortunadamente, esos índices son raramente necesarios. La Singularidad es la mejor garantía por una función de un índice hash MD5 el largo de la columna, y la indexación de texto completo permite la búsqueda de las palabras dentro de la columna.

¿Cuánto espacio de disco es necesario en una base de datos para almacenar los datos desde un archivo de texto típico?

Una base de datos PostgreSQL puede requerir hasta cinco veces el espacio en disco para almacenar datos de un archivo de texto.

Como ejemplo, considere un archivo de 100.000 líneas con un entero y descripción de texto en cada línea. Supongamos que la cadena de texto mide en promedio veinte bytes de longitud. El archivo plano sería de 2.8 MB. El tamaño del Archivo de base de datos PostgreSQL que contenga estos datos se puede estimar en 5.2 MB:

      24 bytes: cada fila de cabecera (aproximado)
      24 bytes: un campo int y un campo de texto
     + 4 bytes: punteros en la página de tupla
   -------------------------------------------------
       52 bytes por fila

El tamaño de página de datos en PostgreSQL es 8192 bytes (8 KB), por lo que:

     8192 bytes por pagina
    ------------------------   =  158 filas por página de base de datos (redondeado hacia abajo)
       52 bytes por fila
      100000 filas de datos
    ------------------------  =  633 páginas de base de datos (redondeado hacia arriba)
      158 filas por pagina
  633 paginas bases de datos * 8192 bytes por pagina  =  5,185,536 bytes (5.2 MB)

Los índices no requieren tanta sobrecarga, pero contienen los datos que se están indexando, por lo que pueden ser muy grandes también.

Los valores NULL se almacenan como mapas de bits, por lo que usan muy poco espacio.


¿Por qué mis consultas son lentas? ¿Por qué no usan mis índices?

Los índices no son utilizados por cada consulta. Los índices se utilizan únicamente si la tabla es más grande que un tamaño mínimo, la consulta selecciona sólo un pequeño porcentaje de las filas en la tabla. Esto es porque el acceso aleatorio al disco es causado por la exploracion de un índice que puede ser más lento que una lectura recta a través de la tabla, o de una exploración secuencial.

Para determinar si un índice debe ser utilizado, PostgreSQL debe tener estadísticas sobre la tabla. Estas estadísticas se recolectan mediante VACUUM ANALYZE, o simplemente ANALYZE. Usando las estadísticas, el optimizador sabe cuántas son las filas en la tabla, y puede determinar mejor si los índices deben utilizarse. Las estadísticas son también valiosas en la determinación de un orden óptimo y métodos de union. La recoleccion de Estadísticas debe ser realiza periódicamente como el cambio de contenido de la tabla.

Los índices no son normalmente utilizados por ORDER BY o para llevar a cabo un Joins.Una exploración secuencial seguida por un ordenamiento explícito suele ser más rápido que un exploracion de un índice de una gran tabla. Sin embargo, LIMIT combinado con ORDER BY a menudo se utiliza en un índice porque sólo una pequeña parte de la tabla es devuelta.

Si usted cree que el optimizador es incorrecto en la elección de una secuencia de exploración, utilice SET enable_seqscan TO 'off' y ejecute la consulta de nuevo para ver si una escaneo de Índice es de hecho más rápido.

Al utilizar operadores de búsqueda como LIKE o ~, los índices sólo pueden ser utilizados en determinadas circunstancias:

  • El comienzo de la cadena de búsqueda debe estar anclado en el inicio de la cadena, es decir,
    • patrones LIKE no deben empezar con %.
    • ~ (expresión regular) los patrones deben empezar con ^.
  • La cadena de búsqueda no puede comenzar con un carácter de clase, por ejemplo, [a-e].
  • Busquedas Mayúsculas y minúsculas, del tipo como ILIKE y ~ * no utilizan índices. En cambio, usan expresiones de los índices, que se describen en la sección 4.8.
  • La localización por defecto en C debe utilizarse durante initdb porque no es posible conocer el próximo mayor carácter en una configuración regional (locale) que no es C. Puede crear un índice especial de text_pattern_ops para estos casos, esto trabaja sólo para indexación LIKE. También es posible utilizar plenamente la indexación de texto para búsquedas de palabras.

¿Qué debo hacer para ver cómo el optimizador de consultas está evaluando mis consultas?

Esto se hace con la orden EXPLAIN; vea Using EXPLAIN (en inglés)

¿Qué debo hacer para realizar búsquedas de expresiones regulares y búsquedas de expresiones regulares en mayúsculas y minúsculas?, ¿Cómo se utiliza un índice de búsquedas de mayúsculas y minúsculas?

El operador ~ hace comparaciones de expresiones regulares, y el operador ~* hace comparaciones de expresiones regulares insensibles a las mayúsculas. Es similar a utilizar LIKE o ILIKE.

Para hacer búsquedas de igualdad que ignoren mayúsculas/minúsculas, se puede expresar de la siguiente forma:

  SELECT *
  FROM tab
  WHERE lower(col) = 'abc';

Sin embargo, esta expresión no va a utilizar un índice estándar. Sin embargo, si crea un índice de expresión, se utilizará:

  CREATE INDEX tabindex ON tab (lower(col));

Si el índice anterior se crea como UNIQUE, aunque la columna puede almacenar caracteres en mayúsculas y minúsculas, no puede tener valores que sólo se diferencian sólo en mayúsculas/minúsculas. Para hacer que una columna en particular se almacena siempre en mayúsculas o minúsculas, use un CHECK o una CONSTRAINT o TRIGGER.

En una consulta, ¿Cómo puedo detectar si un campo es NULL? ¿Cómo puedo concatenar valores NULL? ¿Cómo puedo ordenar sobre si un campo que es NULL o no?

Pruebe la columna si es NULL y no es NULL, como esto:

  SELECT *
  FROM tab
  WHERE col IS NULL;

Para concatenar con posibles NULLs, use COALESCE(), como esto:

  SELECT COALESCE(col1, ) || COALESCE(col2, )
  FROM tab

Para ordenar por estado NULL, use IS NULL y modificadores IS NOT NULL en su cláusula ORDER BY. Cosas que son verdaderas pueden ser ordenadas como cosas que son falsas, por lo que lo siguiente será poner las entradas NULL en la lista superior resultante:

  SELECT *
  FROM tab
  ORDER BY (col IS NOT NULL)

¿Cuál es la diferencia entre los diversos tipos de caracteres?

  Tipo    Nombre Interno                    Notas
  VARCHAR(n) varchar       especifica el tamaño de longitud máxima, no rellena
  CHAR(n)    bpchar        adiciona espacios en blanco hasta la longitud especifica
  TEXT       text          no específica límite máximo en la longitud
  BYTEA      bytea         arreglo de byte de longitud variable (incluye null-byte)
  "char"     char          un carácter


Verá el nombre interno cuando examine el sistema de catálogos y algunos mensajes de error.

Los primeros cuatro tipos de arriba son tipos "varlena" (p.ej., los cuatro primeros bytes en el disco son la longitud, seguido por los datos). Por lo tanto, el espacio real utilizado es ligeramente mayor que el tamaño declarado. Sin embargo, los valores largos también están sujetos a la compresión, por lo que el espacio en el disco podría también ser menos de lo esperado.

VARCHAR(n) es mejor cuando el almacenamiento de cadenas de longitud variable y sus límites cuan larga una cadena puede ser.

TEXT es para cadenas de longitud ilimitada, con un máximo de un GigaByte.

CHAR(n) es para almacenar las cadenas que son todas de la misma longitud. CHAR (n) rellenos con espacios en blanco a la longitud especificada, mientras VARCHAR (n), sólo almacena los caracteres suministrados.

BYTEA es para almacenar datos binarios, en particular, que incluyen valores bytes NULL.

Todos los tipos descritos aquí tienen las mismas características de funcionamiento.

¿Cómo puedo crear un campo serial/auto-creciente?

PostgreSQL tiene un tipo de datos llamado SERIAL, el cual automáticamente crea una secuencia.

Por ejemplo, esto:

 CREATE TABLE person (
 id   SERIAL,
 name TEXT
 );

automáticamente se traduce en esto:

 CREATE SEQUENCE person_id_seq;
 CREATE TABLE person (
 id   INT4 NOT NULL DEFAULT nextval('person_id_seq'),
 name TEXT
 );

Automáticamente crea una secuencia llamada <table>_<serialcolumn>_seq, donde table y serialcolumn son los nombres de la tabla y la columna SERIAL, respectivamente. Vea la pagina de manual create_sequence para más información acerca de las secuencias.

¿Cómo puedo obtener el valor de insertar un SERIAL?

La forma más sencilla es recuperar el valor asignado de SERIAL con RETURNING. Utilizando el ejemplo en la tabla 4.11.1, que se vería así:

 INSERT INTO persona (nombre) VALUES ( 'Blaise Pascal') RETURNING  id;

También puede llamar nextval () y utilizar ese valor en el INSERT, o llamar al currval () después de el INSERT.

Currval() No puede conducir en una condición de carrera con otros usuarios?

currval() devuelve el valor actual asignado por su período de sesiones, no por todos los períodos de sesiones.

¿Por qué no son mis números de secuencia reutilizados en una transacción abortada? ¿Por qué existen lagunas en la numeración de mi columna secuencia/SERIAL ?

Para mejorar la concurrencia, en la secuencia de valores se dan a correr transacciones, según sea necesario y que no están bloqueados hasta que la transacción se complete. Esto provoca diferencias en la numeración de las operaciones abortadas.

¿Qué es un OID? Qué es un CTID?

Si una tabla se crea con WITH OIDs, cada fila tiene un único OID. Los OIDs se asignan automáticamente único de 4 bytes que son únicos(no es claro) en toda la instalación. Sin embargo, esta sobre carga de 4 mil millones, y, a continuación, comienza la duplicación de OIDs. PostgreSQL usa OIDs para vincular y juntar su sistema interno de tablas.

Excepcionalmente la numeración de filas en las tablas de usuario, es mejor utilizar SERIAL en lugar de OIDs porque las secuencias SERIAL son únicas sólo dentro de un única tabla. Por tanto, con menos probabilidad de overflow. SERIAL8 esta disponible para el almacenamiento de una secuencia de valores de ocho bytes.

Los CTIDs se utilizan para identificar filas físicas específicas con bloqueo y valores offset. Los CTIDs cambian después de que las filas sean modificadas o se recarguen.Ellos son utilizados por las entradas de índice para apuntar a las filas físicas.

¿Por qué obtengo el error "ERROR: Memoria agotada en AllocSetAlloc()"?

Usted probablemente ha agotado la memoria virtual en su sistema, o su núcleo tiene un límite bajo para ciertos recursos. Pruebe esto antes de comenzar el servidor:

  ulimit -d 262144
  limit datasize 256m

Dependiendo de su shell, sólo uno de estos puede tener éxito, pero seria bueno establecer el conjunto de limites de segmento de datos mucho mayor y tal vez permitir que la consulta se complete. Este comando se aplica en el actual proceso, y a todos los subprocesos creados después de que la orden se ejecute. Si usted tiene un problema con el cliente SQL debido a que el backend está devolviendo demasiados datos, prube esto antes de iniciar el cliente.


¿Cómo puedo saber qué versión de PostgreSQL estoy corriendo?

Desde psql, digite SELECT version();

¿Cómo puedo crear una columna que tome por defecto la hora actual?

Use CURRENT_TIMESTAMP:

  CREATE TABLE test (x int, modtime TIMESTAMP DEFAULT CURRENT_TIMESTAMP );

¿Cómo puedo realizar un outer join?

PostgreSQL soporta outer joins usando la sintaxis estandar SQL. Aqui hay dos ejemplos:

  SELECT *
  FROM t1 LEFT OUTER JOIN t2 ON (t1.col = t2.col);

o tambien:

  SELECT *
  FROM t1 LEFT OUTER JOIN t2 USING (col);

Estas consultas idénticas unen t1.col con t2.col, y también retorna cualquier fila desunida en t1 (lo que no coinciden en t2). un RIGTH podria unir y añadir filas desunidas de t2. Un FULL join deberia devolver una combinacion de filas desunidad incrementado en todas las filas de T1 y T2. La palabra OUTER es opcional y Se supone en LEFT, RIGHT, y FULL join. Las uniones ordinarias son llamadas INNER joins.

¿Qué debo hacer para realizar consultas utilizando múltiples bases de datos?

No hay forma de consultar una base de datos distinta a la actual. Debido a que la base de datos PostgreSQL carga los catálogos especificos del sistema, es incluso incierto cómo deberia comportarse una consulta a una base de datos cruzada.

contrib/dblink permite entra a bases de datos utilizando las funciones de llamadas de consultas. Claro, un cliente puede hacer también conexiones simultáneas a diferentes bases de datos y la combinación de resultados en el lado del cliente.

¿Cómo puedo regresar múltiples filas o columnas desde una función?

Esto es fácil usando SRF ("set-returning functions", funciones que retornan conjuntos): Return_more_than_one_row_of_data_from_PL/pgSQL_functions

¿Por qué obtengo "relación con OID ##### no existe" errores cuando se accede a tablas temporales en funciones PL / pgsql?

En las versiones de PostgreSQL <8.3, el script de las funciones PL/PgSQL , causa un desafortunado efecto secundario es que si una función PL/PgSQL accede a un tabla temporal, y esta tabla es más tarde eliminada y recreada, y la función es llamada de nuevo, la función fallará porque el contenido de la funcion estara todavia en la caché en el punto de la antigua tabla temporal. La solución es utilizar EXECUTE para el acceso a la tabla temporal en PL/PgSQL. Esto causa que la consulta sea cada vez reparada.

Este problema no se produce en versiones posteriores de PostgreSQL 8.3

¿Qué soluciones de replicación están disponibles?

Aunque "replicación" es un termino simple, hay varias tecnologías para realizar la replicación, con ventajas y desventajas cada una.

La replicacion Maestro/esclavo permite que un solo maestro pueda recibir consultas de lectura/escritura, mientras que los esclavos sólo pueden aceptar la seleccion de consultas de lectura. La solucion de replicacion maestro/esclavo libre mas popular es Slony-I.

La replicacion Multi-maestro permite leer/escribir las consultas que se enviarán a múltiples computadores replicados. Esta capacidad también tiene un considerable impacto en el rendimiento debido a la necesidad de sincronizar los cambios entre servidores. PGCluster es la solucion más popular disponible gratuitamente para PostgreSQL.

También hay soluciones de replicación comerciales basados en hardware y una variedad de modelos de replicación disponibles.

¿Por qué mis tablas y nombres de columna no son reconocidos en mi consulta? ¿Por qué no es preservada la capitalización?

La causa más común de nombres no reconocido es el uso de comillas dobles alrededor de la tabla o nombres de columna durante la creación de la tabla. Cuándo las comillas dobles se utilizan, en la tabla y en los nombres de columna (llamados identificadores) son almacenadas en mayúsculas y minúsculas, lo que significa que deben usar comillas dobles cuando se refiere a los nombres en una consulta. Algunas interfaces, como pgAdmin, automáticamente citan las comillas dobles en los identificadores durante la creación de la tabla. Así, para reconocer los identificadores, usted debe:

  • Evitar las comillas dobles citando identificadores cuando se crean tablas
  • Utilice únicamente caracteres en minúsculas en los identificadores
  • Al hacer referencia en las consultas citar los comillas Dobles en los identificadores.