Intenta entender el código bien previamente a aplicarlo a tu proyecto si tquieres aportar algo puedes compartirlo con nosotros.
Solución:
Esto sucede al no tener USAGE
privilegio en cualquiera de los esquemas de search_path
. Por defecto el pseudo-rol public
(todos los usuarios) tiene este privilegio en el public
esquema, por lo que este error ocurre solo después de revocarlo explícitamente con:
revoke usage on schema public from public;
Esto es necesario cuando no es deseable que las personas echen un vistazo a los esquemas de otras personas, incluso sin seleccionar datos de las tablas (que se otorga a través de diferentes privilegios).
Si esto REVOKE
no se ha hecho en esa base de datos, puede haber ocurrido en la base de datos de plantilla mediante la cual se modelan nuevas bases de datos (ver CREATE DATABASE
).
Cuando un usuario tiene USAGE
privilegio, pero carece CREATE
privilegio en el esquema, es un error diferente al intentar crear un objeto: permiso denegado para el esquema público.
Para verificar los privilegios dentro de psql, use dn+ public
.
Por defecto (se muestra con pantalla extendida x
para la legibilidad):
# dn+ public List of schemas -[ RECORD 1 ]-----+----------------------- Name | public Owner | postgres Access privileges | postgres=UC/postgres | =UC/postgres Description | standard public schema
falta de un nombre de rol antes =
significa que es para todos los roles (=público)
Sin privilegio de USO público
Name | public Owner | postgres Access privileges | postgres=UC/postgres | =C/postgres Description | standard public schema
Sin privilegios públicos USO o CREAR
Name | public Owner | postgres Access privileges | postgres=UC/postgres Description | standard public schema
Tenía un archivo pgdump con la creación de funciones en un esquema personalizado y quería cambiar el nombre del esquema personalizado al público en general y reemplacé todas las ocurrencias con el esquema antiguo para vaciarlas (por ejemplo, myschema.tablename a tablename) y comencé a recibir un error
ERROR: no schema has been selected to create in
Para mi caso, el error ocurre cuando al comienzo de la línea actual de volcado
SELECT pg_catalog.set_config('search_path', '', false);
He cambiado el segundo argumento a “público”
SELECT pg_catalog.set_config('search_path', 'public', false);
Y el problema se fue
He probado varias soluciones y sigo recibiendo el mismo error una y otra vez.
Peor aún, el error me aparece cuando necesitaba reiniciar la migración de mi base de datos eliminando el esquema público y después de crearlo nuevamente.
La solución fue:
grant usage on schema public to public;
grant create on schema public to public;
Comentarios y valoraciones del tutorial
Agradecemos que quieras añadir valor a nuestra información participando con tu experiencia en los comentarios.