创建表

    创建表时,如未指定表的存储方式,默认创建的是行存表;如未指定分布列时,取表的主键列(如果有的话)或首个可以作为分布列的列。

      • 其中列约束column_constraint为:

        1. { NOT NULL |
        2. NULL |
        3. CHECK ( expression ) |
        4. DEFAULT default_expr |
        5. UNIQUE index_parameters |
        6. PRIMARY KEY index_parameters }
        7. [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ]
        1. { DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS }
      • 其中表约束table_constraint为:

        1. { INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | ALL }

    其中索引参数index_parameters为:

    1. [ WITH ( {storage_parameter = value} [, ... ] ) ]
    2. [ USING INDEX TABLESPACE tablespace_name ]

    示例

    1. --创建表,并指定W_STATE字段的缺省值为GA
    2. postgres=# CREATE TABLE tpcds.warehouse_t3
    3. (
    4. W_WAREHOUSE_SK INTEGER NOT NULL,
    5. W_WAREHOUSE_ID CHAR(16) NOT NULL,
    6. W_WAREHOUSE_NAME VARCHAR(20) ,
    7. W_WAREHOUSE_SQ_FT INTEGER ,
    8. W_STREET_NUMBER CHAR(10) ,
    9. W_STREET_NAME VARCHAR(60) ,
    10. W_STREET_TYPE CHAR(15) ,
    11. W_SUITE_NUMBER CHAR(10) ,
    12. W_CITY VARCHAR(60) ,
    13. W_COUNTY VARCHAR(30) ,
    14. W_STATE CHAR(2) DEFAULT 'GA',
    15. W_ZIP CHAR(10) ,
    16. W_COUNTRY VARCHAR(20) ,
    17. W_GMT_OFFSET DECIMAL(5,2)
    18. );
    19. --创建表,并在事务结束时检查W_WAREHOUSE_NAME字段是否有重复。
    20. postgres=# CREATE TABLE tpcds.warehouse_t4
    21. (
    22. W_WAREHOUSE_SK INTEGER NOT NULL,
    23. W_WAREHOUSE_ID CHAR(16) NOT NULL,
    24. W_WAREHOUSE_NAME VARCHAR(20) UNIQUE DEFERRABLE,
    25. W_WAREHOUSE_SQ_FT INTEGER ,
    26. W_STREET_NUMBER CHAR(10) ,
    27. W_STREET_NAME VARCHAR(60) ,
    28. W_STREET_TYPE CHAR(15) ,
    29. W_SUITE_NUMBER CHAR(10) ,
    30. W_CITY VARCHAR(60) ,
    31. W_COUNTY VARCHAR(30) ,
    32. W_STATE CHAR(2) ,
    33. W_ZIP CHAR(10) ,
    34. W_COUNTRY VARCHAR(20) ,
    35. W_GMT_OFFSET DECIMAL(5,2)
    36. );
    1. --创建一个带有70%填充因子的表。
    2. postgres=# CREATE TABLE tpcds.warehouse_t5
    3. (
    4. W_WAREHOUSE_SK INTEGER NOT NULL,
    5. W_WAREHOUSE_ID CHAR(16) NOT NULL,
    6. W_WAREHOUSE_NAME VARCHAR(20) ,
    7. W_WAREHOUSE_SQ_FT INTEGER ,
    8. W_STREET_NUMBER CHAR(10) ,
    9. W_STREET_NAME VARCHAR(60) ,
    10. W_STREET_TYPE CHAR(15) ,
    11. W_SUITE_NUMBER CHAR(10) ,
    12. W_CITY VARCHAR(60) ,
    13. W_COUNTY VARCHAR(30) ,
    14. W_STATE CHAR(2) ,
    15. W_ZIP CHAR(10) ,
    16. W_COUNTRY VARCHAR(20) ,
    17. W_GMT_OFFSET DECIMAL(5,2),
    18. UNIQUE(W_WAREHOUSE_NAME) WITH(fillfactor=70)
    19. );
    20. --或者用下面的语法。
    21. postgres=# CREATE TABLE tpcds.warehouse_t6
    22. (
    23. W_WAREHOUSE_SK INTEGER NOT NULL,
    24. W_WAREHOUSE_ID CHAR(16) NOT NULL,
    25. W_WAREHOUSE_NAME VARCHAR(20) UNIQUE,
    26. W_WAREHOUSE_SQ_FT INTEGER ,
    27. W_STREET_NUMBER CHAR(10) ,
    28. W_STREET_NAME VARCHAR(60) ,
    29. W_STREET_TYPE CHAR(15) ,
    30. W_SUITE_NUMBER CHAR(10) ,
    31. W_CITY VARCHAR(60) ,
    32. W_COUNTY VARCHAR(30) ,
    33. W_STATE CHAR(2) ,
    34. W_ZIP CHAR(10) ,
    35. W_COUNTRY VARCHAR(20) ,
    36. W_GMT_OFFSET DECIMAL(5,2)
    37. ) WITH(fillfactor=70);
    38. --创建表,并指定该表数据不写入预写日志。
    39. postgres=# CREATE UNLOGGED TABLE tpcds.warehouse_t7
    40. (
    41. W_WAREHOUSE_SK INTEGER NOT NULL,
    42. W_WAREHOUSE_NAME VARCHAR(20) ,
    43. W_WAREHOUSE_SQ_FT INTEGER ,
    44. W_STREET_NUMBER CHAR(10) ,
    45. W_STREET_NAME VARCHAR(60) ,
    46. W_SUITE_NUMBER CHAR(10) ,
    47. W_CITY VARCHAR(60) ,
    48. W_COUNTY VARCHAR(30) ,
    49. W_STATE CHAR(2) ,
    50. W_ZIP CHAR(10) ,
    51. W_COUNTRY VARCHAR(20) ,
    52. W_GMT_OFFSET DECIMAL(5,2)
    53. );
    54. --创建表临时表。
    55. postgres=# CREATE TEMPORARY TABLE warehouse_t24
    56. (
    57. W_WAREHOUSE_SK INTEGER NOT NULL,
    58. W_WAREHOUSE_ID CHAR(16) NOT NULL,
    59. W_WAREHOUSE_NAME VARCHAR(20) ,
    60. W_WAREHOUSE_SQ_FT INTEGER ,
    61. W_STREET_NUMBER CHAR(10) ,
    62. W_STREET_NAME VARCHAR(60) ,
    63. W_STREET_TYPE CHAR(15) ,
    64. W_SUITE_NUMBER CHAR(10) ,
    65. W_CITY VARCHAR(60) ,
    66. W_COUNTY VARCHAR(30) ,
    67. W_STATE CHAR(2) ,
    68. W_ZIP CHAR(10) ,
    69. W_COUNTRY VARCHAR(20) ,
    70. W_GMT_OFFSET DECIMAL(5,2)
    71. );
    72. --事务中创建表临时表,并指定提交事务时删除该临时表数据。
    73. postgres=# CREATE TEMPORARY TABLE warehouse_t25
    74. (
    75. W_WAREHOUSE_SK INTEGER NOT NULL,
    76. W_WAREHOUSE_ID CHAR(16) NOT NULL,
    77. W_WAREHOUSE_NAME VARCHAR(20) ,
    78. W_WAREHOUSE_SQ_FT INTEGER ,
    79. W_STREET_NUMBER CHAR(10) ,
    80. W_STREET_NAME VARCHAR(60) ,
    81. W_STREET_TYPE CHAR(15) ,
    82. W_SUITE_NUMBER CHAR(10) ,
    83. W_CITY VARCHAR(60) ,
    84. W_COUNTY VARCHAR(30) ,
    85. W_STATE CHAR(2) ,
    86. W_ZIP CHAR(10) ,
    87. W_COUNTRY VARCHAR(20) ,
    88. W_GMT_OFFSET DECIMAL(5,2)
    89. ) ON COMMIT DELETE ROWS;
    90. --创建表时,不希望因为表已存在而报错。
    91. postgres=# CREATE TABLE IF NOT EXISTS tpcds.warehouse_t8
    92. (
    93. W_WAREHOUSE_SK INTEGER NOT NULL,
    94. W_WAREHOUSE_ID CHAR(16) NOT NULL,
    95. W_WAREHOUSE_NAME VARCHAR(20) ,
    96. W_WAREHOUSE_SQ_FT INTEGER ,
    97. W_STREET_NUMBER CHAR(10) ,
    98. W_STREET_NAME VARCHAR(60) ,
    99. W_STREET_TYPE CHAR(15) ,
    100. W_SUITE_NUMBER CHAR(10) ,
    101. W_CITY VARCHAR(60) ,
    102. W_COUNTY VARCHAR(30) ,
    103. W_STATE CHAR(2) ,
    104. W_ZIP CHAR(10) ,
    105. W_COUNTRY VARCHAR(20) ,
    106. W_GMT_OFFSET DECIMAL(5,2)
    107. );
    108. --创建普通表空间。
    109. postgres=# CREATE TABLESPACE DS_TABLESPACE1 RELATIVE LOCATION 'tablespace/tablespace_1';
    110. --创建表时,指定表空间。
    111. postgres=# CREATE TABLE tpcds.warehouse_t9
    112. (
    113. W_WAREHOUSE_SK INTEGER NOT NULL,
    114. W_WAREHOUSE_ID CHAR(16) NOT NULL,
    115. W_WAREHOUSE_NAME VARCHAR(20) ,
    116. W_WAREHOUSE_SQ_FT INTEGER ,
    117. W_STREET_NUMBER CHAR(10) ,
    118. W_STREET_NAME VARCHAR(60) ,
    119. W_STREET_TYPE CHAR(15) ,
    120. W_SUITE_NUMBER CHAR(10) ,
    121. W_CITY VARCHAR(60) ,
    122. W_COUNTY VARCHAR(30) ,
    123. W_STATE CHAR(2) ,
    124. W_ZIP CHAR(10) ,
    125. W_COUNTRY VARCHAR(20) ,
    126. W_GMT_OFFSET DECIMAL(5,2)
    127. ) TABLESPACE DS_TABLESPACE1;
    128. --创建表时,单独指定W_WAREHOUSE_NAME的索引表空间。
    129. postgres=# CREATE TABLE tpcds.warehouse_t10
    130. (
    131. W_WAREHOUSE_SK INTEGER NOT NULL,
    132. W_WAREHOUSE_ID CHAR(16) NOT NULL,
    133. W_WAREHOUSE_NAME VARCHAR(20) UNIQUE USING INDEX TABLESPACE DS_TABLESPACE1,
    134. W_WAREHOUSE_SQ_FT INTEGER ,
    135. W_STREET_NAME VARCHAR(60) ,
    136. W_SUITE_NUMBER CHAR(10) ,
    137. W_CITY VARCHAR(60) ,
    138. W_COUNTY VARCHAR(30) ,
    139. W_STATE CHAR(2) ,
    140. W_ZIP CHAR(10) ,
    141. W_COUNTRY VARCHAR(20) ,
    142. W_GMT_OFFSET DECIMAL(5,2)
    143. );
    1. postgres=# ALTER TABLE tpcds.warehouse_t19 ADD W_GOODS_CATEGORY varchar(30);
    2. --给tpcds.warehouse_t19表增加一个检查约束。
    3. postgres=# ALTER TABLE tpcds.warehouse_t19 ADD CONSTRAINT W_CONSTR_KEY4 CHECK (W_STATE IS NOT NULL);
    4. --在一个操作中改变两个现存字段的类型。
    5. postgres=# ALTER TABLE tpcds.warehouse_t19
    6. ALTER COLUMN W_GOODS_CATEGORY TYPE varchar(80),
    7. ALTER COLUMN W_STREET_NAME TYPE varchar(100);
    8. --此语句与上面语句等效。
    9. postgres=# ALTER TABLE tpcds.warehouse_t19 MODIFY (W_GOODS_CATEGORY varchar(30), W_STREET_NAME varchar(60));
    10. --给一个已存在字段添加非空约束。
    11. postgres=# ALTER TABLE tpcds.warehouse_t19 ALTER COLUMN W_GOODS_CATEGORY SET NOT NULL;
    12. --移除已存在字段的非空约束。
    13. postgres=# ALTER TABLE tpcds.warehouse_t19 ALTER COLUMN W_GOODS_CATEGORY DROP NOT NULL;
    14. --如果列存表中还未指定局部聚簇,向在一个列存表中添加局部聚簇列。
    15. postgres=# ALTER TABLE tpcds.warehouse_t17 ADD PARTIAL CLUSTER KEY(W_WAREHOUSE_SK);
    16. --查看约束的名称,并删除一个列存表中的局部聚簇列。
    17. postgres=# \d+ tpcds.warehouse_t17
    18. Table "tpcds.warehouse_t17"
    19. Column | Type | Modifiers | Storage | Stats target | Description
    20. -------------------+-----------------------+-----------+----------+--------------+-------------
    21. w_warehouse_sk | integer | not null | plain | |
    22. w_warehouse_id | character(16) | not null | extended | |
    23. w_warehouse_name | character varying(20) | | extended | |
    24. w_warehouse_sq_ft | integer | | plain | |
    25. w_street_number | character(10) | | extended | |
    26. w_street_name | character varying(60) | | extended | |
    27. w_street_type | character(15) | | extended | |
    28. w_suite_number | character(10) | | extended | |
    29. w_city | character varying(60) | | extended | |
    30. w_county | character varying(30) | | extended | |
    31. w_state | character(2) | | extended | |
    32. w_zip | character(10) | | extended | |
    33. w_country | character varying(20) | | extended | |
    34. w_gmt_offset | numeric(5,2) | | main | |
    35. Partial Cluster :
    36. "warehouse_t17_cluster" PARTIAL CLUSTER KEY (w_warehouse_sk)
    37. Has OIDs: no
    38. Location Nodes: ALL DATANODES
    39. Options: compression=no, version=0.12
    40. postgres=# ALTER TABLE tpcds.warehouse_t17 DROP CONSTRAINT warehouse_t17_cluster;
    41. --将表移动到另一个表空间。
    42. postgres=# ALTER TABLE tpcds.warehouse_t19 SET TABLESPACE PG_DEFAULT;
    43. --创建模式joe
    44. postgres=# CREATE SCHEMA joe;
    45. --将表移动到另一个模式中。
    46. postgres=# ALTER TABLE tpcds.warehouse_t19 SET SCHEMA joe;
    47. --重命名已存在的表。
    48. postgres=# ALTER TABLE joe.warehouse_t19 RENAME TO warehouse_t23;
    49. --从warehouse_t23表中删除一个字段。
    50. postgres=# ALTER TABLE joe.warehouse_t23 DROP COLUMN W_STREET_NAME;
    51. --删除表空间、模式joe和模式表warehouse
    52. postgres=# DROP TABLE tpcds.warehouse_t1;
    53. postgres=# DROP TABLE tpcds.warehouse_t2;
    54. postgres=# DROP TABLE tpcds.warehouse_t3;
    55. postgres=# DROP TABLE tpcds.warehouse_t4;
    56. postgres=# DROP TABLE tpcds.warehouse_t5;
    57. postgres=# DROP TABLE tpcds.warehouse_t6;
    58. postgres=# DROP TABLE tpcds.warehouse_t7;
    59. postgres=# DROP TABLE tpcds.warehouse_t8;
    60. postgres=# DROP TABLE tpcds.warehouse_t9;
    61. postgres=# DROP TABLE tpcds.warehouse_t10;
    62. postgres=# DROP TABLE tpcds.warehouse_t11;
    63. postgres=# DROP TABLE tpcds.warehouse_t12;
    64. postgres=# DROP TABLE tpcds.warehouse_t13;
    65. postgres=# DROP TABLE tpcds.warehouse_t14;
    66. postgres=# DROP TABLE tpcds.warehouse_t15;
    67. postgres=# DROP TABLE tpcds.warehouse_t16;
    68. postgres=# DROP TABLE tpcds.warehouse_t17;
    69. postgres=# DROP TABLE tpcds.warehouse_t18;
    70. postgres=# DROP TABLE tpcds.warehouse_t20;
    71. postgres=# DROP TABLE tpcds.warehouse_t21;
    72. postgres=# DROP TABLE tpcds.warehouse_t22;
    73. postgres=# DROP TABLE joe.warehouse_t23;
    74. postgres=# DROP TABLE tpcds.warehouse_t24;
    75. postgres=# DROP TABLE tpcds.warehouse_t25;
    76. postgres=# DROP TABLESPACE DS_TABLESPACE1;