FAQ/es

== 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:
* Instalando y Ejecutando PostgreSQL en Windows de manera nativa
=== ¿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.
* http://www.varlena.com/varlena/GeneralBits/Tidbits/annotated_conf_e.html
* http://www.varlena.com/varlena/GeneralBits/Tidbits/perf.html.
==== Seleccion de Hardware ====
El efecto de hardware en el rendimiento se detalla en:
* http://www.powerpostgresql.com/PerfList/
* http://momjian.us/main/writings/pgsql/hw_performance/index.html
=== ¿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 _<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.
Category:FAQ
Category:Español