PostgreSQL vs SQL Server

Dificultad: Fácil
Tiempo de Lectura: 10 minutos

Estos dos grandes motores de base de datos vienen siendo comparados desde hace ya varios años dadas sus similitudes y gran performance.

Los mismos tienen una gran trayectoria en el mercado, por un lado SQL Server fue lanzado en 1989, mientras que PostgreSQL lo hizo unos años más tarde en el 1996.

Hoy desde Guiadev vamos a hacer un nuevo versus entre PostgreSQL vs SQL Server, sigue leyendo.

Principales diferencias entre PostgreSQL vs SQL Server

Como es bien sabido ya, la principal característica que separa estos dos motores es su licencia. Mientras SQL Server es de código privado bajo licencia por Microsoft, PostgreSQL es de código abierto y con licencia libre.

Esto implica grandes discordancias entre ambos con temas como la seguridad, soporte y mantenimiento, temas que veremos más en profundidad a lo largo de este artículo.

Otra de las principales diferencias está en las plataformas que soportan. Primeramente SQL Server solo trabajaba bajo Windows aunque luego incorporó Linux dentro de sus plataformas soportadas. Sin duda en este tema PostgreSQL le lleva la ventaja dado que soporta una gran variedad como: FreeBSD, HP-UX, Linux, NetBSD, OpenBSD, OS X, Solaris, Unix y Windows.

Programación Procedimental

SQL (Structured Query Language) es un lenguaje que en la mayoría de los casos es más que suficiente para la realización de consultas a nuestra base de dato. Pero hay ocasiones en las que necesitamos realizar procedimientos más avanzadas donde se involucra análisis de datos y algoritmos complejos entre otros.

PostgreSQL es un claro ganador en el tema de procedimientos ya que tiene un amplio soporte para distintos lenguajes:

  • PL/PGSQL
    Este es el lenguaje de procedimiento navito de PostgreSQL y es muy similar a PL/SQL de Oracle.
  • PL/V8
    V8 es el motor de JavaScript que utiliza Google Chrome y es posible integrarlo a PostgreSQL. Este motor otorga una velocidad y estabilidad similar a C compilado.
  • PL/Python
    Permite utilizar Python en su totalidad, aprovechando las librerías de este. Se puede integrar tanto Python como Python2 y Python3.
  • PL/R
    Junto a R podremos realizar importantes análisis estadísticos en nuestra base de datos.
  • PL/Perl, Java, Lua, sh, Tcl, Ruby y PHP

En SQL Server tenemos lo que se llama TRANSACT-SQL como lenguaje de procedimiento.

Si bien es un lenguaje potente y nos permite realizar una gran variedad de tareas contra la base de datos, este tiene sus limitaciones. Aunque en las versiones más recientes también podemos implementar .NET, R, Python o Java.

Tipos de datos

Un error muy común es creer que todos los motores de base de datos utilizan los mismos tipos de datos, como INT, CHAR, DATE, etc. Pero esto no es así. Existen algunas diferencias entre estos que pueden generar distinto tipo de incompatibilidades.

PostgreSQL

CHAR, VARCHAR y demás…

En la documentación de postgreSQL se recomienda hacer uso del tipo de dato TEXTO. Este guarda los datos en formato UTF-8 universal permitiendo almacenar un string de hasta 1GB.

Además soporta todas las operaciones que permite PostgreSQL como concatenar y sub stringing, búsqueda regex, matching y splitting, búsqueda de texto completo y transformación de caracteres entre otros.

Tipos para Hora y Fecha

Este motor de base de datos nos ofrece los tipos DATE, TIME, TIMESTAMP y TIMESTAMP con Zona Horaria. Estos funcionan de la forma esperada y ofrecen gran precisión, además de permitir valores especiales como Infinity y -Infinity.

Esto tal vez parece un poco absurdo pero a nivel de lógica puede ser muy útil. Otro detalle super útil es que ofrece INTERVAL, esto significa que podemos almacenar intervalos de tiempo, tanto positivos como negativos. Por otra parte permiten también conversiones desde y hacia el formato Linux y conversiones de string a fecha y viceversa.

Array

En PostgreSQL los Array son soportados como primer tipo de dato. Esto significa que los campos de las tablas, las variables en PL/PGSQL, los parámetros de las funciones y más pueden ser Arrays. Además pueden contener cualquier tipo de dato, incluso Arrays!

Json y JsonB

Ambos son soportado por PostgreSQL en su totalidad, incluyendo varias funciones para el manejo de los mismos. Estas funciones incluyen transformar tablas a JSON y viceversa, recuperar y crear JSON. Además permite trabajar perfectamente en conjunto con PL/V8.

Json y JsonB son muy similares, ambos aceptan datos idénticos de entrada. Su principal diferencia está en la performance. Json por un lado se almacena tal cual está, esto lleva a que haya que realizar un reparse en cada ejecución.

Mientras que en Jsonb la información se guarda en una versión de Binary descompuesto, esto lo hace más lento en el almacenado pero aumenta su velocidad significativamente al obtener los datos.

Json al mantener los datos tal cual también va a almacenar espacios en blanco y mantener el orden de las claves en los objetos Json y los datos duplicados.

Por el contrario, Jsonb no guarda espacios en blanco, no mantiene el orden de las claves y no guarda elementos duplicados. En caso de haber claves duplicadas se va a preservar el ultimo elemento.

NUMERIC y DECIMAL

PostgreSQL soporta 131.072 dígitos antes de la coma y 16.383 dígitos después de la coma. Esto se vuelve importante cuando necesitamos un alto grado de precisión y no podemos permitirnos redondeos. Ejemplos que necesiten una alta precisión pueden ser Sistemas para Bancos o datos a nivel espacial.

SQL Server

CHAR, VARCHAR y demás..

En SQL Server también existe el tipo de dato TEXT y NTEXT permitiendo hasta 2 GB, pero al parecer estos serán removidos en futuras versiones. Por lo que nos deja con CHAR, VARCHAR y sus versiones N. VARCHAR en su maximo permite únicamente hasta 8.000 Bytes y una baja performance en comparación al tipo TEXT de PostgreSQL .

Tipos para Hora y Fecha

SQL Server ofrece los tipos DATE, DATETIME, SMALLDATETIME, TIMESTAMP, DATETIME2 y DATETIMEOFFSET, esta última permite almacenar la fecha/hora en versión UTC (Zona horaria). DATETIME2 y DATETIMEOFFSET están disponibles en las versiones más recientes. La diferencia entre DATETIME y DATETIME2 es el soporte para nanosegundos, donde esta última guarda 100 nanosegundos.

SQL Server no permite datos como infinity o interval, lo cual en algunas ocasiones puede ser una desventaja. Por otra parte y este si es un dato realmente importante y que nos puede dar varios dolores de cabeza, es que la conversión lleva una «constante de conversión», si como lo escuchaste!
Y si no utilizas el famoso 126 al convertir la fecha esta te dará una fecha incorrecta. Así es como debes convertir las fechas si usas SQL Server:

SELECT CONVERT(datetime, ‘2001-02-03T12:34:56.789’, 126); –Esto devuelve 2001-02-03 12:34:56:789

Array..?

Este motor de Base de Datos no permite almacenar Arrays, pero tiene un equivalente qué es Table Valued disponible desde la versión 2005 en adelante.

Estos Table Valued se declaran utilizando tablas definidas por el usuario sin necesidad de crear tablas temporales en la base de datos. Según Microsoft funcionan como Arrays en OLE DB y ODBC, esto ofrece más flexibilidad y permite una mejor integración con Transact-SQL.

JSON

SQL Server soporta JSON desde su versión 2016 y superiores, permitiendo combinar conceptos de base de datos NoSQL. Este admite parsear texto Json, leer y modificar datos, transformar Arrays de objetos Json a formato tabla y por supuesto iterar con Transact-SQL además de convertir los resultados de este a Json.

NUMERIC y DECIMAL

SQL server permite únicamente 38 decimales de precisión en total, una cantidad bastante menor en comparación con los valores que nos permite asignar PostgreSQL.

Performance

La Performance es un tema muy discutido entre estos dos grandes motores de base de datos en distintos foros y blogs, en el cual nunca hay un claro ganador.

A nivel de performance entre PostgreSQL vs SQL Server siempre va a depender de para que usemos nuestra base de datos, que tareas realicemos con más frecuencia y los tipos de datos que almacenemos.

Como dicen los grandes expertos en Bases de Datos: «el problema no es el motor de base de datos que estemos utilizando, el problema es cómo lo estamos utilizando». Siempre tenemos que tener en cuenta la forma en que realizamos las consultas, la arquitectura de nuestra base de datos y procedimientos.

Al tener distintas características PostgreSQL vs SQL Server, debemos saber encontrar la forma en la que funciona mejor para cada uno de ellos. No podemos realizar las mismas consultas en PostgreSQL que en SQL Server porque no estaríamos aprovechando las cualidades de cada uno.

Por ejemplo, PostgreSQL tiene un mejor sistema de manejo de concurrencia y permite que múltiples procesos puedan manejar y modificar datos al mismos tiempo. Mientras que SQL Server puede bloquear muchos de ellos.

Por otra parte SQL Server soporta Multithreading a nivel de CPU y en caso de ser posible va a ejecutar partes de una consulta en otro hilo. En el caso de PostgreSQL utiliza multiprocessing donde diferentes conexiones corren en distintos procesos e incluso en diferente CPU.

Por supuesto en esta comparativa estamos hablando de SQL Server en su versión Enterprise, ya que no tendría sentido comparar una versión limitada con las posibilidades que ofrece PostgreSQL de forma gratuita.

Seguridad

A nivel de seguridad siempre se ha dicho que las aplicaciones de código privado son más seguras que código abierto, pero esto no es nada más que una creencia errónea. Claro está que Windows es el sistema operativo con más vulnerabilidades o al menos el mas hackeado.

Que el código sea público no significa que sea más fácil de vulnerar, por el contrario más gente tiene acceso a él y puede reportar los fallos de seguridad existentes. Esto no sucede en SQL Server, ya que al ser código privado no sabemos realmente cómo trabaja detrás y si tiene vulnerabilidades o no.

Por supuesto que SQL Server tiene sus ventajas a nivel de seguridad, en su versión 2019 por ejemplo añadió mejoras a Always Encrypted, Gestión de Certificado desde el gestor de configuraciones de SQL Server y Análisis y Clasificación de datos de forma nativa. Esta última permite identificar, clasificar y securizar información sensible.

PostgreSQL también tiene sus métodos de seguridad, como autenticación de usuario, manejo de roles de usuarios y soporte nativo SSL para encriptar las conexiones en el modelo cliente/servidor.

Soporte y Mantenimiento

A nivel de soporte en ambos casos tenemos apoyo de la comunidad, por un lado la comunidad de SQL Server suele ser más desorganizada en tanto que la de PostgreSQL es una comunidad más fuerte y más activa.

PostgreSQL

PostgreSQL al ser mantenido por la comunidad en caso de necesitar ayuda debemos dirigirnos a esta misma, ya sea desde Slack, foros o directamente a su lista de correos oficiales. Al ser una gran comunidad los tiempos de respuesta suelen ser rápidos y es realmente raro que encuentres un problema que no le haya sucedido a alguien más previamente.

El mantenimiento en PostgreSQL como mencionamos anteriormente lo realiza la comunidad y suelen realizar actualizaciones con bastante frecuencia.

Además lanzan una nueva versión con mejoras cada año. Es importante destacar que la instalación de PostgreSQL se realiza con una única línea de código desde la terminal y toma unos pocos segundos. Por ejemplo desde distribuciones Debian se instala de la siguiente manera:

  sudo apt-get install postgresqlsudo apt-get install postgresql

Y sus actualizaciones son igual de simples de aplicar, además de que la compatibilidad entre versiones suele ser casi de un 100%.

SQL Server

En el caso de SQL Server Enterprise tenemos un sólido soporte por parte de Microsoft ya que es un servicio de pago. En este caso el equipo técnico de Microsoft nos ayudará ante cualquier eventualidad, realizando todo tipo de pruebas para poder solucionar nuestro problema.

Hay que tener en cuenta que si utilizamos SQL Server en una pĺataforma no soportada y tenemos un error que no sucede en Windows o Linux quedará por nuestra cuenta solucionar el inconveniente.

SQL Server también lanza versiones nuevas cada año o en algunas excepciones cada 2 años. Todas las versión agregan mejoras a las herramientas existentes, con nuevas características y funcionalidades. En algunas ocasiones también se incluyen nuevas herramientas de análisis, monitoreo u otras. En la versión 2019 se agregó Developer experience la cual también puede ser utilizada con Oracle, PostgreSQL y MySQL.

Respecto a la instalación de este tiene algunos pasos mas desde Linux por motivos de la licencia del producto, por lo cual toma algunos minutos más.

Desde Windows con el entorno gráfico tiene varios pasos por lo que su instalación requerirá de algunos cuantos minutos. Además tenemos que tener en cuenta los requerimientos de este y su compatibilidad con los distintos paquetes de Windows.

¿Por qué elegir PostgreSQL?

PostgreSQL es un excelente motor de base de datos con alta disponibilidad, robusto y diseñado para trabajar con un gran volumen de datos. Gracias a sus integraciones con otros lenguajes nos permite realizar tareas de analysis, ejecución de algoritmos complejos entre otros.

Por lo que puede ser utilizado para distintos tipos de proyectos, desde pequeños a grandes y con diferentes objetivos. Además destacamos que puede ser utilizado con los servicios AWS de Amazon y existe una gran variedad de herramientas de terceros que pueden ser utilizadas con PostgreSQL.

Es ideal para aquellos que no tienen miedo de utilizar una consola de comando y que son fieles seguidores del código abierto. Igualmente si no estamos muy familiarizados con el manejo por consola también tenemos paneles como PgAdmin que nos permiten realizar múltiples tareas en un entorno gráfico y además incluye estadísticas de nuestra BD.

Por otro lado, si preferimos delegar el soporte a una empresa especializada podemos hacerlo, ya que hay varias empresas que se encargan exclusivamente de brindar soporte y mantenimiento profesional para base de datos PostgreSQL.

Dado que estas empresas se dedican únicamente a brindar servicios para dicho motor de Base de Datos su soporte es sumamente bueno.

Otra razón importante por la cual elegir PostgreSQL es que es 100% gratuito con todas sus características, asimismo el soporte oficial también lo es, y no nos olvidemos de que es multiplataforma. Incluso su instalación y actualización es bastante sencilla.

¿Por qué elegir SQL Server?

SQL Server tiene una reputación superior en entornos empresariales como los relacionados a economía, servicios de salud y similares. Esto se debe a que es el motor de base de datos por excelencia para aplicaciones .NET muy utilizadas en este tipo de entornos junto con Windows.

Al igual que PostgreSQL es robusto y ofrece una alta performance y alta disponibilidad, algo crucial para cualquier empresa. También permite un manejo de gran cantidad de datos y consultas. Sus herramientas gráficas son intuitivas y permiten una fácil administración de la base de datos.

Otra gran ventaja de SQL Server son las herramientas complementarias que ofrece como SQL Server Integration Services, SQL Server Reporting Services, SQL Server Analysis Services entre otras, las cuales son de gran ayuda en entornos empresariales.

En sus últimas versiones también nos permite trabajar con herramientas como Azure Data Studio, que se conecta con el servicio Cloud de Microsoft.

En aspectos de seguridad también tiene sus ventajas ya que ofrece distintas herramientas y características que mejoran la seguridad de la base de datos, como por ejemplo SQL Data Discovery and Classification para SSMS.

Esta herramienta lo que hace es buscar en nuestra base de datos información sensible, nos permite clasificarla y por último genera un reporte.

Tabla comparativa

PostgreSQLSQL Server
Modelo de Base de datosDBMS relacionalDBMS relacional
DesarrolladorPostgreSQL Global Development GroupMicrosoft
Lanzamiento19961989
Versión más reciente12.1SQL Server 2019
LicenciaOpen SourceCommercial
Lenguaje de implementaciónCC++
PlataformasFreeBSD, HP-UX, Linux, NetBSD, OpenBSD, OS X, Solaris, Unix, WindowsLinux, Windows
APIs y otros métodos de accesoADO.NET, JDBC, Librería de C nativa, ODBC, streaming APIADO.NET, JDBC, ODBC, OLE DB, TDS
Lenguajes de programación soportados.Net, C, C++, Delphi, Java, JavaScript (Node.js), Perl, PHP, Python, Tcl, RC#, C++, Delphi, Go, Java, JavaScript (Node.js), PHP, Python, R, Ruby, Visual Basic
Lenguajes de ProcedimientoPGSQL, V8, Python, R, Perl, Java, Lua, sh, Tcl, Ruby, PHPTransact SQL, .NET, R, Python, Java
Métodos de ParticionamientoPartición por Lista, Rango, HashPartición Horizontal
ReplicaciónMaestro-EsclavoTransaccional, Merge, Snapshot, Peer-to-peer, Bidireccional
TransaccionesACIDACID
In-memoryNo

La decisión de elegir un motor de base de datos u otro siempre va a depender en el uso que le vayamos a dar y en este caso también de nuestro presupuesto.

Personalmente recomiendo utilizar SQL Server si ya tienen conocimientos sobre este y no en PostgreSQL o si trabajan con .NET. Otro caso en el que es recomendado SQL Server es para grandes empresas que necesitan de las herramientas de Análisis que dispone Microsoft incluyendo las de seguridad.


¿Te resultó útil el artículo? Compártelo con tus colegas: