Updated on 2024-06-03 GMT+08:00

CREATE SCHEMA

Description

Creates a schema.

Named objects are accessed either by "qualifying" their names with the schema name as a prefix, or by setting a search path that includes the desired schema. When creating named objects, you can also use the schema name as a prefix.

Optionally, CREATE SCHEMA can include sub-commands to create objects within the new schema. The sub-commands are treated essentially the same as separate commands issued after creating the schema. If the AUTHORIZATION clause is used, all the created objects are owned by this user.

Precautions

  • Only a user with the CREATE permission on the current database can perform this operation.
  • The owner of an object created by a system administrator in a schema with the same name as a common user is the common user, not the system administrator.

Syntax

  • Create a schema based on a specified name.
    CREATE SCHEMA schema_name 
        [ AUTHORIZATION user_name ] [WITH BLOCKCHAIN] [ schema_element [ ... ] ];

  • Create a schema based on a username.
    CREATE SCHEMA AUTHORIZATION user_name [ schema_element [ ... ] ];

  • Create a schema and specify the default character set and collation.
    CREATE SCHEMA schema_name 
        [ [DEFAULT] CHARACTER SET | CHARSET [ = ] default_charset ] [ [ DEFAULT] COLLATE [ = ] default_collation ];

Parameters

  • schema_name

    Specifies the schema name.

    • The schema name must be unique in the current database.
    • The schema name cannot be the same as the initial username of the current database.
    • The schema name cannot start with pg_.
    • The schema name cannot start with gs_role_.

    Value range: a string. It must comply with the naming convention.

  • AUTHORIZATION user_name

    Specifies the owner of a schema. If schema_name is not specified, user_name will be used as the schema name. In this case, user_name can only be a role name.

    Value range: an existing username or role name

  • WITH BLOCKCHAIN

    Specifies the tamper-proof attribute of a schema. In this mode, a row-store common user table is automatically extended to tamper-proof user table.

    To create a tamper-proof schema, set the GUC parameter enable_ledger to on. The default value is off, and the level is SIGHUP.

  • schema_element

    Specifies an SQL statement defining an object to be created within the schema. Currently, only the CREATE TABLE, CREATE VIEW, CREATE INDEX, CREATE TABLE PARTITION, CREATE SEQUENCE, CREATE TRIGGER, and GRANT clauses are supported.

    Objects created by sub-commands are owned by the user specified by AUTHORIZATION.

  • default_charset

    Specifies the default character set of a schema. If this parameter is specified separately, the default collation of the schema is set to the default collation of the specified character set.

    This syntax is supported only when sql_compatibility is set to 'B'.

  • default_collation

    Specifies the default collation of a schema. If this parameter is specified separately, the default character set of the schema is set to the character set corresponding to the specified collation.

    This syntax is supported only when sql_compatibility is set to 'B'. For details about the supported collation, see Table 1.

If objects in the schema on the current search path are with the same name, specify the schemas for different objects. You can run SHOW SEARCH_PATH to check the schemas on the current search path.

Examples

-- Create and switch to the test database.
gaussdb=# CREATE DATABASE test1 WITH DBCOMPATIBILITY = 'B' ENCODING = 'UTF8' LC_COLLATE = 'zh_CN.utf8' LC_CTYPE = 'zh_CN.utf8';
gaussdb=# \c test1

-- Create the role1 role.
test1=# CREATE ROLE role1 IDENTIFIED BY '********';

-- Create a schema named role1 for the role1 role. The owner of the films and winners tables created by the clause is role1.
test1=# CREATE SCHEMA AUTHORIZATION role1
                   CREATE TABLE films (title text, release date, awards text[]) 
                   CREATE VIEW winners AS SELECT title, release FROM films WHERE awards IS NOT NULL;

-- Create a schema ds and set the default character set of the schema to utf8mb4 and the default collation to utf8mb4_bin. This syntax is supported only when sql_compatibility is set to 'B'.
test1=# CREATE SCHEMA ds CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

-- Delete the schema.
test1=# DROP SCHEMA role1 CASCADE;
test1=# DROP SCHEMA ds CASCADE;

-- Delete the user.
test1=# DROP USER role1 CASCADE;

-- Switch back to the initial database and delete the test database. Replace postgres with the actual database name.
test1=# \c postgres
gaussdb=# DROP DATABASE test1;

Helpful Links

ALTER SCHEMA and DROP SCHEMA