Seleccionar desde dual en PostgreSQL

Bilal Shahid 15 febrero 2024
  1. Resumen de la tabla dual
  2. Introducción a la Mesa dual
  3. Importancia de la Tabla dual en PostgreSQL
  4. Crear una tabla dual en PostgreSQL
Seleccionar desde dual en PostgreSQL

El tutorial de hoy enseña sobre la tabla dual, su importancia en PostgreSQL y cómo podemos seleccionar de dual en PostgreSQL.

Resumen de la tabla dual

En los sistemas de bases de datos, a veces necesitamos usar algunas consultas para seleccionar datos que no están presentes en una tabla. Por ejemplo, podemos ejecutar la siguiente consulta para recuperar la fecha y hora actual:

select now();

seleccione de dual en postgresql - salida uno

Esta consulta utiliza la declaración SELECT sin la palabra clave FROM ya que no selecciona los datos de ninguna tabla. Esta selección de una pseudocolumna es una posibilidad válida en PostgreSQL.

Sin embargo, algunos sistemas de gestión de bases de datos como Oracle no permiten esta sintaxis. En su lugar, requieren que debe haber una cláusula FROM en la instrucción SELECT.

Entonces, ¿qué hacemos en Oracle cuando ejecutamos declaraciones básicas como la anterior? Usamos la tabla dual.

Introducción a la Mesa dual

La tabla dual es una tabla ficticia en Oracle que se utiliza para contrarrestar el problema descrito anteriormente.

Solo tiene una fila y una columna con el nombre de columna dummy y un valor de x almacenado en la fila, que es del tipo de datos VARCHAR2(1).

Veamos la tabla dual en Oracle. Supongamos que queremos hacer un cálculo simple en SQL. Podemos hacerlo de la siguiente manera:

select 2*2;

Sin embargo, ejecutar esta consulta en Oracle nos dará un error que dice ORA-00923: la palabra clave FROM no se encuentra donde se esperaba. Esto se debe a que, en Oracle, debemos especificar la cláusula y la tabla FROM en la instrucción SELECT.

Por lo tanto, ejecutamos la siguiente consulta para contrarrestar el error:

select 2*2 as result from dual;

Elimina el error ya que dual se usa como tabla ficticia.

En PostgreSQL, no hay restricción de incluir necesariamente la cláusula FROM en la instrucción SELECT. Por lo tanto, podemos ejecutar la siguiente declaración sin ningún error:

select 2*2 as result;

seleccione de dual en postgresql - salida dos

Entonces, ¿por qué necesitamos buscar alternativas a la tabla dual en PostgreSQL? Esta pregunta se responde a continuación.

Importancia de la Tabla dual en PostgreSQL

Aunque PostgreSQL por sí solo no requiere la tabla dual, pueden surgir problemas al migrar una base de datos de PostgreSQL a Oracle o viceversa.

Es posible que una organización desee migrar su base de datos de un sistema de administración de bases de datos a otro debido a problemas de escalabilidad y modernización. Pero para ello también hay que tener en cuenta la compatibilidad de ambas plataformas.

Un problema de compatibilidad es la tabla dual, que está presente en Oracle pero no en PostgreSQL. Por lo tanto, cuando el código se migra de una plataforma a otra, se garantiza que producirá errores.

Por ejemplo, el siguiente código se ejecuta perfectamente en Oracle pero generará un error en PostgreSQL:

select 2*2 as result from dual;

seleccione de dual en postgresql - salida tres

Es porque PostgreSQL permite la omisión de la palabra clave FROM en la declaración SELECT, por lo que la tabla dual no existe allí. Por lo tanto, seleccionar de él produce un error.

Del mismo modo, una simple consulta select 2*2, que funciona perfectamente bien en PostgreSQL, se considerará errónea cuando se ejecute en Oracle. Como se explicó anteriormente, es un requisito en Oracle incluir la cláusula FROM en la instrucción SELECT.

Por tanto, para hacer compatible la migración de bases de datos entre estas plataformas, tendremos que buscar algunas alternativas en PostgreSQL. Sin embargo, la solución es sencilla: como no tenemos una tabla dual en PostgreSQL, podemos crear una.

Crear una tabla dual en PostgreSQL

Sí, la solución a este problema de compatibilidad es tan sencilla como crear una tabla dual en la base de datos de PostgreSQL, igual que la de Oracle. Esto lo podemos hacer de la siguiente manera:

CREATE TABLE public.dual ( dummy varchar);

Hemos incluido una columna llamada dummy del tipo de datos varchar. Ahora también lo llenaremos con un valor ficticio, similar a la tabla dual en Oracle:

insert into dual values ('X');

Probemos si esto funciona ejecutando la siguiente consulta, que anteriormente nos daba un error en PostgreSQL:

select 2*2 as result from dual;

seleccione de dual en postgresql - salida dos

¡Está trabajando ahora! Elimina la selección del problema de compatibilidad dual entre PostgreSQL y Oracle.

Alternativamente, podemos crear una vista dual en PostgreSQL en lugar de una tabla. Se hace de la siguiente manera:

CREATE VIEW public.dual AS 
SELECT 'X'::varchar AS dummy;

Aquí, en la definición de la vista dual, estamos seleccionando una variable ficticia varchar, como la que tenemos en la tabla dual en Oracle. Veamos si esto funciona ejecutando nuevamente esta consulta:

select 2*2 as result from dual;

seleccione de dual en postgresql - salida dos

Como era de esperar, ¡esto también funciona! Por lo tanto, podemos crear una tabla o una vista en PostgreSQL, que funciona como la tabla dual en Oracle.

Veamos otros ejemplos de selección de pseudocolumnas usando una tabla dual en PostgreSQL para ver si funciona en todos los casos.

En el siguiente ejemplo, intentaremos seleccionar la fecha y hora actuales usando la siguiente consulta:

select now() from dual;

Da el siguiente resultado:

seleccione de dual en postgresql - salida uno

También podemos seleccionar el usuario actual de la base de datos de la siguiente forma:

select user from dual;

Da el siguiente resultado:

seleccione de dual en postgresql - salida cuatro

Entonces, hemos discutido que la tabla dual es necesaria en algunos sistemas de administración de bases de datos, como Oracle, que requieren especificar una cláusula FROM.

Para contrarrestar los problemas de compatibilidad, aprendimos cómo podíamos crear una tabla o vista ficticia dual en PostgreSQL. Esperamos que haya podido comprender estos conceptos a fondo. ¡Seguir aprendiendo!

Bilal Shahid avatar Bilal Shahid avatar

Hello, I am Bilal, a research enthusiast who tends to break and make code from scratch. I dwell deep into the latest issues faced by the developer community and provide answers and different solutions. Apart from that, I am just another normal developer with a laptop, a mug of coffee, some biscuits and a thick spectacle!

GitHub