Manejo de bases de datos postgresql. Postgresql: ¿qué tipo de programa es? PostgreSQL, sistema de gestión de bases de datos relacionales de objetos (DBMS) gratuito. Comparación de Tibero y PostgreSQL

Postgres Pro es un DBMS ruso desarrollado por Postgres Professional basado en el DBMS PostgreSQL de distribución gratuita. Postgres Pro está incluido en el registro de software ruso (ver https://reestr.minsvyaz.ru/reestr/65273/)

De esta manera, los clientes pueden acceder a beneficios de funcionalidad y rendimiento que los benefician sin tener que esperar una nueva versión de PostgreSQL (lo que puede demorar hasta un año). Como autores, brindamos soporte para todos nuestros desarrollos. Como representantes de la comunidad internacional Desarrolladores de PostgreSQL, también brindamos soporte comercial para el DBMS PostgreSQL de distribución gratuita.

Comparación de versiones de PostgreSQL

SGBDPostgreSQL
Empresa
PostgreSQL
Estándar
PostgreSQL
Un DBMS comercial desarrollado por Postgres Professional para aplicaciones de misión crítica y cargas elevadas.DBMS ruso con fuente abierta, desarrollado por Postgres Professional basado en el DBMS PostgreSQL de distribución gratuitaUn DBMS de distribución gratuita desarrollado por la comunidad internacional.
Registro unificado de software ruso
Contador de transacciones de 64 bits
Copia de seguridad incremental a nivel de bloque
Certificado FSTEC SVT 5, NDV 4
Transacciones Autónomas
tablas de particionamiento
Compresión de datos
multimaestro
soporte 1C
Mesas portátiles
Sugerencias del programador


Versiones de PostgreSQL

El número de versión de PostgreSQL se construye a partir del número de versión de PostgreSQL con la adición de un dígito que indica el número de versión actual. Cuando se lanza una nueva versión menor de PostgreSQL (esto suele ocurrir cuando aparecen parches relacionados con la seguridad y correcciones de errores graves), la numeración de PostgreSQL se restablece a uno. Por ejemplo, cuando se lanza PostgreSQL 9.5.1, se lanza PostgresPro 9.5.1.1, luego, antes de que se lanza PostgreSQL 9.5.2, se puede lanzar Postgres Pro 9.5.1.2, 9.5.1.3, etc. Cuando se lance PostgreSQL 9.5.2, Postgres Pro se actualizará a la versión 9.5.2.1, etc.

Junto con el lanzamiento del código fuente de PostgreSQL, publicamos nuestras compilaciones como paquetes para varias plataformas. Estos son los siguientes sistemas operativos y sus versiones:

  1. linux
    • CentOS 6/7
    • Debian 7/8
    • Ubuntu 12.04/14.04/16.04/16.10,
    • oráculo linux,
    • Servidor Rosa Enterprise Linux,
    • Servidor de cobalto ROSA SX,
    • Servidor ROSA DX Cobalto,
    • ROSA Maratón LTS 2012,
    • Alt Linux Centauro 8,
    • Alt Linux SPT 6,
    • Alt Linux SPT 7,
    • servidor empresarial SUSE Linux,
  2. Microsoft® Windows® 2012 o 2016.

Las bases de datos PostgreSQL 9.5.*.* son compatibles con PostgreSQL 9.5.* Al actualizar desde 9.5, no es necesario volcar/restaurar. Al pasar de más versiones anteriores PostgreSQL requiere el uso de dump/restore o pg_upgrade.

La versión actual de Postgres Pro Standard es 11.2.1. Fecha de lanzamiento: 28 de marzo de 2019.

Diferencias entre Postgres Pro Standard y PostgreSQL

En PostgreSQL Estándar vs. versión actual PostgreSQL en momento actual incluyó los siguientes cambios:

  1. Mejoras de rendimiento en sistemas multinúcleo:
    • optimizando la asignación de tablas hash en la memoria compartida, eliminando la contención de bloqueos para una gran cantidad de procesos.
    • Optimización del propietario del recurso. Mejora el rendimiento consultas complejas y consultar tablas con una gran cantidad de particiones.
    • Optimizaciones del administrador de búfer
    • Optimización LWLock para la arquitectura Power8
    • Optimizaciones de confirmación de dos fases
  2. Mejoras lleno búsqueda de texto:
    • soporte de búsqueda de frases
    • soporte para diccionarios hunspell para trabajar con formas de palabras
    • algunos diccionarios, incluidos ruso e inglés, están incluidos en la distribución y su conexión requiere un comando SQL
    • Módulo Shared_ispell, que optimiza el rendimiento de la búsqueda de texto completo cargando diccionarios en la memoria al iniciar el servidor, y no al inicio de la sesión.
  3. Índices de cobertura. Soporte para la construcción INCLUDING en CREATE INDEX.
  4. Portabilidad: libicu es compatible con todas las plataformas y proporciona un manejo inequívoco del orden de clasificación y otras operaciones con caracteres Unicode. En varias plataformas, esta biblioteca mejora el rendimiento de clasificación y, lo que es más importante, permite que Postgres Pro utilice claves abreviadas, que estaban deshabilitadas en la versión principal de PostgreSQL.
  5. El módulo pg_trgm no sólo soporta comparación difusa cadenas, pero también búsqueda difusa de subcadenas.
  6. El módulo pageinspect admite el acceso no solo a la metainformación, sino también a la representación interna de los datos de la tabla.
  7. Se ha agregado un nuevo módulo, sr_plan, que le permite guardar planes de ejecución de consultas y utilizar los planes guardados en lugar de generar un plan de consulta nuevo cada vez que lo ejecuta.
  8. Se ha agregado el módulo dump_stat, que le permite guardar información sobre estadísticas y restaurarla al volcar una base de datos. Esto le permite acelerar el proceso de recuperación al eliminar la necesidad de calcular estadísticas con el comando VACUUM ANALYZE después de la recuperación.
  9. Se agregó el módulo JSQuery que permite lenguaje especial formular consultas a campos de tipo JSONB con soporte para índices GIN.
  10. El módulo proporciona un tipo de datos adicional para compatibilidad con MicrosoftSQL Servidor.
  11. El módulo proporciona operador adicional igualdad de compatibilidad con Microsoft SQL Server.
  12. El módulo proporciona una función transaccionalmente insegura para truncar tablas temporales, evitando que el directorio pg_class crezca.
  13. El módulo proporciona un conjunto de funciones que actualizan inmediatamente las estadísticas de las tablas de destino después de las operaciones INSERTAR, ACTUALIZAR, ELIMINAR y SELECCIONAR EN ellas.
  14. El módulo agrega soporte para instrucciones al programador, lo que le permite deshabilitar o habilitar ciertos índices al ejecutar una consulta.

Puede obtener más información sobre las diferencias entre PostgreSQL y PostgreSQL en la tabla de comparación de productos.

Licencia estándar de PostgreSQL

Postgres Pro Standard se distribuye bajo la licencia PostgreSQL con complementos de Postgres Professional:

Partes Copyright (c) 2015-2019, Postgres Professional
Partes Copyright (c) 1996-2019, PostgreSQL Global Development Group
Partes Copyright (c) 1994 Regents of the University of California

Se otorgan derechos para usar, copiar, modificar y distribuir este software y su documentación con fines de prueba, desarrollo de software, familiarización con la funcionalidad del DBMS, uso en proceso educativo de forma gratuita y sin la firma de ningún acuerdo, siempre que con cada copia se proporcione el aviso de derechos de autor anterior, el párrafo actual y los cuatro párrafos siguientes. El uso para otros fines, la integración en otros productos, la replicación y otras acciones requieren la compra de una licencia por separado.

La Universidad de California no asume ninguna responsabilidad por ningún daño, incluida la pérdida de ingresos, que surja directa o indirectamente, especial o incidental, del uso de este software o su documentación, incluso si la Universidad de California ha sido informada de la posibilidad de tales daños. .

La Universidad de California renuncia específicamente a cualquier garantía de cualquier tipo, incluidas, entre otras, las garantías implícitas de comerciabilidad o idoneidad para un propósito particular. Dado software se proporciona "tal cual" y la Universidad de California no tiene obligación de proporcionar mantenimiento, soporte, actualizaciones, mejoras o cambios.

Postgres Professional Limited Liability Company no asume ninguna responsabilidad por ningún daño, incluida la pérdida de ingresos, causado por el uso directo o indirecto, especial o incidental de este software o su documentación, incluso si Postgres Professional Limited Liability Company ha sido advertido de la posibilidad de dicho daño. .

Postgres Professional Limited Liability Company renuncia específicamente a cualquier garantía, incluidas, entre otras, las garantías implícitas de comerciabilidad o idoneidad para un propósito particular. Este software se proporciona "tal cual" y Postgres Professional Limited Liability Company no está obligado a proporcionar mantenimiento, soporte, actualizaciones, extensiones o cambios.

  • SQL
  • Desarrollo de sitios web
    • Traducción

    Hoy hablemos de las ventajas de Postgres sobre otros sistemas de código abierto. Definitivamente cubriremos este tema con más detalle en el PG Day"16 Rusia, que solo faltan dos meses.

    Quizás se esté preguntando: "¿Por qué PostgreSQL?" Después de todo, existen otras opciones para bases de datos relacionales con acceso abierto. código fuente(Analizamos MySQL, MariaDB y Firebird para los propósitos de este artículo), entonces, ¿qué puede ofrecer Postgres que ellos no ofrezcan? El eslogan de PostgreSQL afirma que es "La base de datos de código abierto más avanzada del mundo". Daremos varias razones por las que Postgres hace tales declaraciones.

    En la primera parte de esta serie, hablaremos sobre el almacenamiento de datos: modelo, estructura, tipos y limitaciones de tamaño. Y centrémonos más en el muestreo y la manipulación de datos.

    modelo de datos

    PostgreSQL no es sólo un DBMS relacional, sino relacional de objetos. Esto le otorga algunas ventajas sobre otras bases de datos SQL de código abierto como MySQL, MariaDB y Firebird.

    Una característica fundamental de una base de datos relacional de objetos es su soporte para objetos de usuario y su comportamiento, incluidos tipos de datos, funciones, operaciones, dominios e índices. Esto hace que Postgres sea increíblemente flexible y confiable. Entre otras cosas, puede crear, almacenar y recuperar estructuras de datos complejas. En algunos de los ejemplos siguientes, verá construcciones anidadas y compuestas que no son compatibles con los RDBMS estándar.

    Estructuras y tipos de datos.

    Existe una lista extensa de tipos de datos que admite Postgres. Además de los tipos de datos numéricos, flotantes, de texto, booleanos y otros tipos de datos esperados (y muchas variaciones de los mismos), PostgreSQL cuenta con soporte para uuid, monetario, enumeración, geométrico, binario, direcciones de red, cadenas de bits, búsqueda de texto, xml, json y matrices. , tipos y rangos compuestos, así como algunos tipos internos para identificar objetos y ubicación de troncos. Para ser justos, MySQL, MariaDB y Firebird también tienen algunos de estos tipos de datos, pero sólo Postgres los admite todos.

    Echemos un vistazo más de cerca a algunos de ellos:

    Direcciones de red
    PostgreSQL proporciona almacenamiento diferentes tipos direcciones de red. El tipo de datos CIDR (enrutamiento de dominio de Internet sin clases) sigue la convención para direcciones de red IPv4 e IPv6. A continuación se muestran algunos ejemplos:
    • 192.168.100.128/25
    • 10.1.2.3/32
    • 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128
    • ::ffff:1.2.3.0/128
    También está disponible para almacenar direcciones de red el tipo de datos INET, utilizado para hosts IPv4 e IPv6, donde las subredes son opcionales. El tipo de datos MACADDR se puede utilizar para almacenar direcciones MAC para identificación de hardware, como 08-00-2b-01-02-03.

    MySQL y MariaDB también tienen funciones INET para convertir direcciones de red, pero no proporcionan tipos de datos para almacenar direcciones de red internamente. Firebird tampoco tiene tipos para almacenar direcciones de red.

    matrices multidimensionales
    Dado que Postgres es una base de datos relacional de objetos, se pueden almacenar matrices de valores para la mayoría tipos existentes datos. Esto se puede hacer añadiendo corchetes a la especificación del tipo de datos para la columna o utilizando la expresión ARRAY. El tamaño de la matriz se puede especificar, pero no es obligatorio. Veamos un menú de picnic festivo para demostrar el uso de matrices:

    Creamos una tabla cuyos valores son matrices CREATE TABLE vacaciones_picnic (vacaciones varchar(50) -- valor de cadena texto sándwich, -- texto lateral de la matriz , -- matriz multidimensional texto de postre ARRAY, -- conjunto de texto de bebidas ARRAY -- conjunto de 4 elementos);
    MySQL, MariaDB y Firebird no pueden hacer esto. Para almacenar tales matrices de valores en tradicional bases de datos relacionales datos, tendrá que utilizar una solución alternativa y crear mesa separada con filas para cada uno de los valores de la matriz.

    Datos geométricos
    Los datos de ubicación se están convirtiendo rápidamente en un requisito fundamental para muchas aplicaciones. PostgreSQL ha soportado durante mucho tiempo muchos tipos de datos geométricos, como puntos, líneas, círculos y polígonos. Uno de estos tipos es PATH, que consta de muchos puntos secuenciales y puede ser abierto (los puntos inicial y final no están conectados) o cerrado (los puntos inicial y final están conectados). Tomemos como ejemplo una ruta de senderismo. EN en este caso La ruta de senderismo es un circuito, por lo que los puntos de inicio y fin están conectados, lo que significa que mi ruta está cerrada. Los corchetes alrededor de un conjunto de coordenadas indican un camino cerrado, mientras que los corchetes indican un camino abierto.

    Cree una tabla para almacenar senderos CREATE TABLE senderos (trail_name varchar(250), trail_path path);
    -- inserte el sendero en la tabla, -- para el cual la ruta está determinada por coordenadas en formato de latitud-longitud INSERTAR EN LOS VALORES de los senderos ("Dool Trail - Creeping Forest Trail Loop", ((37.172,-122.22261666667), (37.171616666667, -122.22385), (37.1735,-122.2236), (37.175416666667,-122.223), (37.1758,-122.22378333333), (37.179466666667,-122.22866666667), (37.18) 395,-122.226 75), (37.180783333333,-122.22466666667), (37.176116666667, -122.2222), (37.1753, -122.22293333333), (37.173116666667,-122.22281666667)));

    La extensión PostGIS para PostgreSQL amplía las propiedades de datos geométricos existentes con tipos espaciales, funciones, operadores e índices auxiliares. Proporciona soporte de ubicación y admite datos rasterizados y vectoriales. También proporciona compatibilidad con una variedad de herramientas geoespaciales de terceros (con derechos de autor y de código abierto) para mostrar, renderizar y trabajar con datos. Tenga en cuenta que MySQL 5.7.8 y MariaDB desde la versión 5.3.3 han agregado extensiones de tipo de datos para admitir el estándar de información geográfica OpenGIS. Esta versión de MySQL y las versiones posteriores de MariaDB ofrecen almacenamiento de tipos de datos similar a los geodatos nativos de Postgres. Sin embargo, en MySQL y MariaDB significados Los datos primero deben convertirse a formato geométrico mediante comandos simples antes de insertarlos en una tabla. pájaro de fuego encendido no admite tipos de datos geométricos.

    Soporte JSON
    La compatibilidad con JSON en PostgreSQL le permite pasar al almacenamiento de datos sin esquema en una base de datos SQL. Esto puede resultar útil cuando la estructura de datos requiere cierta flexibilidad: por ejemplo, si la estructura aún está cambiando durante el desarrollo o no se sabe qué campos contendrá el objeto de datos.

    Tipo datos JSON proporciona validación JSON que le permite utilizar operadores JSON especializados y funciones integradas en Postgres para realizar consultas y manipular datos. También está disponible el tipo JSONB, una variación binaria del formato JSON en la que se eliminan los espacios, no se conserva la clasificación de los objetos, sino que se almacenan de la manera más óptima y solo último valor para llaves duplicadas. JSONB suele ser el formato preferido porque requiere menos espacio de objeto, se puede indexar y es más rápido de procesar porque no requiere repetición. analizando.

    MySQL 5.7.8 y MariaDB 10.0.1 agregaron soporte para objetos JSON nativos. Pero si bien hay muchas funciones y operadores para JSON que ahora están disponibles en estas bases de datos, no están indexados de la misma manera que JSONB en PostgreSQL. Firebird aún no se ha sumado a la tendencia y sólo admite objetos JSON como texto.

    Creando un nuevo tipo
    Si descubre que la extensa lista de tipos de datos de Postgres no es suficiente, puede usar el comando CREATE TYPE para crear nuevos tipos de datos, como compuestos, enumerados, rango y base. Veamos un ejemplo de creación y envío de solicitudes de un nuevo tipo compuesto:

    Crea uno nuevo tipo compuesto"vino" CREAR TIPO vino AS (vino_vineyard varchar(50), vino_tipo varchar(50), vino_año int);
    -- crear una tabla que utilice el tipo compuesto "vino" CREAR TABLA de emparejamientos (menu_entree varchar(50), vino_emparejamiento vino);

    Dimensiones de datos

    PostgreSQL puede manejar una gran cantidad de datos. Las restricciones publicadas actualmente se enumeran a continuación:

    En Redactar [aprox. carril: la organización en la que trabaja el autor del artículo original] escalamos automáticamente su instalación para que no tenga que preocuparse por el crecimiento de la cantidad de datos. Pero, como sabe cualquier administrador de bases de datos, hay que tener cuidado con los archivos demasiado grandes y posibilidades ilimitadas. Recomendamos usar el sentido común al crear tablas y agregar índices.

    En comparación, MySQL y MariaDB son conocidos por su límite de tamaño de fila de 65.535 bytes. Firebird también ofrece sólo 64 Kb como tamaño máximo de línea. Por lo general, la cantidad de datos está limitada por el tamaño máximo del archivo. Sistema operativo. Porque PostgreSQL puede almacenar datos tabulares en varios archivos tamaño más pequeño, puede evitar esta limitación. Pero vale la pena señalar que también gran número Los archivos pueden afectar negativamente al rendimiento. Soporte MySQL y MariaDB más columnas por tabla (hasta 4096 dependiendo del tipo de datos) y tamaños de tablas individuales más grandes que PostgreSQL, pero la necesidad de exceder los límites existentes de Postgres surge solo en casos extremadamente raros.

    Integridad de datos

    Postgres se esfuerza por cumplir con ANSI-SQL:2008, ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad) y es conocido por su integridad referencial y transaccional. Claves primarias, restricciones y claves externas en cascada, restricciones únicas, restricciones NO NULO, restricciones de verificación y otras funciones de integridad de datos garantizan que solo se almacenen datos correctos.

    MySQL y MariaDB trabajan más duro para igualar estándar SQL con motores de tablas InnoDB/XtraDB. Ahora ofrecen una opción ESTRICTA que utiliza modos SQL que configura comprobaciones de validez de los datos que se utilizan. Sin embargo, dependiendo del modo que utilice, es posible que durante la actualización se inserten o creen datos no válidos e incluso truncados sin su conocimiento. Ninguna de estas bases de datos admite actualmente VERIFICAR restricciones. Además, tienen muchas características relacionadas con las restricciones de integridad referencial. claves foráneas. Además de lo anterior, la integridad de los datos puede verse comprometida significativamente según el motor de almacenamiento elegido. MySQL (y la bifurcación MariaDB) no han ocultado el hecho de que intercambian integridad y cumplimiento de estándares por velocidad y eficiencia.

    resumiendo

    Postgres tiene muchas características. Construido utilizando el modelo relacional de objetos, admite estructuras complejas y amplia gama tipos de datos integrados y definidos por el usuario. Proporciona una capacidad de datos ampliada y es confiable por su cuidadoso manejo de la integridad de los datos. Es posible que no necesite todas las funciones de almacenamiento avanzadas que hemos explorado en este artículo, pero dado que sus necesidades pueden acumularse rápidamente, definitivamente es un beneficio tenerlas todas a su alcance.

    Si cree que PostgreSQL no se adapta a sus necesidades o prefiere "disparar desde la cadera", entonces quizás desee echar un vistazo a las bases de datos NoSQL que ofrecemos en Compose o considerar las otras bases de datos SQL que hemos mencionado. . Cada uno de ellos tiene sus propias ventajas. Compose cree firmemente que es muy importante elegir la base de datos adecuada para tarea especifica…¡a veces eso significa seleccionar múltiples bases de datos!

    ¿Quieres más Postgres?

    PostgreSQL es un DBMS relacional de objetos multiplataforma de código abierto. Este artículo le mostrará cómo instalar PostgreSQL en ubuntu linux, conéctate a él y realiza un par consultas SQL simples, así como también cómo configurar copias de seguridad.

    Para instalar PostgreSQL 9.2 en Ubuntu 12.10, ejecute los siguientes comandos:

    sudo apt-add-repository ppa:pitti/postgresql
    sudo apt-obtener actualización
    sudo apt-get instalar postgresql-9.2

    Intentemos trabajar con el DBMS a través del shell:

    sudo -u postgrespsql

    Creemos una base de datos de prueba y un usuario de prueba:

    CREAR BASE DE DATOS test_database;
    CREAR USUARIO test_user CON contraseña "qwerty";
    OTORGAR TODO EN LA BASE DE DATOS test_database A test_user;

    Para salir del shell, ingrese el comando \q .

    Ahora intentemos trabajar con la base de datos creada en nombre de test_user:

    psql -h localhost base_datos_prueba usuario_prueba

    Creemos una nueva tabla:

    CREAR SECUENCIA user_ids;
    CREAR TABLA usuarios (
    id INTEGER CLAVE PRIMARIA PREDETERMINADO NEXTVAL ("user_ids"),
    iniciar sesión CHAR(64),
    contraseña CHAR(64));

    Tenga en cuenta que, a diferencia de otros DBMS, PostgreSQL no tiene columnas con la propiedad auto_increment. En cambio, Postgres usa secuencias. Por ahora basta con saber que usando la función nextval podemos obtener números únicos para una secuencia determinada:

    SELECCIONE NEXTVAL ("user_ids");

    Al establecer el valor predeterminado para el campo de identificación de la tabla de usuarios en NEXTVAL("user_ids"), hemos logrado el mismo efecto que da auto_increment. Al agregar nuevos registros a la tabla, no tenemos que especificar la identificación, porque se generará una identificación única automáticamente. Varias tablas pueden utilizar la misma secuencia. De esta forma podemos garantizar que los valores de algunos campos de estas tablas no se superpongan. En este sentido, las secuencias son más flexibles que el auto_increment.

    Se puede crear exactamente la misma tabla usando un solo comando:

    CREAR TABLA usuarios2 (
    id CLAVE PRIMARIA DE SERIE,
    iniciar sesión CHAR(64),
    contraseña CHAR(64));

    En este caso, la secuencia para el campo id se crea automáticamente.

    Ahora, usando el comando \d puede ver una lista de todas las tablas disponibles, y usando \d usuarios puede ver una descripción de la tabla de usuarios. Si no obtiene la información que busca, intente \d+ en lugar de \d . Puede obtener una lista de bases de datos con el comando \l y cambiar a una base de datos específica con el comando \c dbname. Para mostrar la ayuda del comando, diga \?

    . Es importante tener en cuenta que en PostgreSQL, de forma predeterminada, los nombres de tablas y columnas se convierten en minúscula

    . Si no desea este comportamiento, puede utilizar comillas dobles:

    CREAR TABLA "otraTabla" ("algúnValor" VARCHAR (64));

    Otra característica de PostgreSQL que puede causar dificultades a la hora de empezar a trabajar con este DBMS son los llamados “esquemas”. Un esquema es algo así como un espacio de nombres para tablas, como un directorio con tablas dentro de una base de datos.

    Creando un esquema:

    CREAR ESQUEMA de reservas;

    Cambiar al esquema:

    ESTABLECER search_path A reservas;

    Puede ver una lista de esquemas existentes usando el comando \dn. El esquema predeterminado se denomina público. En principio, puede utilizar PostgreSQL con éxito sin conocer la existencia de esquemas. Pero cuando se trabaja con código heredado, y en algunos casos extremos, conocer los esquemas puede resultar muy útil.

    De lo contrario, trabajar con PostgreSQL no es muy diferente de trabajar con cualquier otro DBMS relacional:
    INSERTAR EN usuarios (nombre de usuario, contraseña)
    SELECCIONAR * DE usuarios;

    Si ahora intenta conectarse a Postgres desde otra máquina, fallará:

    psql -h 192.168.0.1 base_datos_prueba usuario_prueba

    Psql: no pudo conectarse al servidor: conexión rechazada
    ¿El servidor se ejecuta en el host "192.168.0.1" y acepta
    ¿Conexiones TCP/IP en el puerto 5432?

    Para solucionar este problema, agregue la línea:

    direcciones_escucha = "localhost,192.168.0.1"

    ...al archivo /etc/postgresql/9.2/main/postgresql.conf también.

    • Traducción

    Hoy hablemos de las ventajas de Postgres sobre otros sistemas de código abierto. Definitivamente cubriremos este tema con más detalle en el PG Day"16 Rusia, que solo faltan dos meses.

    Quizás se esté preguntando: "¿Por qué PostgreSQL?" Después de todo, existen otras opciones de bases de datos relacionales de código abierto (para los fines de este artículo analizamos MySQL, MariaDB y Firebird), entonces, ¿qué puede ofrecer Postgres que no ofrezcan? El eslogan de PostgreSQL afirma que es "La base de datos de código abierto más avanzada del mundo". Daremos varias razones por las que Postgres hace tales declaraciones.

    En la primera parte de esta serie, hablaremos sobre el almacenamiento de datos: modelo, estructura, tipos y limitaciones de tamaño. Y en la segunda parte nos centraremos más en el muestreo y la manipulación de datos.

    modelo de datos

    PostgreSQL no es sólo un DBMS relacional, sino relacional de objetos. Esto le otorga algunas ventajas sobre otras bases de datos SQL de código abierto como MySQL, MariaDB y Firebird.

    Una característica fundamental de una base de datos relacional de objetos es su soporte para objetos de usuario y su comportamiento, incluidos tipos de datos, funciones, operaciones, dominios e índices. Esto hace que Postgres sea increíblemente flexible y confiable. Entre otras cosas, puede crear, almacenar y recuperar estructuras de datos complejas. En algunos de los ejemplos siguientes, verá construcciones anidadas y compuestas que no son compatibles con los RDBMS estándar.

    Estructuras y tipos de datos.

    Existe una lista extensa de tipos de datos que admite Postgres. Además de los tipos de datos numéricos, flotantes, de texto, booleanos y otros tipos de datos esperados (y muchas variaciones de los mismos), PostgreSQL cuenta con soporte para uuid, monetario, enumeración, geométrico, binario, direcciones de red, cadenas de bits, búsqueda de texto, xml, json y matrices. , tipos y rangos compuestos, así como algunos tipos internos para identificar objetos y registrar ubicaciones. Para ser justos, MySQL, MariaDB y Firebird también tienen algunos de estos tipos de datos, pero sólo Postgres los admite todos.

    Echemos un vistazo más de cerca a algunos de ellos:

    Direcciones de red
    PostgreSQL proporciona almacenamiento de diferentes tipos de direcciones de red. El tipo de datos CIDR (enrutamiento de dominio de Internet sin clases) sigue la convención para direcciones de red IPv4 e IPv6. A continuación se muestran algunos ejemplos:
    • 192.168.100.128/25
    • 10.1.2.3/32
    • 2001:4f8:3:ba:2e0:81ff:fe22:d1f1/128
    • ::ffff:1.2.3.0/128
    También está disponible para almacenar direcciones de red el tipo de datos INET, utilizado para hosts IPv4 e IPv6, donde las subredes son opcionales. El tipo de datos MACADDR se puede utilizar para almacenar direcciones MAC para identificación de hardware, como 08-00-2b-01-02-03.

    MySQL y MariaDB también tienen funciones INET para convertir direcciones de red, pero no proporcionan tipos de datos para almacenar direcciones de red internamente. Firebird tampoco tiene tipos para almacenar direcciones de red.

    matrices multidimensionales
    Dado que Postgres es una base de datos relacional de objetos, se pueden almacenar matrices de valores para la mayoría de los tipos de datos existentes. Esto se puede hacer agregando corchetes a la especificación del tipo de datos para la columna o usando la expresión ARRAY. El tamaño de la matriz se puede especificar, pero no es obligatorio. Veamos un menú de picnic festivo para demostrar el uso de matrices:

    Creamos una tabla cuyos valores son matrices CREATE TABLE Holiday_picnic (Holiday varchar(50) -- valor de cadena texto sándwich, -- matriz texto lateral , -- matriz multidimensional postre texto ARRAY, -- matriz texto de bebidas ARRAY -- matriz de 4- x elementos);
    -- inserte valores de matriz en la tabla INSERT INTO Holiday_picnic VALUES ("Día del Trabajo", "("carne asada","vegetales","pavo")", "( ("ensalada de papas","ensalada verde", "ensalada de macarrones "), ("patatas fritas","galletas saladas") )", "("cóctel de frutas","pastel de bayas","helado")", "("soda","jugo","cerveza" ,"agua ")");

    Datos geométricos
    MySQL, MariaDB y Firebird no pueden hacer esto. Para almacenar tales matrices de valores en bases de datos relacionales tradicionales, tendría que utilizar una solución alternativa y crear una tabla separada con filas para cada uno de los valores de la matriz.

    Cree una tabla para almacenar senderos CREATE TABLE senderos (trail_name varchar(250), trail_path path);
    -- inserte el sendero en la tabla, -- para el cual la ruta está determinada por coordenadas en formato de latitud-longitud INSERTAR EN LOS VALORES de los senderos ("Dool Trail - Creeping Forest Trail Loop", ((37.172,-122.22261666667), (37.171616666667, -122.22385), (37.1735,-122.2236), (37.175416666667,-122.223), (37.1758,-122.22378333333), (37.179466666667,-122.22866666667), (37.18) 395,-122.226 75), (37.180783333333,-122.22466666667), (37.176116666667, -122.2222), (37.1753, -122.22293333333), (37.173116666667,-122.22281666667)));

    Los datos de ubicación se están convirtiendo rápidamente en un requisito fundamental para muchas aplicaciones. PostgreSQL ha soportado durante mucho tiempo muchos tipos de datos geométricos, como puntos, líneas, círculos y polígonos. Uno de estos tipos es PATH, que consta de muchos puntos secuenciales y puede ser abierto (los puntos inicial y final no están conectados) o cerrado (los puntos inicial y final están conectados). Tomemos como ejemplo una ruta de senderismo. En este caso, la ruta de senderismo es un circuito, por lo que los puntos de inicio y fin están conectados y, por lo tanto, mi camino está cerrado. Los corchetes alrededor de un conjunto de coordenadas indican un camino cerrado, mientras que los corchetes indican un camino abierto.

    Soporte JSON
    La compatibilidad con JSON en PostgreSQL le permite pasar al almacenamiento de datos sin esquema en una base de datos SQL. Esto puede resultar útil cuando la estructura de datos requiere cierta flexibilidad: por ejemplo, si la estructura aún está cambiando durante el desarrollo o no se sabe qué campos contendrá el objeto de datos.

    El tipo de datos JSON proporciona validación JSON, lo que le permite utilizar funciones y operadores JSON especializados integrados en Postgres para realizar consultas y manipular datos. También está disponible el tipo JSONB, una variación binaria del formato JSON que elimina espacios, no conserva la clasificación de los objetos, sino que los almacena de la manera más óptima y solo almacena el último valor para claves duplicadas. JSONB suele ser el formato preferido porque requiere menos espacio de objetos, se puede indexar y es más rápido de procesar porque no requiere volver a analizarlo.

    MySQL 5.7.8 y MariaDB 10.0.1 agregaron soporte para objetos JSON nativos. Pero si bien hay muchas funciones y operadores para JSON que ahora están disponibles en estas bases de datos, no están indexados de la misma manera que JSONB en PostgreSQL. Firebird aún no se ha sumado a la tendencia y sólo admite objetos JSON como texto.

    Creando un nuevo tipo
    Si descubre que la extensa lista de tipos de datos de Postgres no es suficiente, puede usar el comando CREATE TYPE para crear nuevos tipos de datos, como compuestos, enumerados, rango y base. Veamos un ejemplo de creación y envío de solicitudes de un nuevo tipo compuesto:

    Cree un nuevo tipo compuesto "vino" CREAR TIPO vino AS (wine_vineyard varchar(50), wine_type varchar(50), wine_year int);
    -- crear una tabla que utilice el tipo compuesto "vino" CREAR TABLA de emparejamientos (menu_entree varchar(50), vino_emparejamiento vino);

    Dimensiones de datos

    PostgreSQL puede manejar una gran cantidad de datos. Las restricciones publicadas actualmente se enumeran a continuación:

    -- crear una tabla que utilice el tipo compuesto "vino" CREAR TABLA de emparejamientos (menu_entree varchar(50), vino_emparejamiento vino);

    En comparación, MySQL y MariaDB son conocidos por su límite de tamaño de fila de 65.535 bytes. Firebird también ofrece sólo 64 Kb como tamaño máximo de línea. Normalmente, la cantidad de datos está limitada por el tamaño máximo de archivo del sistema operativo. Debido a que PostgreSQL puede almacenar datos tabulares en muchos archivos más pequeños, puede solucionar esta limitación. Pero vale la pena señalar que demasiados archivos pueden tener un impacto negativo en el rendimiento. MySQL y MariaDB admiten más columnas por tabla (hasta 4096 dependiendo del tipo de datos) y tamaños de tablas individuales más grandes que PostgreSQL, pero la necesidad de exceder los límites existentes de Postgres surge solo en casos extremadamente raros.

    Integridad de datos

    Postgres se esfuerza por cumplir con ANSI-SQL:2008, ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad) y es conocido por su integridad referencial y transaccional. Las claves primarias, las claves externas de restricción y en cascada, las restricciones únicas, las restricciones NOT NULL, las restricciones de verificación y otras características de integridad de los datos garantizan que solo se retengan los datos válidos.

    MySQL y MariaDB están trabajando más para cumplir con el estándar SQL con motores de tablas InnoDB/XtraDB. Ahora ofrecen una opción ESTRICTA que utiliza modos SQL que establece controles sobre la exactitud de los datos que se utilizan. Sin embargo, dependiendo del modo que utilice, es posible que durante la actualización se inserten o creen datos no válidos e incluso truncados sin su conocimiento. Ninguna de estas bases de datos admite actualmente restricciones CHECK. Además, tienen muchas características relacionadas con las restricciones de integridad referencial de las claves externas. Además de lo anterior, la integridad de los datos puede verse comprometida significativamente según el motor de almacenamiento elegido. MySQL (y la bifurcación MariaDB) no han ocultado el hecho de que intercambian integridad y cumplimiento de estándares por velocidad y eficiencia.

    resumiendo

    Postgres tiene muchas características. Construido utilizando un modelo relacional de objetos, admite estructuras complejas y una amplia gama de tipos de datos integrados y definidos por el usuario. Proporciona una capacidad de datos ampliada y es confiable por su cuidadoso manejo de la integridad de los datos. Es posible que no necesite todas las funciones de almacenamiento avanzadas que hemos explorado en este artículo, pero dado que sus necesidades pueden acumularse rápidamente, definitivamente es un beneficio tenerlas todas a su alcance.

    Si cree que PostgreSQL no se adapta a sus necesidades o prefiere "disparar desde la cadera", entonces quizás desee echar un vistazo a las bases de datos NoSQL que ofrecemos en Compose o considerar las otras bases de datos SQL que hemos mencionado. . Cada uno de ellos tiene sus propias ventajas. Compose cree firmemente que es muy importante elegir la base de datos adecuada para una tarea determinada... ¡a veces eso significa elegir múltiples bases de datos!

    ¿Quieres más Postgres?

    Pensé bastante en la cuestión de qué sistema de gestión de bases de datos (DBMS) elegir para mis artículos y decidí elegir PostgreSQL.
    La elección se debe a varios motivos:

    1. SGBD gratuito
    2. Fácil de instalar.
    3. Soporte para los principales sistemas operativos.
    4. Conveniente programa pgAdmin para trabajar con bases de datos
    5. Este es un DBMS moderno con buenas capacidades.

    Básicamente, el JDK tiene una base de datos incorporada: Derby. Pero, en mi opinión, su uso es muy incómodo. MySQL en general tampoco es malo, pero tiene una utilidad bastante incómoda para ingresar comandos. El resto de bases de datos son de pago o poco conocidas. Por supuesto, después de leer mis artículos, nadie le impedirá intentar trabajar usted mismo con estas bases de datos.

    Descarga el que necesitas Versión PostgreSQL puedes hacerlo desde esta página: Descargar PostgreSQL.
    Por el momento estaba usando la versión 9.5.2. No sé qué versión habrá en el momento en que leas el artículo. Pero espero que en los próximos años las cosas no cambien radicalmente.
    Tenga cuidado: descargue la versión para su sistema operativo. Luego comienzas la instalación. En las pantallas se ve así.

    En la segunda pantalla debe seleccionar el directorio de instalación. No recomiendo instalar en el directorio predeterminado "Archivos de programa", porque en Windows plataformas de servidor Esto puede resultar complicado. En los sistemas domésticos, lo más probable es que no haya problemas, pero como dicen, "si bebes leche, soplas agua". Por lo tanto, suelo poner el directorio “C:\PostgreSQL\”

    En siguiente pantalla debe ingresar la contraseña para el usuario "postgres". Para el desarrollo, elijo la misma contraseña: "postgres".

    La siguiente pantalla solicita el puerto en el que se colgará PostgreSQL. Si no tiene instalado PostgreSQL, puede dejar el valor predeterminado "5432".

    La localización se puede dejar como está. Cualquier persona interesada puede elegir algo específico. En principio no tuve problemas para elegir el predeterminado.

    Comencemos la instalación...

    y esperar a que termine.

    Cuando termine, se le pedirá que instale utilidades adicionales Stack Builder: normalmente no lo marco, así que puedes desmarcarlo y hacer clic en "Finalizar".

    EN instalación general terminó. Ahora en la lista servicios de windows puedes ver PostgreSQL

    A menudo instalo inicio manual servicio, pero esto es lo más conveniente para usted.

    Todo lo que queda es descubrir que PostgreSQL viene con una instalación muy cómoda y sencilla. programa claro para gestionar el DBMS - pgAdmin III. Se puede encontrar en la página de inicio. menú de ventanas(si está trabajando en un sistema operativo diferente, busque, probablemente lo encontrará).
    Empiece todo lo demás de forma bastante sencilla.

    Haga doble clic en PostgreSQL 9.5 a la izquierda; es posible que se le solicite que ingrese una contraseña.
    A continuación verás la estructura de tu DBMS a la izquierda.

    Abra la sección "Bases de datos" a la izquierda y vea la base de datos "postgres" ya creada previamente.
    Hacer clic clic derecho Coloque el mouse sobre el elemento "Bases de datos" y seleccione " Nueva base datos..." Aparecerá un formulario de entrada; para comenzar, simplemente ingrese el nombre de la base de datos; yo la llamé "contactdb"

    Seleccione la base de datos recién creada con el mouse y tenga la oportunidad de hacer lo que quiera con ella.

    Para ejecutar comandos, debe abrir el editor SQL. La forma más sencilla es presionar el botón en el panel superior.

    EN ventana abierta puedes escribir comandos SQL.

    En general todo está listo. Podemos ejecutar un script SQL que creará la tabla que necesitamos para los contactos e insertará datos de prueba allí.
    Para crear los datos que necesitamos, el script SQL se ve así:

    SOLTAR TABLA SI EXISTE JC_CONTACT; CREAR TABLA JC_CONTACT (CONTACT_ID SERIAL, PRIMER_NOMBRE VARCHAR(50) NO NULO, APELLIDO VARCHAR(50) NO NULO, TELÉFONO VARCHAR(50) NO NULO, CORREO ELECTRÓNICO VARCHAR(50) NO NULO, CLAVE PRIMARIA (CONTACT_ID)); INSERTAR EN JC_CONTACT (FIRST_NAME, APELLIDO, TELÉFONO, EMAIL) VALORES ("Peter","Belgy","+79112345678"," [correo electrónico protegido]"); INSERTAR EN JC_CONTACT (FIRST_NAME, APELLIDO, TELÉFONO, EMAIL) VALORES ("Helga","Forte","+79118765432"," [correo electrónico protegido]"); SELECCIONAR * de JC_CONTACT;

    SOLTAR TABLA SI EXISTE JC_CONTACT;

    CREAR TABLA JC_CONTACT

    SERIE CONTACT_ID,

    FIRST_NAME VARCHAR (50) NO NULO,

    APELLIDO VARCHAR (50) NO NULO,

    TELÉFONO VARCHAR (50) NO NULO,

    VARCHAR DE CORREO ELECTRÓNICO (50) NO NULO,

    CLAVE PRIMARIA (CONTACT_ID)

    INSERTAR EN JC_CONTACT (PRIMER_NOMBRE, APELLIDO, TELÉFONO, CORREO ELECTRÓNICO) VALORES ("Peter", "Belgy", "+79112345678", " [correo electrónico protegido]" ) ;

    INSERTAR EN JC_CONTACT (PRIMER_NOMBRE, APELLIDO, TELÉFONO, CORREO ELECTRÓNICO) VALORES ("Helga", "Forte", "+79118765432", " [correo electrónico protegido]" ) ;

    SELECCIONAR * de JC_CONTACT;



    
    Arriba