CREATE SCHEMA — define un nuevo esquema
CREATE SCHEMAnombre_esquema[ AUTHORIZATIONespecificación_rol] [elemento_esquema[ ... ] ] CREATE SCHEMA AUTHORIZATIONespecificación_rol[elemento_esquema[ ... ] ] CREATE SCHEMA IF NOT EXISTSnombre_esquema[ AUTHORIZATIONespecificación_rol] CREATE SCHEMA IF NOT EXISTS AUTHORIZATIONespecificación_roldondeespecificación_rolpuede ser:nombre_usuario| CURRENT_ROLE | CURRENT_USER | SESSION_USER
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.
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.
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).
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;
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.