Updated on 2022-06-11 GMT+08:00

CREATE TABLESPACE

Function

The feature of creating an OBS tablespace in a database is supported only by 8.1.1.

Precautions

  • Only system administrators can create a tablespace.
  • Do not run CREATE TABLESPACE in a transaction block.
  • If the CREATE TABLESPACE command fails to be run but the internal directory (or file) has been created, the directory (or file) will remain. You need to manually clear it before creating the tablespace again. If there are residual files of soft links for the tablespace in the data directory, delete the residual files, and then perform O&M operations.
  • CREATE TABLESPACE cannot be used for two-phase transactions. If it fails on some nodes, the execution cannot be rolled back.
  • You are advised to use the default tablespace default_tablespace instead of the absolute tablespace or relative tablespace.
  • For details about how to prepare for creating tablespaces, see "Parameter Description" in this section.

Syntax

1
2
3
CREATE TABLESPACE tablespace_name
    [ OWNER user_name ]  [ MAXSIZE 'space_size' ]
    [with_option_clause];
The with_option_clause of an OBS tablespace is as follows:
1
2
3
4
WITH ( filesystem= { 'obs'| "obs" | obs},
    address =  'endpoint', 
access_key = 'ak', secret_access_key = 'sk',
encrypt = 'on' |'off', storepath = 'rootpath')

Parameter Description

  • tablespace_name

    Specifies name of a tablespace to be created.

    The tablespace name must be distinct from the name of any existing tablespace in the database cluster and cannot start with pg, which are reserved for system catalog spaces.

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

  • OWNER user_name

    Specifies the owner of the tablespace. If omitted, the default owner is the current user.

    Only system administrators can create tablespaces, but they can use the OWNER clause to assign ownership of tablespaces to other users.

    Value range: An existing user.

  • filesystem

    Specifies the OBS tablespace.

    Valid value: OBS

  • random_page_cost

    Specifies the cost of randomly reading the overhead of page.

    Value range: 0 to 1.79769e+308.

    Default value: the value of GUC parameter random_page_cost

  • seq_page_cost

    Specifies the cost of reading the overhead of page in order.

    Value range: 0 to 1.79769e+308.

    Default value: the value of GUC parameter seq_page_cost.

  • address

    Specifies the endpoint of OBS.

    Setting rule: address only supports IPv4 addresses in dot-decimal notation, and an address string cannot contain spaces. An IP address and a port number are separated by a colon (:). If you create a general tablespace, this parameter is unavailable.

  • storepath

    Specifies the data storage path on the OBS.

    Value range: a string

    Value format: /Bucket name of the parallel file system/Path/

  • access_key

    Specifies the access key (AK) (obtained by users from the OBS console) used for the OBS access protocol. When you create a foreign table, its AK value is encrypted and saved to the metadata table of the database. This parameter is available only when type is OBS.

  • secret_access_key

    Specifies the secret access key (SK) (obtained by users from the OBS console) used for the OBS access protocol. When you create a foreign table, its SK value is encrypted and saved to the metadata table of the database. This parameter is available only when type is OBS.

  • encrypt
    • Specifies whether data is encrypted. This parameter is available only when type is OBS. The default value is off.

      Options:

      on indicates that data is encrypted.

      off indicates that data is not encrypted.

Examples

Create an OBS tablespace.

CREATE TABLESPACE ds_location1   WITH(filesystem=obs, address='obs URL', access_key='xxxxxx',  secret_access_key='xxxxxx', encrypt='on', storepath='/obs_bucket/obs_tablespace');

Create user joe.

CREATE ROLE joe IDENTIFIED BY 'password1';

Create user jay.

CREATE ROLE jay IDENTIFIED BY 'password2';

Create an ordinary tablespace and set its owner to user joe.

CREATE TABLESPACE ds_location2 OWNER joe WITH(filesystem=obs, address='obs URL', access_key='xxxxxx',  secret_access_key='xxxxxx', encrypt='on', storepath='/obs_bucket/obs_tablespace');