CREATE SCHEMA

CREATE SCHEMA — define un nuevo esquema

Synopsis

CREATE SCHEMA nombre_esquema [ AUTHORIZATION especificación_rol ] [ elemento_esquema [ ... ] ]
CREATE SCHEMA AUTHORIZATION especificación_rol [ elemento_esquema [ ... ] ]
CREATE SCHEMA IF NOT EXISTS nombre_esquema [ AUTHORIZATION especificación_rol ]
CREATE SCHEMA IF NOT EXISTS AUTHORIZATION especificación_rol

donde especificación_rol puede ser:

    nombre_usuario
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

Descripción

CREATE SCHEMA ingresa un nuevo esquema en la base de datos actual. El nombre del esquema debe ser distinto del nombre de cualquier esquema existente en la base de datos actual.

Un esquema es esencialmente un espacio de nombres: contiene objetos con nombre (tablas, tipos de datos, funciones y operadores) cuyos nombres pueden duplicar los de otros objetos existentes en otros esquemas. Se accede a los objetos con nombre ya sea calificando sus nombres con el nombre del esquema como prefijo, o estableciendo una ruta de búsqueda (search path) que incluya los esquemas deseados. Un comando CREATE que especifica un nombre de objeto no calificado crea el objeto en el esquema actual (el que está al principio de la ruta de búsqueda, que puede determinarse con la función current_schema).

Opcionalmente, CREATE SCHEMA puede incluir subcomandos para crear objetos dentro del nuevo esquema. Los subcomandos se tratan esencialmente de la misma manera que los comandos separados emitidos después de crear el esquema, excepto que si se usa la cláusula AUTHORIZATION, todos los objetos creados serán propiedad de ese usuario.

Parámetros

nombre_esquema

El nombre del esquema a crear. Si se omite, se usa el nombre_usuario como nombre del esquema. El nombre no puede comenzar con pg_, ya que tales nombres están reservados para los esquemas del sistema.

nombre_usuario

El nombre de rol del usuario que será propietario del nuevo esquema. Si se omite, por defecto es el usuario que ejecuta el comando. Para crear un esquema propiedad de otro rol, debes poder hacer SET ROLE a ese rol.

elemento_esquema

Una sentencia SQL que define un objeto a crear dentro del esquema. Actualmente, solo CREATE TABLE, CREATE VIEW, CREATE INDEX, CREATE SEQUENCE, CREATE TRIGGER y GRANT se aceptan como cláusulas dentro de CREATE SCHEMA. Otros tipos de objetos pueden crearse en comandos separados después de que se cree el esquema.

IF NOT EXISTS

No hace nada (excepto emitir un aviso) si ya existe un esquema con el mismo nombre. Los subcomandos elemento_esquema no se pueden incluir cuando se utiliza esta opción.

Notas

Para crear un esquema, el usuario que lo invoca debe tener el privilegio CREATE para la base de datos actual. (Por supuesto, los superusuarios evitan esta comprobación).

Ejemplos

Crea un esquema:

CREATE SCHEMA myschema;

Crea un esquema para el usuario joe; el esquema también se llamará joe:

CREATE SCHEMA AUTHORIZATION joe;

Crea un esquema llamado test que será propiedad del usuario joe, a menos que ya exista un esquema llamado test. (No importa si joe es el propietario del esquema preexistente).

CREATE SCHEMA IF NOT EXISTS test AUTHORIZATION joe;

Crea un esquema y crea una tabla y una vista dentro de él:

CREATE SCHEMA hollywood
    CREATE TABLE films (title text, release date, awards text[])
    CREATE VIEW winners AS
        SELECT title, release FROM films WHERE awards IS NOT NULL;

Ten en cuenta que los subcomandos individuales no terminan con punto y coma.

La siguiente es una forma equivalente de lograr el mismo resultado:

CREATE SCHEMA hollywood;
CREATE TABLE hollywood.films (title text, release date, awards text[]);
CREATE VIEW hollywood.winners AS
    SELECT title, release FROM hollywood.films WHERE awards IS NOT NULL;

Compatibilidad

El estándar SQL permite una cláusula DEFAULT CHARACTER SET en CREATE SCHEMA, así como más tipos de subcomandos de los que se aceptan actualmente en PostgreSQL.

El estándar SQL especifica que los subcomandos en CREATE SCHEMA pueden aparecer en cualquier orden. La implementación actual de PostgreSQL no maneja todos los casos de referencias hacia adelante (forward references) en los subcomandos; a veces puede ser necesario reordenar los subcomandos para evitarlas.

Según el estándar SQL, el propietario de un esquema siempre es el propietario de todos los objetos dentro de él. PostgreSQL permite que los esquemas contengan objetos propiedad de usuarios distintos al propietario del esquema. Esto puede suceder solo si el propietario del esquema otorga el privilegio CREATE en su esquema a otra persona, o si un superusuario decide crear objetos en él.

La opción IF NOT EXISTS es una extensión de PostgreSQL.

Consulte también

ALTER SCHEMA, DROP SCHEMA