Publicado el Dejar un comentario

Postgresql 15: permission denied for schema public

Un cliente desarrolla aplicaciones web con Django y al hacer el deploy de su aplicación y crear las tablas en la base de datos Postgresql versión 15 (migrations) le lanzaba el siguiente error:

“… (permission denied for schema public LINE 1: CREATE TABLE ….”

Al usuario de conexión a la base de datos se le habían asignado todos los permisos o privilegios sobre la base de datos que regularmente el cliente asignaba en anteriores instalaciones con éxito donde la instalación había funcionado sin problemas.

La diferencia con las instalaciones anteriores era la versión del Postgresql, lo había hecho en versiones 14 o anteriores de este motor de base de datos. Revisando la documentación de la versión 15 se encontró que el permiso de creación en al esquema PUBLIC ya no es público por lo que hay que darle el permiso explícito al usuario. Sólo el propietario de la base de datos tiene por defecto el permiso de creación en el esquema PUBLIC. El cliente había creado la base de datos con el usuario administrador postgres, por lo tanto el propietario por defecto era el usuario postgres. Una solución para corregir este error es hacer, al usuario de conexión, el propietario de la base de datos ejecutando el siguiente comando SQL:

ALTER DATABASE <nombre-base-de-datos> OWNER TO <usuario>;

Una vez ejecutado el comando, la aplicación se instaló sin problemas.

¡Hasta pronto!

Publicado el Dejar un comentario

SQL: regresar un valor en lugar de nulo (null) en una consulta.

En ocasiones una consulta SQL puede regresar en una de sus columnas un valor nulo, pero necesitamos que en su lugar regrese un valor por defecto ya sea porque necesitamos hacer alguna operación con ese valor o simplemente por estética.

Existen varias funciones que hacen lo mismo según la base de datos de que se trate. Aquí se verá la función COALESCE(). Esta función regresa el primer argumento no nulo de la lista de argumentos que se le pasen. Su sintaxis es:

COALESCE(argumento1, argumento2,…argumentoN)

A ésta función se le deben pasar al menos 2 argumentos. Si todos los argumentos de la lista son nulos, esta función regresara nulo (nul). Los argumentos no nulos dados deben ser del mismo tipo de dato, si no la función podría marcar error. Es decir, deben ser todos numéricos o todos cadena o de otro tipo. Veamos unos ejemplos:

SELECT COALESCE(null, 1, 3) as campo1;

Al ejecutar la sentencia sql anterior, la expresión campo1 regresará el valor 1, ya que es el primer argumento no nulo en la lista de argumentos que se le dió. El ejemplo anterior podrá funcionar en SQLite, SQL Server o Postgresql. En Oracle se debe ejecutar la siguiente sentencia:

SELECT COALESCE(null, 1, 3) as campo1 from dual;

Espero y les sea de utilidad. ¿Dudas u observaciones? Deja tu comentario. ¡Saludos!

Publicado el 3 comentarios

SQL: Obtener último(s) caracteres de un campo texto.

Hola, en nuestro quehacer diario con bases de datos relacionales nos topamos a veces con que hay que extraer el o los últimos caracteres de un campo de tipo texto o string de una tabla. Según la base de datos usada la instrucción puede variar.

Enseguida veremos algunos ejemplos, en las distintas bases de datos, donde extraeremos los útimos 2 caracteres del texto constante “texto ejemplo”:

SQLite:

SELECT SUBSTR(‘texto ejemplo’, -2);

Postgresql:

SELECT SUBSTRING(‘texto ejemplo’ from ‘.{2}$’);

SELECT RIGHT(‘texto ejemplo’,2);

MySQL o MariaDB:

SELECT SUBSTRING(‘texto ejemplo’,-2);

SELECT RIGHT(‘texto ejemplo’,2);

SQL Server:

SELECT RIGHT(‘texto ejemplo’, 2);

ORACLE:

SELECT SUBSTR(‘texto ejemplo’, -2) FROM dual;

Todas las sentencias sql descritas anteriormente ejecutadas en la respectiva base de datos regresarán la cadena de caractares ‘lo’.

Dependiendo del número de caracteres a la derecha que queramos obtener sólo tendremos que cambiar el número dos por el número de caracteres deseado en cada una de las sentencias anteriores.

Espero y les séa de utilidad este artículo. Agradezco sus comentarios. ¡Saludos!