Con una gran variedad de bases de datos entre las que elegir en el mercado, los usuarios pueden a menudo reflexionar sobre PostgreSQL frente a SQL Server para determinar la mejor opción para su caso de uso. Las organizaciones que utilizan PostgreSQL para sus operaciones podrían querer cambiar a una base de datos como Microsoft SQL Server, ya que ésta se dirige principalmente a diferentes soluciones de almacenamiento de datos, comercio electrónico y otras líneas de negocio.

Históricamente, Microsoft SQL Server ha sido el favorito de las organizaciones que dependen de otros productos de Microsoft, pero PostgreSQL ha avanzado rápidamente hasta llegar a la cima del nicho, no sólo por las ventajas de ser de código abierto, sino también por su activa comunidad de usuarios y sus prácticas funciones.

Esto es lo que nos lleva a esta discusión. Comparar PostgreSQL y SQL Server te ayudará a entender mejor las posibles ventajas y compensaciones de los dos sistemas, y cuál es el más adecuado para tu propósito.

¡Vamos a profundizar!

¿Qué es PostgreSQL?

The PostgreSQL logo, showing the text below a stylized blue elephant head outlined in black and white.
Logotipo de PostgreSQL (Fuente de la imagen: Uberconf)

PostgreSQL se ha consolidado como una base de datos de código abierto avanzada y de clase empresarial que admite tanto consultas JSON (no relacionales) como SQL (relacionales). Este potente y estable sistema de gestión de bases de datos está respaldado por más de treinta años de desarrollo activo por parte de la comunidad que ha contribuido a su reputación de integridad, fiabilidad, resistencia, rendimiento y corrección.

PostgreSQL se utiliza como principal almacén de datos para diversas aplicaciones móviles, web, analíticas y geoespaciales. PostgreSQL también cuenta con un rico historial de apoyo a los tipos de datos avanzados, junto con la optimización del rendimiento que suelen tener sus homólogas comerciales de bases de datos, como Microsoft SQL Server y Oracle.

Además de ser gratuito y de código abierto, PostgreSQL es muy extensible. Por ejemplo, puedes generar funciones personalizadas, definir tus tipos de datos e incluso escribir código de varios lenguajes de programación sin tener que recompilar tu base de datos

Historia

He aquí un breve resumen de PostgreSQL a lo largo de los años:

  • Ingres se desarrolló por primera vez en 1977.
  • Michael Stonebraker y sus colaboradores desarrollaron Postgres en 1986.
  • En 1990, se añadió a PostgreSQL el soporte para PL/pgSQL y el cumplimiento de ACID.
  • NYCPUG (New York City PostgreSQL User Group) se unió a la PgUS (United States PostgreSQL Association) en 2013.
  • En 2014, la PGconf inauguró una nueva era para los usuarios de PostgreSQL.

Características principales

Ahora, pasemos a echar un vistazo a algunas características de PostgreSQL que lo convierten en una herramienta indispensable en el mercado:

  • Cumplimiento de estándares y fiabilidad: El registro de escritura anticipada de PostgreSQL le permite destacar como una base de datos altamente tolerante a fallos. PostgreSQL también es compatible con ACID y ofrece soporte completo para vistas, claves foráneas, desencadenantes, uniones y procedimientos almacenados, en varios lenguajes. Incluye la mayoría de los tipos de datos de SQL: 2008, como BOOLEAN, NUMERIC, INTEGER, DATE, VARCHAR, TIMESTAMP, INTERVALO y CHAR.
  • Extensiones robustas: PostgreSQL alberga robustos conjuntos de características como la recuperación puntual, la concurrencia multiversional (MVCC), los tablespaces, los controles de acceso granulares y las copias de seguridad en línea/en caliente. Además, PostgreSQL tiene en cuenta las diferencias entre mayúsculas y minúsculas, la ordenación y el formato. Es altamente escalable tanto en la cantidad de datos que puede gestionar como en el número de usuarios simultáneos que puede albergar.
  • Licencia de código abierto: Puedes disponer del código fuente de PostgreSQL bajo una licencia de código abierto, lo que te da la libertad de modificarlo, utilizarlo e implementarlo como creas conveniente, sin ningún coste. Además, PostgreSQL no incurre en ningún coste de licencia, lo que elimina el riesgo de un despliegue excesivo. La comunidad de entusiastas y colaboradores de PostgreSQL encuentra regularmente correcciones y errores, lo que contribuye a la seguridad general del sistema de bases de datos.

Casos de uso

La versatilidad de PostgreSQL permite que se aproveche en una amplia gama de casos de uso como:

  • Base de datos centralizada y federada: La compatibilidad con JSON y las envolturas de datos extraños de PostgreSQL le permiten enlazar con otros almacenes de datos -incluidos los tipos de datos NoSQL- y servir como centro federado para sistemas de bases de datos políglotas.
  • Base de datos OLTP de uso general: Tanto las grandes empresas como las startups utilizan PostgreSQL como almacén de datos principal para apoyar sus aplicaciones, productos y soluciones a escala de Internet.
  • Base de datos geoespacial: PostgreSQL admite objetos geográficos cuando se utiliza con la extensión PostGIS. También puede utilizarse como almacén de datos geoespaciales para sistemas de información geográfica (SIG) y servicios basados en la localización.
  • Pila de código abierto LAPP: PostgreSQL también puede ejecutar aplicaciones dinámicas y sitios web como parte de una sólida alternativa a la pila LAMP. LAPP significa Linux, Apache, PostgreSQL, Perl, PHP y Python.

¿Qué es SQL Server?

The SQL Server logo, showing the text next to a stylized gray and Microsoft deep red dynamic grid symbol.
Logotipo de SQL Server (Fuente de la imagen: Software Engineering Stack Exchange)

SQL Server fue desarrollado por Microsoft como un sistema de gestión de bases de datos relacionales que cuenta con una larga historia, treinta y dos años, para ser exactos. Microsoft SQL Server se considera un producto de software con la función principal de recuperar y cotejar datos a petición de otras aplicaciones de software.

Estas aplicaciones pueden ejecutarse en un ordenador diferente a través de una red o en el mismo ordenador. Microsoft SQL Server ha sido objeto de muchas actualizaciones a lo largo de los años, hasta convertirse en uno de los RDBMS mejor soportados y más reputados del mercado actual.

SQL Server debe gran parte de su popularidad a su creador, Microsoft. Cuando MS SQL Server estaba en su fase inicial, Microsoft ya se había establecido como un gigante de la tecnología.

SQL Server ha conseguido hacerse un hueco como sistema de gestión de bases de datos con su amplia gama de aplicaciones y herramientas que simplifican el trabajo con los datos. Su completa interfaz gráfica de usuario (GUI) permite trabajar de forma intuitiva y sencilla con la base de datos, a la vez que te permite generar estadísticas para tus informes.

Historia

He aquí un breve resumen de Microsoft SQL Server a lo largo de los años:

  • La evolución de SQL Server comenzó en 1988, cuando Microsoft colaboró con Sybase y Ashton-Tate para desarrollar un software de mantenimiento y creación de bases de datos que diera un impulso al mercado de bases de datos empresariales de Microsoft.
  • SQL Server 1.0 se lanzó en 1989. Por aquel entonces, aprovechaba la facilidad del administrador del sistema (SAF) para generar bases de datos. No tenía documentación, pero permitía a los usuarios ejecutar consultas SQL y establecer parámetros. El primer fragmento de código para Microsoft SQL Server fue escrito por Sybase.
  • Poco a poco, se fueron publicando nuevas versiones con más mejoras y características. SQL Server 2019, o Aries, es la última adición a un panteón de versiones completas, ya que se centra en hacer que las características de la base de datos sean aún más intuitivas de usar. Esto incluye opciones de clústeres de big data, que ofrecen a los usuarios la posibilidad de trabajar con conjuntos de datos gigantes.

Características principales

Basta de hablar de historia. Echemos un vistazo a un par de características fundamentales que hacen que SQL Server sea gran elección:

  • Sólida plataforma de seguridad: SQL Server te permite proteger tus datos en movimiento y en reposo con funciones integradas de protección de datos, clasificación de datos, alertas y supervisión. Con SQL Server, puedes encriptar fácilmente los datos sensibles y realizar cálculos ricos en datos encriptados, así como permitir el acceso personalizado a los datos basado en roles, con un complejo filtrado de filas.
  • Rendimiento líder en el sector: SQL Server presume de un rendimiento récord en Linux y Windows, ya que lidera sistemáticamente la carga de trabajo de almacenamiento de datos TPC-H, la carga de trabajo OLTP TPC-E y las pruebas de rendimiento de aplicaciones del mundo real. También puedes utilizar las capacidades de las bases de datos en memoria de SQL Server, como la tempdb optimizada para la memoria y la compatibilidad con la memoria persistente, para mejorar el rendimiento de tus cargas de trabajo de misión crítica.
  • Inteligencia en todos tus datos con clusters de big data: SQL Server te permite obtener información valiosa de todos tus datos consultando los datos de todo tu patrimonio de datos -Azure SQL Database, SQL Server, Teradata, MongoDB, Azure Cosmos DB y muchos más- sin tener que replicar o mover los datos. Incluso puedes construir un lago de datos compartido combinando datos estructurados y no estructurados en SQL Server y accediendo a los datos mediante Spark o T-SQL.

Casos de uso

La extensibilidad y el rendimiento de SQL Server permiten que se aproveche en una amplia gama de casos de uso como:

  • Servicios de replicación: Los servicios de replicación de SQL Server se utilizan para armonizar y replicar los objetos de la base de datos, ya sea como un subconjunto de los objetos presentes o en su totalidad. Los servicios de replicación se adhieren a un modelo de suscriptor/editor, es decir, las modificaciones son enviadas por un servidor de base de datos (editor) y son recogidas por otros (suscriptores).
  • Servicios de notificación: Los servicios de notificación se lanzaron originalmente como un complemento posterior al lanzamiento de SQL Server 2000. Es un mecanismo para crear modificaciones basadas en datos, que se envían a los suscriptores de los servicios de notificación.
  • Servicios de aprendizaje automático: Los servicios de aprendizaje automático de SQL Server operan dentro de la instancia de SQL Server, lo que permite a las personas realizar análisis de datos y aprendizaje automático sin tener que mover los datos a través de la red o verse obstaculizados por la memoria de sus ordenadores.
  • Servicios de análisis: Los servicios de análisis de SQL Server (SSAS) añaden capacidades de minería de datos y OLAP para las bases de datos de SQL Server. El motor OLAP ofrece soporte para los modos de almacenamiento de datos de procesamiento analítico relacional en línea (ROLAP), procesamiento analítico multidimensional en línea (MOLAP) y procesamiento analítico híbrido en línea (HOLAP). Los servicios de análisis de SQL Server también admiten XML para el estándar de análisis como protocolo de comunicación fundamental.

PostgreSQL vs SQL Server: Comparación cara a cara

Ahora que tenemos una idea de los aspectos más destacados de SQL Server y PostgreSQL, vamos a profundizar en las diferencias entre ambos. Puedes utilizar los factores que se mencionan a continuación para identificar qué sistema de gestión de bases de datos se adapta mejor a tus necesidades.

Disponibilidad

PostgreSQL ofrece un amplio abanico de soluciones para garantizar una alta disponibilidad a los usuarios, como el envío de registros con escritura anticipada, la conmutación por error de disco compartido, la partición de datos y varios métodos de replicación. Herramientas como EDB Postgres Failover Manager proporcionan una conmutación por error automática para garantizar la alta disponibilidad mediante la supervisión e identificación de los fallos de la base de datos.

Por otro lado, SQL Server incluye varias herramientas de alta disponibilidad, como el envío de registros, los clusters de conmutación por error y la replicación. Los grupos de disponibilidad de SQL Server, que funcionan las veinticuatro horas del día, proporcionan una conmutación por error automática cuando se cumplen determinadas condiciones. Sin embargo, sólo se puede acceder a esta oferta en la edición empresarial de SQL Server.

Estructura de datos y tablas

PostgreSQL ofrece a sus usuarios el lenguaje de programación procedimental PL/pgSQL para que sea más sencillo. Las funcionalidades adicionales al SQL estándar en PostgreSQL incluyen tipos definidos por el usuario, módulos personalizados, extensiones, soporte de JSON y opciones adicionales para triggers y otras funcionalidades.

SQL Server utiliza T-SQL, que se parece al SQL estándar. T-SQL incluye soporte adicional para el procesamiento de datos y cadenas, la programación procedimental y las variables locales.

Si quieres entender mejor cómo los sistemas almacenan en caché y procesan las peticiones, PostgreSQL aísla los procesos tratándolos como procesos separados del sistema operativo. Cada base de datos tiene una memoria independiente y ejecuta su proceso. Esto facilita la supervisión y la gestión, pero al mismo tiempo dificulta el escalado de varias bases de datos.

SQL Server utiliza una reserva de memoria intermedia que puede limitarse o aumentarse en función de las necesidades de procesamiento. Todo el trabajo se lleva a cabo en un único pool, sin páginas múltiples, a diferencia de PostgreSQL.

Tanto PostgreSQL como SQL Server ofrecen soporte para las tablas temporales, ya que permiten almacenar resultados intermedios de la lógica compleja ramificada y los procedimientos complejos. Las tablas temporales pueden ayudar a mejorar la organización y el rendimiento de la base de datos al aislar la información intermedia de la esencial.

Desfragmentación

Cuando los desarrolladores modifican diferentes partes de una base de datos SQL, las modificaciones tienen lugar en diferentes puntos del sistema y pueden ser difíciles de seguir, leer y gestionar. Por ello, el mantenimiento debe incluir también la desfragmentación, es decir, el proceso de cotejar la base de datos actualizada asignando índices, generando nuevas páginas y revisando la estructura. De este modo, las bases de datos pueden liberar el espacio de disco que no se utiliza correctamente para que la base de datos pueda funcionar a un ritmo más rápido.

PostgreSQL escanea las tablas de una capa de datos para buscar filas vacías y se deshace de los elementos innecesarios. Al hacerlo, el sistema libera el espacio del disco. Sin embargo, este método necesita mucha CPU y puede afectar al rendimiento de la aplicación.

Por otro lado, SQL Server proporciona un recolector de basura eficiente que no genera más de un 15-20% de sobrecarga. Técnicamente, los desarrolladores también pueden ejecutar los recolectores de basura de forma continua, porque es así de eficaz. En resumen, SQL Server ofrece más métodos de desfragmentación que PostgreSQL.

Índices

La forma en que una base de datos aborda los índices es una prueba de su utilidad, porque los índices se utilizan para localizar datos sin buscar una fila concreta. También puedes utilizar los índices para referirte a varias columnas o filas. Puedes asignar el mismo índice a archivos, presentarlos en diferentes lugares de la base de datos y reunir todas estas piezas con una sola búsqueda.

PostgreSQL admite la organización de tablas basada en índices, pero las primeras versiones no utilizaban actualizaciones automáticas de los índices. También te permite consultar muchos índices en una sola búsqueda, lo que significa que puedes descubrir mucha información.

SQL Server proporciona una rica funcionalidad automatizada para la gestión de índices. Pueden organizarse en clusters y mantener el orden adecuado de las filas sin intervención manual. SQL Server también admite índices parciales y búsquedas de índices múltiples.

Características

PostgreSQL no ofrece un programador de tareas integrado, a diferencia de otras bases de datos SQL. Las tareas repetitivas necesitan herramientas externas como cron, pgAgent o pg_cron en Linux, y SQLBackupAndFTP o el programador de tareas en Windows.

Las tareas en SQL Server, en cambio, pueden programarse fácilmente a través de SQL Server Management Studio.

PostgreSQL dispone de un control de concurrencia multiversional (MVCC) bien desarrollado para abordar varios procedimientos al mismo tiempo. MVCC ofrece instantáneas de la información de la base de datos para evitar que se muestren las incoherencias causadas por las transacciones simultáneas o el bloqueo de datos que tiene lugar en otros sistemas de bases de datos. PostgreSQL aprovecha el aislamiento de instantáneas serializable (SSI) para garantizar el aislamiento de las transacciones.

SQL Server tiene un sistema de control de concurrencia multiversal menos desarrollado y depende del bloqueo de datos para evitar errores por transacciones simultáneas, por defecto. SQL Server también ofrece una función de concurrencia optimista, que supone que estos problemas ocurren raramente. Así, en lugar de bloquear una fila, se verifica contra una versión en caché para averiguar si se ha producido algún cambio.

Particionamiento y fragmentación

Cuando el aumento del rendimiento es esencial para las bases de datos más grandes y has llevado al máximo tus procedimientos almacenados, y tu hardware también se ha actualizado, necesitarás distribuir el trabajo entre varios servidores. Aquí es cuando entran en juego el particionamiento y la fragmentación.

Aunque tanto el sharding como el particionamiento consisten esencialmente en dividir un gran conjunto de datos en subconjuntos más pequeños, el sharding implica que los datos se reparten entre varios ordenadores, mientras que el particionamiento no.

A partir de la versión 10.0, PostgreSQL admite el particionamiento declarativo: partición por rango, lista o hash.

MS SQL Server admite el particionamiento horizontal: dividir una tabla con muchas filas en varias tablas con menos filas.

MS SQL Server también admite la partición a través de la federación. las «vistas particionadas federadas» son vistas en las que las tablas se reparten entre distintos servidores para equilibrar la carga de procesamiento.

Para recuperar los registros de los servidores, se necesitan ciertos comandos. Estos comandos se denominan vistas particionadas distribuidas. Utilizan las típicas sentencias SQL, junto con la palabra clave UNION, para extraer los datos de todos los servidores distribuidos.

Asimismo, se pueden utilizar sentencias DML (INSERT, UPDATE y DELETE) cuando se observan reglas específicas en las tablas subyacentes. Además, ten en cuenta que las vistas particionadas federadas sólo son compatibles con las ediciones empresariales.

Aunque las vistas particionadas federadas pueden implementarse en cualquier otra edición, ya que no hay una sintaxis distintiva para ellas, no se reconocerán como vistas particionadas federadas. Las reglas para reconocer la vista como particionada entre servidores sólo están disponibles con las ediciones empresariales.

Utilizando esta técnica de partición, suele aumentar el rendimiento entre un 20% y un 30% en la mayoría de las aplicaciones. Por tanto, es una herramienta muy útil si tu empresa gestiona muchos datos.

Replicación

Mientras que el particionamiento consiste en dividir la base de datos en subconjuntos más pequeños y distribuir las tablas particionadas en diferentes nodos, la replicación consiste en copiar la base de datos en varias bases de datos para proporcionar una mirada rápida y un menor tiempo de respuesta.

PostgreSQL ofrece replicación primaria-secundaria. Puede ser asíncrona o síncrona. Los registros de escritura anticipada (WAL) permiten compartir los cambios con los nodos de réplica, lo que permite la replicación asíncrona.

Los otros tipos de réplicas incluyen principalmente la réplica lógica, la réplica en flujo y la réplica física.

  • La replicación lógica sigue un modelo de publicación y suscripción. Los cambios se basan en la identidad de la réplica de datos, como su clave primaria, en lugar de su ubicación física.
  • La replicación por streaming transmite esencialmente los WAL en cuanto se crea el archivo, lo que permite actualizar rápidamente los servidores en espera, en lugar de esperar a que se llene el archivo.
  • Por último, la replicación física suele implementarse con archivos y directorios, sin tener en cuenta el contenido dentro de la ubicación física. PostgreSQL no ofrece la replicación multiprimaria de forma nativa, pero puede ejecutarse con la ayuda de otras herramientas de terceros.

La replicación de SQL Server duplica los datos de un servidor editor a un suscriptor. Puede ser asíncrona o asincrónica en función de la edición de SQL Server. Ofrece tres tipos de réplicas, a saber: la réplica transaccional, la réplica de instantáneas y la réplica de fusión.

  • La replicación transaccional suele implementarse en entornos de servidor a servidor, en los que las modificaciones se entregan desde el editor al suscriptor a medida que se producen.
  • La replicación por fusión suele implementarse en situaciones en las que pueden producirse conflictos, para entornos de servidor a cliente, o cuando los datos pueden modificarse y seguirse en el suscriptor o en el publicador y se sincronizan posteriormente.
  • La replicacióninstantánea se implementa cuando los datos se actualizan con poca frecuencia, no necesitan ser alterados de forma incremental, o cuando los datos se duplican exactamente como aparecen en un momento determinado. Además, la edición empresarial ofrece la replicación peer-to-peer como solución alternativa a la replicación de nodos múltiples.

Lenguaje y sintaxis

PostgreSQL está escrito en lenguaje C, y MS SQL está escrito en C y C++. En cuanto a la vinculación con el lenguaje, PostgreSQL es muy fácil de utilizar y conectar gracias a su API externa libpq, que está muy bien diseñada y documentada.

Sin embargo, las vinculaciones de lenguaje externas de SQL Server pueden depender de varios otros factores. Es posible que tengas que instalar controladores adicionales o crear clases para almacenar los datos que se consultan; por tanto, tendrías que saber cómo son los datos en tiempo de compilación. Probablemente tendrías que consultar la documentación, y el seguimiento podría llevar bastante tiempo.

En cuanto a las características del lenguaje procedimental, tanto PostgreSQL como SQL Server ofrecen un sólido soporte. PostgreSQL admite el tipo de datos JSON y los usuarios pueden utilizar fácilmente Python, Java, PHP, Perl y R con SQL, ya que están respaldados por la función de lenguaje procedimental.

Si bien SQL Server ofrece soporte, esta característica aún no ha sido mejorada, ya que se producen ligeros errores, y puede llevar algún tiempo implementarla, ya que es lenta. El usuario tiene que compilar primero el código en un archivo .dll.

En PostgreSQL, no es necesario crear primero un archivo . dll. Además, PostgreSQL proporciona un gran número de expresiones regulares (regex) como base para el trabajo analítico.

Comparativamente, MS SQL Server tiene menos regex y soporta ciertos comandos como la subcadena y el índice de patrones, que pueden no ser tan buenos como PostgreSQL.

Rendimiento

En cuanto al rendimiento, PostgreSQL supera a SQL Server en varios aspectos. Hemos tocado el tema de la partición, y aunque tanto PostgreSQL como SQL Server ofrecen partición, PostgreSQL la ofrece gratuitamente, con más eficacia.

PostgreSQL también ofrece una mejor concurrencia, que es una característica importante cuando varios procesos pueden acceder y alterar datos compartidos al mismo tiempo. La característica MVCC de PostgreSQL garantiza una menor posibilidad de bloqueo, ya que sólo se bloquea si dos consultas intentan modificar la misma fila al mismo tiempo y serializar las actualizaciones realizadas en esa fila.

El bloqueo MVCC adquirido para consultar datos no entra en conflicto con los bloqueos adquiridos para escribir datos. Esto minimiza la contención de bloqueos y proporciona un mejor rendimiento en entornos multiusuario.

Por otro lado, SQL Server tiene una concurrencia poco desarrollada, y algunos procesos podrían incluso bloquearse. A diferencia de la función MVCC, cada vez que se actualiza una fila, se crea una nueva versión de la misma, en lugar de sobrescribirla, y ambas se mantienen. Poco a poco, las versiones antiguas pasan a una base de datos del sistema llamada tempdb. Sin embargo, su concurrencia tiene un largo camino por recorrer.

PostgreSQL también ofrece soporte de indexación para varias extensiones, lo que aumenta el rendimiento de la base de datos.

Por otro lado, los servidores SQL todavía tienen que mejorar su implementación de indexación, y aún no han incluido las matrices, uno de los tipos de variables más utilizados.

Precios

PostgreSQL se publicó bajo la licencia PostgreSQL, una licencia liberal de código abierto. El Grupo de Desarrollo Global de PostgreSQL mantiene su compromiso de hacer que PostgreSQL esté disponible como software libre y de código abierto para siempre. No hay planes para alterar o liberar PostgreSQL bajo una licencia diferente.

MS SQL Server se publicó bajo una licencia comercial como parte de los productos de Microsoft. A principios de 2016, la base de datos se puso a disposición de los desarrolladores como herramienta gratuita, pero sólo admite un procesador y 1 GB de memoria máxima. Aunque es gratuita, carece de varias funciones que puedes necesitar para una empresa. Es posible que tengas que pagar 899 dólares por servidor si necesitas más servidores. Últimamente, la edición empresarial de SQL Server cuesta 13.748 dólares.

Escalabilidad

La capacidad del sistema de base de datos de seguir funcionando bien cuando se aumentan los datos para satisfacer las necesidades de los usuarios sin comprometer su rendimiento se llama escalabilidad.

PostgreSQL ofrece muchas características en términos de escalabilidad y puede emplear varios núcleos de CPU para implementar paralelamente las consultas con rapidez.

SQL Server también puede utilizar núcleos, sin embargo, la versión estándar está limitada a veinticuatro núcleos de CPU. La versión empresarial permite el uso de núcleos de CPU ilimitados. SQL Server también posee una función de hiperescala, en la que puedes determinar los límites inferior y superior que te permiten escalar hacia abajo y hacia arriba según las necesidades.

Seguridad

Con el aumento de los robos de datos, la piratería y el pirateo, la seguridad se convierte en el requisito más importante de los sistemas de bases de datos. Sin embargo, tanto SQL Server como PostgreSQL proporcionan una excelente encriptación y autenticación de datos.

Métodos de autenticación

En el lado del servidor, PostgreSQL ofrece métodos avanzados de autenticación, como el protocolo ligero de acceso a directorios (LDAP) y el módulo de autenticación enchufable (PAM), que reducen potencialmente la superficie de ataque de los servidores de bases de datos PostgreSQL. Otras mejoras de seguridad a nivel de servidor en PostgreSQL incluyen la dirección de escucha del servidor PostgreSQL, la autenticación basada en el host y la autenticación de certificados.

En MS SQL Server, hay dos características de mejora de la seguridad a nivel de servidor: El modo de autenticación de Windows y el modo mixto, que incluye un proceso de autenticación tanto de Windows Server como de MS SQL Server. El modelo de seguridad de MS SQL Server es una estrecha integración entre el modo de autenticación de Windows Server y la base de datos.

Cifrado de datos

PostgreSQL proporciona encriptación de datos y te permite utilizar certificados de capa de conexión segura (SSL) cuando tus datos viajan a través de la web o de las carreteras de la red pública. También te permite implementar herramientas de autenticación de certificados de cliente como opción. Además, puedes utilizar funciones criptográficas para almacenar datos encriptados en PostgreSQL que admiten tanto encriptaciones de clave simétrica como de clave pública.

En MS SQL Server, las funciones de encriptación de datos disponibles incluyen la encriptación transparente de datos (TDE), la encriptación siempre y la encriptación a nivel de columna. La TDE utiliza el algoritmo del estándar de cifrado avanzado (AES) para cifrar los archivos físicos, que incluyen tanto los datos como los archivos de registro. La función siempre encriptada te permite encriptar determinadas columnas en ambos estados, en reposo o en movimiento (es decir, los datos permanecen encriptados también en la memoria).

Privilegios a nivel de usuario

Además, puedes gestionar diferentes usuarios junto con sus permisos (lectura, escritura) tanto en PostgreSQL como en SQL Server.

PostgreSQL incluye privilegios a nivel de usuario como asignación de roles, privilegios a nivel de tabla mediante roles y herencia de roles. La opción de auditoría te permite revisar las actividades de acceso a datos de los usuarios y grupos en tu base de datos, lo que proporciona una capa de seguridad adicional.

SQL Server consigue esto mediante grupos de usuarios y roles. Los permisos de los recursos se conceden directamente a la cuenta de usuario, y los permisos se heredan de un recurso padre.

También puedes identificar los problemas de concurrencia, las consultas de larga duración y las métricas habituales de la carga de trabajo mediante la supervisión y la auditoría de las actividades en SQL Server.

Almacenamiento

El almacenamiento es uno de los factores clave del rendimiento de cualquier sistema de base de datos. Con el aumento de la potencia de procesamiento de los servidores y el soporte de memoria a gran escala, se hace casi imprescindible que las bases de datos permitan una mayor capacidad de almacenamiento en el sistema.

PostgreSQL es una base de datos relacional de objetos, mientras que Microsoft SQL Server es un sistema de base de datos relacional. Esto significa que PostgreSQL ofrece tipos de datos más complejos y permite la herencia de objetos, aunque también hace que trabajar con PostgreSQL sea más complejo. Tiene un único motor de almacenamiento compatible con ACID e inicializa un nuevo proceso del sistema con su asignación de memoria para cada conexión de cliente. Por tanto, con el aumento de conexiones de clientes en los sistemas, es necesario asignar más memoria.

SQL Server 2016 y superiores pueden utilizar un máximo de cien ordenadores o máquinas virtuales con un máximo de cinco instancias ejecutadas por ordenador. Sin embargo, esto también depende de su edición. La edición empresarial permite el máximo ancho de banda, por lo que se concederán más capacidades de almacenamiento. Mientras que la última edición estándar permite el uso de hasta 128 GB de memoria, en la versión empresarial puedes utilizar memoria ilimitada.

Soporte y comunidad

PostgreSQL publica regularmente versiones actualizadas de forma gratuita. Recientemente, el Grupo de Desarrollo Global de PostgreSQL ha publicado una actualización de todas las versiones soportadas del sistema de bases de datos, corrigiendo más de 55 errores notificados en los últimos tres meses. PostgreSQL cuenta con una amplia comunidad de desarrolladores, empresas de terceros y entusiastas que proporcionan soporte y también intentan desarrollar el sistema solucionando los errores notificados.

SQL Server lanza una nueva versión cada pocos años. Los costes de soporte dependen de los términos y condiciones de la licencia. Microsoft SQL Server también cuenta con una comunidad de soporte, en la que analistas de bases de datos, desarrolladores, administradores de sistemas o cualquier persona interesada en la plataforma pueden hacer preguntas, o aprender más sobre SQL Server a través de podcasts y webcasts como la Radio SQL Server con Guy Glantser y Eitan Blumin, en la que los usuarios llegan a saber mucho sobre SQL Server y su compatibilidad con otras herramientas de Microsoft.

Tanto PostgreSQL como SQL Server pueden equiparse con plugins. El precio y la compatibilidad dependen del plugin. Los plugins pueden ser útiles para gestionar, limpiar, hacer copias de seguridad de tu base de datos, o más.

Por ejemplo, Adminer es una herramienta de gestión de datos y puede utilizarse para gestionar datos tanto en PostgreSQL como en MS SQL Server. También se pueden utilizar otros plugins de bases de datos para mejorar la eficiencia de tu base de datos, a saber: WP-Optimize, Better Search Replace, WP Database Backup, por nombrar algunos. Cuando actualizas cualquier sistema de base de datos, puede haber costes de migración de datos, pero esto es normal para cualquier otro DBMS estándar.

Seeing unexpected behavior? The PostgreSQL community takes pride in releasing software that will reliably store your data. If you believe you've discovered a bug, please click the button below and follow the instructions on how to submit a bug.
Mensaje de descubrimiento de errores de PostgreSQL (Fuente de la imagen: PostgreSQL)

Disparadores y eventos

PostgreSQL tiene varios desencadenantes avanzados que puedes elegir en función de tu caso de uso. Los eventos desencadenantes soportados son AFTER, BEFORE y INSTEAD OF, y pueden utilizarse para eventos INSERT, UPDATE y DELETE para manipular datos. Como ya se ha mencionado, PostgreSQL puede ejecutar estos desencadenantes de forma dinámica y no necesita compilarlos en un archivo .dll antes de su ejecución. Las funciones anteriores pueden utilizarse para ejecutar una consulta compleja cuando se invoque el desencadenante.

SQL Server ofrece varios desencadenantes para distintos tipos de eventos de la base de datos, a saber, desencadenantes DML, desencadenantes DDL y desencadenantes de inicio de sesión:

  • Los triggers DML o triggers de lenguaje de manipulación de datos son triggers utilizados para manipular datos, insertando, actualizando o eliminando registros.
  • Los triggers DDL son para eventos del lenguaje de definición de datos (DDL), como crear, eliminar o alterar una base de datos.
  • Los disparadores de inicio de sesión se utilizan para eventos de inicio de sesión, como cuando se establece una sesión de usuario. Estos desencadenantes se disparan después de la autenticación exitosa y antes de establecer la sesión de usuario. Son útiles para auditar y controlar la actividad de inicio de sesión.

Vistas

Las vistas son esencialmente tablas virtuales que no almacenan datos físicamente. Suelen utilizarse con fines de seguridad para limitar el acceso de los usuarios a los datos. Tanto PostgreSQL como SQL Server admiten vistas actualizables.

Sin embargo, en PostgreSQL, las actualizaciones no se producen automáticamente a menos que se cumplan los siguientes requisitos previos:

  • Debe haber una sección en la cláusula FROM en la consulta de esa vista. La sección puede ser de una tabla o de otra vista actualizable.
  • No debe haber funciones de ventana, funciones agregadas o funciones de devolución de conjuntos en la lista de selección.
  • La consulta no debe incluir los comandos HAVING, LIMIT, DISTINCT, WITH, INTERSECT, EXCEPT, OFFSET o LIMIT en el nivel superior.

En resumen, las vistas creadas con consultas simples pueden actualizarse, mientras que es casi imposible actualizar las creadas con consultas complejas. En cambio, las vistas complejas pueden actualizarse mediante reglas. Aunque PostgreSQL no ofrece la posibilidad de ejecutar vistas materializadas, tiene un módulo llamado matviews, que puede ayudar a reconstruir cualquier vista materializada.

En SQL Server, las vistas pueden actualizarse automáticamente, y se admiten tanto las definidas por el usuario como las definidas por el sistema. Además, dos vistas de tabla se actualizan al mismo tiempo si tienen claves diferentes y la sentencia de actualización no implica a más de una tabla.

Además, el usuario puede utilizar disparadores para actualizar vistas complejas. SQL Server también proporciona facilidades para ejecutar vistas materializadas, también conocidas como vistas indexadas. A diferencia de las vistas materializadas de otras bases de datos relacionales, las vistas indexadas se sincronizan con los datos subyacentes y, por tanto, se actualizan automáticamente.

Defectos de SQL Server y PostgreSQL

Aunque hemos hablado de todos los detalles de PostgreSQL y SQL Server, ambos tienen sus inconvenientes.

Aunque PostgreSQL es gratuito, no es propiedad de una sola organización. Por ello, le ha costado hacerse un hueco entre las masas, a pesar de tener muchas características. PostgreSQL también se centra en la compatibilidad más que en la velocidad. Por ello, las modificaciones creadas para mejorar la velocidad exigen más trabajo.

Por otro lado, SQL Server ha sido criticado a menudo por su pobre interfaz de usuario. Tiene complejas funciones de ajuste del rendimiento y no tiene soporte nativo para el control de fuentes. Si lo utilizas para tu empresa, la versión para empresas puede hacerte un agujero en el bolsillo. Sólo la edición empresarial de SQL Server 2019 cuesta 13.748 dólares, lo que equivale a trece habitaciones de muebles de Ikea Además, las licencias pueden ser bastante difíciles de comprender y cambian continuamente.

Si PostgreSQL y SQL Server no son de tu agrado, puedes probar MongoDB o MariaDB para tu caso de uso único.

MongoDB es un programa de base de datos orientado a los documentos, de uso gratuito y multiplataforma, que puede aprovechar fácilmente los documentos de tipo JSON.

MariaDB, por otro lado, es una bifurcación de MySQL con soporte comercial, cuyos motores de almacenamiento enchufables y creados a propósito admiten cargas de trabajo que generalmente requieren una gran variedad de bases de datos diferentes.

PostgreSQL vs SQL Server: ¿Qué base de datos deberías elegir?

Tanto PostgreSQL como SQL Server son bases de datos relacionales muy utilizadas, pero ¿quién se lleva la palma? De las comparaciones anteriores, PostgreSQL supera a SQL Server en varios escenarios. No sólo es de código abierto y gratuito, sino que también tiene varias características que están fácilmente disponibles y pueden implementarse automáticamente, a diferencia de Microsoft SQL Server.

Además, PostgreSQL tiene un sistema de gestión de la concurrencia más adecuado. Puede manejar brillantemente los casos en los que varios procesos pueden acceder y modificar datos compartidos al mismo tiempo.

Si tienes una pequeña empresa, PostgreSQL podría ser una opción adecuada para ti, ya que es gratuito y ofrece varias funciones útiles para gestionar los datos. Es fácil de instalar y puede implementarse en casi todo tipo de sistemas operativos. Sin embargo, para las empresas con una gran inversión en la pila de Microsoft SQL Server, éste tiene sus ventajas sobre PostgreSQL.

Resumen

En definitiva, tanto PostgreSQL como SQL Server son bases de datos funcionales y polifacéticas. Mientras que PostgreSQL se puede utilizar para casi cualquier sistema operativo y es adecuada para las pequeñas empresas que requieren la máxima funcionalidad, SQL Server es la mejor para las grandes empresas, especialmente las que requieren el uso de productos de Microsoft.

En este artículo, hemos cubierto las principales diferencias entre PostgreSQL y SQL Server, y sus funciones. La elección «correcta» se reducirá finalmente a la forma en que pienses dirigir tu empresa.

Entre PostgreSQL y SQL Server, ¿qué base de datos piensas utilizar para tu próximo proyecto y por qué? ¡Nos encantaría conocer tu opinión! Compártelas en la sección de comentarios más abajo.

Amit Phaujdar

Freelance content writer by day, binge-watcher by night, with 200+ published articles online to date.