From 59d3d6286f42e096cb6a979ee29eebc76f983b60 Mon Sep 17 00:00:00 2001 From: liyang <55490377@qq.com> Date: Thu, 4 Jun 2020 20:55:53 +0800 Subject: [PATCH] Modify the display directory. --- ...te executables\346\212\245\351\224\231.md" | 12 + ...1&\351\253\230\346\200\247\350\203\275.md" | 4 + .../docs/Developerguide/ALTER DATA SOURCE.md | 103 + .../zh/docs/Developerguide/ALTER DATABASE.md | 142 ++ .../ALTER DEFAULT PRIVILEGES.md | 141 ++ .../zh/docs/Developerguide/ALTER DIRECTORY.md | 41 + .../zh/docs/Developerguide/ALTER FUNCTION.md | 190 ++ content/zh/docs/Developerguide/ALTER GROUP.md | 43 + content/zh/docs/Developerguide/ALTER INDEX.md | 165 ++ .../docs/Developerguide/ALTER LARGE OBJECT.md | 36 + content/zh/docs/Developerguide/ALTER ROLE.md | 120 ++ .../ALTER ROW LEVEL SECURITY POLICY.md | 107 + .../zh/docs/Developerguide/ALTER SCHEMA.md | 76 + .../zh/docs/Developerguide/ALTER SEQUENCE.md | 76 + .../zh/docs/Developerguide/ALTER SESSION.md | 85 + .../ALTER SYSTEM KILL SESSION.md | 51 + .../Developerguide/ALTER TABLE PARTITION.md | 244 +++ content/zh/docs/Developerguide/ALTER TABLE.md | 433 ++++ .../docs/Developerguide/ALTER TABLESPACE.md | 120 ++ .../ALTER TEXT SEARCH CONFIGURATION.md | 175 ++ .../ALTER TEXT SEARCH DICTIONARY.md | 101 + .../zh/docs/Developerguide/ALTER TRIGGER.md | 45 + content/zh/docs/Developerguide/ALTER TYPE.md | 152 ++ content/zh/docs/Developerguide/ALTER USER.md | 113 + content/zh/docs/Developerguide/ALTER VIEW.md | 130 ++ .../zh/docs/Developerguide/ANALYZE ANALYSE.md | 192 ++ content/zh/docs/Developerguide/COMMIT END.md | 67 + .../zh/docs/Developerguide/COMMIT PREPARED.md | 35 + .../docs/Developerguide/CREATE DATA SOURCE.md | 92 + .../zh/docs/Developerguide/CREATE DATABASE.md | 170 ++ .../docs/Developerguide/CREATE DIRECTORY.md | 57 + .../zh/docs/Developerguide/CREATE FUNCTION.md | 308 +++ .../zh/docs/Developerguide/CREATE GROUP.md | 61 + .../zh/docs/Developerguide/CREATE INDEX.md | 305 +++ .../docs/Developerguide/CREATE PROCEDURE.md | 95 + content/zh/docs/Developerguide/CREATE ROLE.md | 239 +++ .../CREATE ROW LEVLEL SECURITY POLICY.md | 224 ++ .../zh/docs/Developerguide/CREATE SCHEMA.md | 81 + .../zh/docs/Developerguide/CREATE SEQUENCE.md | 140 ++ .../zh/docs/Developerguide/CREATE TABLE AS.md | 134 ++ .../Developerguide/CREATE TABLE PARTITION.md | 643 ++++++ .../zh/docs/Developerguide/CREATE TABLE.md | 931 +++++++++ .../docs/Developerguide/CREATE TABLESPACE.md | 131 ++ .../CREATE TEXT SEARCH CONFIGURATION.md | 123 ++ .../CREATE TEXT SEARCH DICTIONARY.md | 143 ++ .../zh/docs/Developerguide/CREATE TRIGGER.md | 352 ++++ content/zh/docs/Developerguide/CREATE TYPE.md | 399 ++++ content/zh/docs/Developerguide/CREATE USER.md | 116 ++ content/zh/docs/Developerguide/CREATE VIEW.md | 74 + .../docs/Developerguide/DROP DATA SOURCE.md | 51 + .../zh/docs/Developerguide/DROP DATABASE.md | 52 + .../zh/docs/Developerguide/DROP DIRECTORY.md | 39 + .../zh/docs/Developerguide/DROP FUNCTION.md | 54 + content/zh/docs/Developerguide/DROP GROUP.md | 26 + content/zh/docs/Developerguide/DROP INDEX.md | 50 + content/zh/docs/Developerguide/DROP OWNED.md | 34 + .../zh/docs/Developerguide/DROP PROCEDURE.md | 33 + content/zh/docs/Developerguide/DROP ROLE.md | 37 + .../DROP ROW LEVEL SECURITY POLICY.md | 53 + content/zh/docs/Developerguide/DROP SCHEMA.md | 47 + .../zh/docs/Developerguide/DROP SEQUENCE.md | 49 + content/zh/docs/Developerguide/DROP TABLE.md | 44 + .../zh/docs/Developerguide/DROP TABLESPACE.md | 48 + .../DROP TEXT SEARCH CONFIGURATION.md | 43 + .../DROP TEXT SEARCH DICTIONARY.md | 52 + .../zh/docs/Developerguide/DROP TRIGGER.md | 47 + content/zh/docs/Developerguide/DROP TYPE.md | 39 + content/zh/docs/Developerguide/DROP USER.md | 54 + content/zh/docs/Developerguide/DROP VIEW.md | 41 + .../zh/docs/Developerguide/EXPLAIN PLAN.md | 79 + content/zh/docs/Developerguide/MERGE INTO.md | 136 ++ .../Developerguide/PREPARE TRANSACTION.md | 37 + .../zh/docs/Developerguide/REASSIGN OWNED.md | 34 + .../docs/Developerguide/RELEASE SAVEPOINT.md | 63 + .../docs/Developerguide/ROLLBACK PREPARED.md | 28 + .../Developerguide/ROLLBACK TO SAVEPOINT.md | 53 + content/zh/docs/Developerguide/SELECT INTO.md | 69 + .../zh/docs/Developerguide/SET CONSTRAINTS.md | 54 + content/zh/docs/Developerguide/SET ROLE.md | 72 + .../SET SESSION AUTHORIZATION.md | 76 + .../zh/docs/Developerguide/SET TRANSACTION.md | 60 + ...\344\271\246\347\256\241\347\220\206 6.md" | 9 + .../docs/Developerguide/START TRANSACTION.md | 84 + ...70\345\205\263\346\236\204\351\200\240.md" | 115 ++ .../java sql CallableStatement.md | 135 ++ .../Developerguide/java sql Connection.md | 119 ++ .../java sql DatabaseMetaData.md | 438 ++++ .../zh/docs/Developerguide/java sql Driver.md | 53 + .../java sql PreparedStatement.md | 164 ++ .../docs/Developerguide/java sql ResultSet.md | 239 +++ .../java sql ResultSetMetaData.md | 46 + .../docs/Developerguide/java sql Statement.md | 106 + .../Developerguide/javax naming Context.md | 88 + .../javax naming spi InitialContextFactory.md | 25 + .../javax sql ConnectionPoolDataSource.md | 60 + .../Developerguide/javax sql DataSource.md | 60 + .../javax sql PooledConnection.md | 60 + .../zh/docs/Developerguide/openGauss SQL.md | 31 + .../\344\273\213\347\273\215 17.md" | 10 + ...74\345\205\245\346\225\260\346\215\256.md" | 11 + ...61\345\261\202\345\244\215\345\210\266.md" | 31 + ...61\345\261\202\345\244\215\345\210\266.md" | 40 + ...74\345\205\245\346\225\260\346\215\256.md" | 9 + ...357\274\210postgresql conf\357\274\211.md" | 381 ++++ ...\345\205\245\350\256\244\350\257\201 0.md" | 15 + ...346\225\260\346\215\256\345\272\223 13.md" | 95 + ...66\351\227\264\347\261\273\345\236\213.md" | 616 ++++++ ...344\270\255\346\225\260\346\215\256 11.md" | 7 + ...\350\277\236\346\216\245\346\225\260 5.md" | 116 ++ .../\346\246\202\350\277\260 12.md" | 77 + .../\346\246\202\350\277\260 14.md" | 4 + .../\346\246\202\350\277\260 15.md" | 47 + ...32\204TCP IP\350\277\236\346\216\245 4.md" | 30 + ...\232\204TCP IP\350\277\236\346\216\245.md" | 30 + ...32\204TCP IP\350\277\236\346\216\245 3.md" | 544 +++++ ...\232\204TCP IP\350\277\236\346\216\245.md" | 543 +++++ .../\347\244\272\344\276\213 10.md" | 446 ++++ ...74\345\207\272\346\225\260\346\215\256.md" | 111 + ...60\346\215\256\350\277\201\347\247\273.md" | 91 + ...\345\205\250\347\255\226\347\225\245 9.md" | 211 ++ ...\344\271\246\346\233\277\346\215\242 8.md" | 62 + ...\344\271\246\347\224\237\346\210\220 7.md" | 269 +++ ...\345\205\245\350\256\244\350\257\201 1.md" | 115 ++ ...\344\273\266\345\217\202\350\200\203 2.md" | 133 ++ .../\351\231\204\345\275\225 16.md" | 9 + ...357\274\210postgresql conf\357\274\211.md" | 381 ++++ .../Quickstart/\347\244\272\344\276\213 0.md" | 175 ++ content/zh/docs/Toolreference/X Tuner.md | 13 + content/zh/docs/Toolreference/kadmin local.md | 10 + ...\347\224\250\346\214\207\345\257\274 0.md" | 27 + ...347\224\250\346\214\207\345\257\274 10.md" | 182 ++ ...\347\224\250\346\214\207\345\257\274 5.md" | 75 + ...\344\273\244\345\217\202\350\200\203 2.md" | 100 + ...\344\273\244\345\217\202\350\200\203 7.md" | 44 + ...351\242\230\345\244\204\347\220\206 11.md" | 7 + ...\351\242\230\345\244\204\347\220\206 3.md" | 5 + ...\351\242\230\345\244\204\347\220\206 8.md" | 7 + ...51\224\231 Failed to obtain the GPHOME.md" | 28 + .../\346\246\202\350\277\260 4.md" | 4 + .../\346\246\202\350\277\260 9.md" | 4 + ...\345\217\226\345\270\256\345\212\251 1.md" | 50 + ...\345\217\226\345\270\256\345\212\251 6.md" | 31 + .../completing the installation.md | 1 + .../configurations during installation.md | 1 + .../installation/starting installation.md | 1 + content/zh/menu/index.md | 1818 +++++++++-------- 146 files changed, 17612 insertions(+), 908 deletions(-) create mode 100644 "content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263Configure error Ccompiler cannot create executables\346\212\245\351\224\231.md" create mode 100644 "content/zh/docs/Description/\351\253\230\345\271\266\345\217\221&\351\253\230\346\200\247\350\203\275.md" create mode 100644 content/zh/docs/Developerguide/ALTER DATA SOURCE.md create mode 100644 content/zh/docs/Developerguide/ALTER DATABASE.md create mode 100644 content/zh/docs/Developerguide/ALTER DEFAULT PRIVILEGES.md create mode 100644 content/zh/docs/Developerguide/ALTER DIRECTORY.md create mode 100644 content/zh/docs/Developerguide/ALTER FUNCTION.md create mode 100644 content/zh/docs/Developerguide/ALTER GROUP.md create mode 100644 content/zh/docs/Developerguide/ALTER INDEX.md create mode 100644 content/zh/docs/Developerguide/ALTER LARGE OBJECT.md create mode 100644 content/zh/docs/Developerguide/ALTER ROLE.md create mode 100644 content/zh/docs/Developerguide/ALTER ROW LEVEL SECURITY POLICY.md create mode 100644 content/zh/docs/Developerguide/ALTER SCHEMA.md create mode 100644 content/zh/docs/Developerguide/ALTER SEQUENCE.md create mode 100644 content/zh/docs/Developerguide/ALTER SESSION.md create mode 100644 content/zh/docs/Developerguide/ALTER SYSTEM KILL SESSION.md create mode 100644 content/zh/docs/Developerguide/ALTER TABLE PARTITION.md create mode 100644 content/zh/docs/Developerguide/ALTER TABLE.md create mode 100644 content/zh/docs/Developerguide/ALTER TABLESPACE.md create mode 100644 content/zh/docs/Developerguide/ALTER TEXT SEARCH CONFIGURATION.md create mode 100644 content/zh/docs/Developerguide/ALTER TEXT SEARCH DICTIONARY.md create mode 100644 content/zh/docs/Developerguide/ALTER TRIGGER.md create mode 100644 content/zh/docs/Developerguide/ALTER TYPE.md create mode 100644 content/zh/docs/Developerguide/ALTER USER.md create mode 100644 content/zh/docs/Developerguide/ALTER VIEW.md create mode 100644 content/zh/docs/Developerguide/ANALYZE ANALYSE.md create mode 100644 content/zh/docs/Developerguide/COMMIT END.md create mode 100644 content/zh/docs/Developerguide/COMMIT PREPARED.md create mode 100644 content/zh/docs/Developerguide/CREATE DATA SOURCE.md create mode 100644 content/zh/docs/Developerguide/CREATE DATABASE.md create mode 100644 content/zh/docs/Developerguide/CREATE DIRECTORY.md create mode 100644 content/zh/docs/Developerguide/CREATE FUNCTION.md create mode 100644 content/zh/docs/Developerguide/CREATE GROUP.md create mode 100644 content/zh/docs/Developerguide/CREATE INDEX.md create mode 100644 content/zh/docs/Developerguide/CREATE PROCEDURE.md create mode 100644 content/zh/docs/Developerguide/CREATE ROLE.md create mode 100644 content/zh/docs/Developerguide/CREATE ROW LEVLEL SECURITY POLICY.md create mode 100644 content/zh/docs/Developerguide/CREATE SCHEMA.md create mode 100644 content/zh/docs/Developerguide/CREATE SEQUENCE.md create mode 100644 content/zh/docs/Developerguide/CREATE TABLE AS.md create mode 100644 content/zh/docs/Developerguide/CREATE TABLE PARTITION.md create mode 100644 content/zh/docs/Developerguide/CREATE TABLE.md create mode 100644 content/zh/docs/Developerguide/CREATE TABLESPACE.md create mode 100644 content/zh/docs/Developerguide/CREATE TEXT SEARCH CONFIGURATION.md create mode 100644 content/zh/docs/Developerguide/CREATE TEXT SEARCH DICTIONARY.md create mode 100644 content/zh/docs/Developerguide/CREATE TRIGGER.md create mode 100644 content/zh/docs/Developerguide/CREATE TYPE.md create mode 100644 content/zh/docs/Developerguide/CREATE USER.md create mode 100644 content/zh/docs/Developerguide/CREATE VIEW.md create mode 100644 content/zh/docs/Developerguide/DROP DATA SOURCE.md create mode 100644 content/zh/docs/Developerguide/DROP DATABASE.md create mode 100644 content/zh/docs/Developerguide/DROP DIRECTORY.md create mode 100644 content/zh/docs/Developerguide/DROP FUNCTION.md create mode 100644 content/zh/docs/Developerguide/DROP GROUP.md create mode 100644 content/zh/docs/Developerguide/DROP INDEX.md create mode 100644 content/zh/docs/Developerguide/DROP OWNED.md create mode 100644 content/zh/docs/Developerguide/DROP PROCEDURE.md create mode 100644 content/zh/docs/Developerguide/DROP ROLE.md create mode 100644 content/zh/docs/Developerguide/DROP ROW LEVEL SECURITY POLICY.md create mode 100644 content/zh/docs/Developerguide/DROP SCHEMA.md create mode 100644 content/zh/docs/Developerguide/DROP SEQUENCE.md create mode 100644 content/zh/docs/Developerguide/DROP TABLE.md create mode 100644 content/zh/docs/Developerguide/DROP TABLESPACE.md create mode 100644 content/zh/docs/Developerguide/DROP TEXT SEARCH CONFIGURATION.md create mode 100644 content/zh/docs/Developerguide/DROP TEXT SEARCH DICTIONARY.md create mode 100644 content/zh/docs/Developerguide/DROP TRIGGER.md create mode 100644 content/zh/docs/Developerguide/DROP TYPE.md create mode 100644 content/zh/docs/Developerguide/DROP USER.md create mode 100644 content/zh/docs/Developerguide/DROP VIEW.md create mode 100644 content/zh/docs/Developerguide/EXPLAIN PLAN.md create mode 100644 content/zh/docs/Developerguide/MERGE INTO.md create mode 100644 content/zh/docs/Developerguide/PREPARE TRANSACTION.md create mode 100644 content/zh/docs/Developerguide/REASSIGN OWNED.md create mode 100644 content/zh/docs/Developerguide/RELEASE SAVEPOINT.md create mode 100644 content/zh/docs/Developerguide/ROLLBACK PREPARED.md create mode 100644 content/zh/docs/Developerguide/ROLLBACK TO SAVEPOINT.md create mode 100644 content/zh/docs/Developerguide/SELECT INTO.md create mode 100644 content/zh/docs/Developerguide/SET CONSTRAINTS.md create mode 100644 content/zh/docs/Developerguide/SET ROLE.md create mode 100644 content/zh/docs/Developerguide/SET SESSION AUTHORIZATION.md create mode 100644 content/zh/docs/Developerguide/SET TRANSACTION.md create mode 100644 "content/zh/docs/Developerguide/SSL\350\257\201\344\271\246\347\256\241\347\220\206 6.md" create mode 100644 content/zh/docs/Developerguide/START TRANSACTION.md create mode 100644 "content/zh/docs/Developerguide/UNION CASE\345\222\214\347\233\270\345\205\263\346\236\204\351\200\240.md" create mode 100644 content/zh/docs/Developerguide/java sql CallableStatement.md create mode 100644 content/zh/docs/Developerguide/java sql Connection.md create mode 100644 content/zh/docs/Developerguide/java sql DatabaseMetaData.md create mode 100644 content/zh/docs/Developerguide/java sql Driver.md create mode 100644 content/zh/docs/Developerguide/java sql PreparedStatement.md create mode 100644 content/zh/docs/Developerguide/java sql ResultSet.md create mode 100644 content/zh/docs/Developerguide/java sql ResultSetMetaData.md create mode 100644 content/zh/docs/Developerguide/java sql Statement.md create mode 100644 content/zh/docs/Developerguide/javax naming Context.md create mode 100644 content/zh/docs/Developerguide/javax naming spi InitialContextFactory.md create mode 100644 content/zh/docs/Developerguide/javax sql ConnectionPoolDataSource.md create mode 100644 content/zh/docs/Developerguide/javax sql DataSource.md create mode 100644 content/zh/docs/Developerguide/javax sql PooledConnection.md create mode 100644 content/zh/docs/Developerguide/openGauss SQL.md create mode 100644 "content/zh/docs/Developerguide/\344\273\213\347\273\215 17.md" create mode 100644 "content/zh/docs/Developerguide/\344\275\277\347\224\250COPY FROM STDIN\345\257\274\345\205\245\346\225\260\346\215\256.md" create mode 100644 "content/zh/docs/Developerguide/\344\275\277\347\224\250CREATE TABLE LIKE\346\211\247\350\241\214\346\267\261\345\261\202\345\244\215\345\210\266.md" create mode 100644 "content/zh/docs/Developerguide/\344\275\277\347\224\250CREATE TABLE\346\211\247\350\241\214\346\267\261\345\261\202\345\244\215\345\210\266.md" create mode 100644 "content/zh/docs/Developerguide/\345\205\263\344\272\216COPY FROM STDIN\345\257\274\345\205\245\346\225\260\346\215\256.md" create mode 100644 "content/zh/docs/Developerguide/\345\256\211\345\205\250\345\222\214\350\256\244\350\257\201\357\274\210postgresql conf\357\274\211.md" create mode 100644 "content/zh/docs/Developerguide/\345\256\242\346\210\267\347\253\257\346\216\245\345\205\245\350\256\244\350\257\201 0.md" create mode 100644 "content/zh/docs/Developerguide/\345\257\274\345\207\272\346\211\200\346\234\211\346\225\260\346\215\256\345\272\223 13.md" create mode 100644 "content/zh/docs/Developerguide/\346\227\245\346\234\237 \346\227\266\351\227\264\347\261\273\345\236\213.md" create mode 100644 "content/zh/docs/Developerguide/\346\233\264\346\226\260\350\241\250\344\270\255\346\225\260\346\215\256 11.md" create mode 100644 "content/zh/docs/Developerguide/\346\237\245\347\234\213\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\225\260 5.md" create mode 100644 "content/zh/docs/Developerguide/\346\246\202\350\277\260 12.md" create mode 100644 "content/zh/docs/Developerguide/\346\246\202\350\277\260 14.md" create mode 100644 "content/zh/docs/Developerguide/\346\246\202\350\277\260 15.md" create mode 100644 "content/zh/docs/Developerguide/\347\224\250SSH\351\232\247\351\201\223\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245 4.md" create mode 100644 "content/zh/docs/Developerguide/\347\224\250SSH\351\232\247\351\201\223\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245.md" create mode 100644 "content/zh/docs/Developerguide/\347\224\250SSL\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245 3.md" create mode 100644 "content/zh/docs/Developerguide/\347\224\250SSL\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245.md" create mode 100644 "content/zh/docs/Developerguide/\347\244\272\344\276\213 10.md" create mode 100644 "content/zh/docs/Developerguide/\347\244\272\344\276\2131 \351\200\232\350\277\207\346\234\254\345\234\260\346\226\207\344\273\266\345\257\274\345\205\245\345\257\274\345\207\272\346\225\260\346\215\256.md" create mode 100644 "content/zh/docs/Developerguide/\347\244\272\344\276\2132 \344\273\216MySQL\345\220\221openGauss\350\277\233\350\241\214\346\225\260\346\215\256\350\277\201\347\247\273.md" create mode 100644 "content/zh/docs/Developerguide/\350\256\276\347\275\256\346\226\207\344\273\266\346\235\203\351\231\220\345\256\211\345\205\250\347\255\226\347\225\245 9.md" create mode 100644 "content/zh/docs/Developerguide/\350\257\201\344\271\246\346\233\277\346\215\242 8.md" create mode 100644 "content/zh/docs/Developerguide/\350\257\201\344\271\246\347\224\237\346\210\220 7.md" create mode 100644 "content/zh/docs/Developerguide/\351\205\215\347\275\256\345\256\242\346\210\267\347\253\257\346\216\245\345\205\245\350\256\244\350\257\201 1.md" create mode 100644 "content/zh/docs/Developerguide/\351\205\215\347\275\256\346\226\207\344\273\266\345\217\202\350\200\203 2.md" create mode 100644 "content/zh/docs/Developerguide/\351\231\204\345\275\225 16.md" create mode 100644 "content/zh/docs/Quickstart/\345\256\211\345\205\250\345\222\214\350\256\244\350\257\201\357\274\210postgresql conf\357\274\211.md" create mode 100644 "content/zh/docs/Quickstart/\347\244\272\344\276\213 0.md" create mode 100644 content/zh/docs/Toolreference/X Tuner.md create mode 100644 content/zh/docs/Toolreference/kadmin local.md create mode 100644 "content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 0.md" create mode 100644 "content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 10.md" create mode 100644 "content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 5.md" create mode 100644 "content/zh/docs/Toolreference/\345\221\275\344\273\244\345\217\202\350\200\203 2.md" create mode 100644 "content/zh/docs/Toolreference/\345\221\275\344\273\244\345\217\202\350\200\203 7.md" create mode 100644 "content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 11.md" create mode 100644 "content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 3.md" create mode 100644 "content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 8.md" create mode 100644 "content/zh/docs/Toolreference/\346\211\247\350\241\214\345\221\275\344\273\244\346\212\245\351\224\231 Failed to obtain the GPHOME.md" create mode 100644 "content/zh/docs/Toolreference/\346\246\202\350\277\260 4.md" create mode 100644 "content/zh/docs/Toolreference/\346\246\202\350\277\260 9.md" create mode 100644 "content/zh/docs/Toolreference/\350\216\267\345\217\226\345\270\256\345\212\251 1.md" create mode 100644 "content/zh/docs/Toolreference/\350\216\267\345\217\226\345\270\256\345\212\251 6.md" create mode 100644 content/zh/docs/installation/completing the installation.md create mode 100644 content/zh/docs/installation/configurations during installation.md create mode 100644 content/zh/docs/installation/starting installation.md diff --git "a/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263Configure error Ccompiler cannot create executables\346\212\245\351\224\231.md" "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263Configure error Ccompiler cannot create executables\346\212\245\351\224\231.md" new file mode 100644 index 000000000..d5d42c1f5 --- /dev/null +++ "b/content/zh/docs/Compilationguide/\345\246\202\344\275\225\350\247\243\345\206\263Configure error Ccompiler cannot create executables\346\212\245\351\224\231.md" @@ -0,0 +1,12 @@ +# 如何解决“Configure error: Ccompiler cannot create executables”报错 + +## 问题 + +如何解决版本编译时出现的“Configure error: Ccompiler cannot create executables”报错。 + +## 回答 + +报错原因:子仓库文件不完整或者被删除。 + +解决办法:进入/sda/openGauss-server/binarylibs, 执行命令**git pull && git lfs pull**下载缺失的文件,并重新执行当前脚本或命令。 + diff --git "a/content/zh/docs/Description/\351\253\230\345\271\266\345\217\221&\351\253\230\346\200\247\350\203\275.md" "b/content/zh/docs/Description/\351\253\230\345\271\266\345\217\221&\351\253\230\346\200\247\350\203\275.md" new file mode 100644 index 000000000..36f30ccf7 --- /dev/null +++ "b/content/zh/docs/Description/\351\253\230\345\271\266\345\217\221&\351\253\230\346\200\247\350\203\275.md" @@ -0,0 +1,4 @@ +# 高并发&高性能 + +openGauss通过服务器端的线程池,可以支持1W并发链接。通过NUMA化内核数据结构,支持线程亲核性处理,可以支持百万级tpmC。通过页面的高效冷热淘汰,支持T级别大内存缓冲区管理。通过CSN快照,去除快照瓶颈,实现多版本访问,读写互不阻塞。通过增量检查点,避免全页写导致的性能波动,实现业务性能平稳运行。 + diff --git a/content/zh/docs/Developerguide/ALTER DATA SOURCE.md b/content/zh/docs/Developerguide/ALTER DATA SOURCE.md new file mode 100644 index 000000000..123c50d1d --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER DATA SOURCE.md @@ -0,0 +1,103 @@ +# ALTER DATA SOURCE + +## **功能描述** + +修改Data Source对象的属性和内容。 + +属性有:名称和属主;内容有:类型、版本和连接选项。 + +## **注意选项** + +- 只有初始用户/系统管理员/属主才拥有修改Data Source的权限。 +- 修改属主时,新的属主用户必须是初始用户或系统管理员。 +- 当在OPTIONS中出现password选项时,需要保证openGauss每个节点的$GAUSSHOME/bin目录下存在datasource.key.cipher和datasource.key.rand文件,如果不存在这两个文件,请使用gs\_guc工具生成并使用gs\_ssh工具发布到openGauss每个节点的$GAUSSHOME/bin目录下。 + +## **语法格式** + +``` +ALTER DATA SOURCE src_name + [TYPE 'type_str'] + [VERSION {'version_str' | NULL}] + [OPTIONS ( {[ ADD | SET | DROP ] optname ['optvalue']} [, ...] )]; +ALTER DATA SOURCE src_name RENAME TO src_new_name; +ALTER DATA SOURCE src_name OWNER TO new_owner; +``` + +## **参数说明** + +- **src\_name** + + 待修改的Data Source的名称。 + + 取值范围:字符串,需要符合标识符的命名规范。 + +- **TYPE** + + 将Data Source原来的TYPE修改为指定值。 + + 取值范围:空串或非空字符串。 + +- **VERSION** + + 将Data Source原来的VERSION修改为指定值。 + + 取值范围:空串或非空字符串或NULL。 + +- **OPTIONS** + + 修改OPTIONS中的字段:增加(ADD)、修改(SET)、删除(DROP),且字段名称optname需唯一,具体要求如下: + + 增加字段:ADD可以省略,待增加字段不能已经存在了; + + 修改字段:SET不可省略,待修改字段必须存在; + + 删除字段:DROP不可省略,待删除字段必须存在,且不能指定optvalue; + +- **src\_new\_name** + + 新的Data Source名称。 + + 取值范围:字符串,需符合标识符命名规范。 + +- **new\_user** + + 对象的新属主。 + + 取值范围:字符串,有效的用户名。 + + +## **示例** + +``` +--创建一个空Data Source对象。 +postgres=# CREATE DATA SOURCE ds_test1; + +--修改名称。 +postgres=# ALTER DATA SOURCE ds_test1 RENAME TO ds_test; + +--修改属主。 +postgres=# CREATE USER user_test1 IDENTIFIED BY 'Gs@123456'; +postgres=# ALTER USER user_test1 WITH SYSADMIN; +postgres=# ALTER DATA SOURCE ds_test OWNER TO user_test1; + +--修改TYPE和VERSION。 +postgres=# ALTER DATA SOURCE ds_test TYPE 'MPPDB_TYPE' VERSION 'XXX'; + +--添加字段。 +postgres=# ALTER DATA SOURCE ds_test OPTIONS (add dsn 'gaussdb', username 'test_user'); + +--修改字段。 +postgres=# ALTER DATA SOURCE ds_test OPTIONS (set dsn 'unknown'); + +--删除字段。 +postgres=# ALTER DATA SOURCE ds_test OPTIONS (drop username); + +--删除Data Source和user对象。 +postgres=# DROP DATA SOURCE ds_test; +postgres=# DROP USER user_test1; +``` + +## **相关链接** + +**[CREATE DATA SOURCE](CREATE-DATA-SOURCE.md#ZH-CN_TOPIC_0242370564)**,**[DROP DATA SOURCE](DROP-DATA-SOURCE.md#ZH-CN_TOPIC_0242370599)** + diff --git a/content/zh/docs/Developerguide/ALTER DATABASE.md b/content/zh/docs/Developerguide/ALTER DATABASE.md new file mode 100644 index 000000000..625676483 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER DATABASE.md @@ -0,0 +1,142 @@ +# ALTER DATABASE + +## 功能描述 + +修改数据库的属性,包括它的名称、所有者、连接数限制、对象隔离属性等。 + +## 注意事项 + +- 只有拥有数据库所有者权限的用户才能执行ALTER DATABASE命令,系统管理员默认拥有此权限。如果是非系统管理员,针对所要修改属性的不同,对其还有以下权限约束: + - 修改数据库名称,必须拥有CREATEDB权限。 + - 修改数据库所有者,当前用户必须是该database的所有者,必须拥有CREATEDB权限,且该用户是新所有者角色的成员。 + - 修改数据库默认表空间,该用户必须是该database的所有者或系统管理员,必须拥有新表空间的CREATE权限。这个语句会从物理上将一个数据库原来缺省表空间上的表和索引移至新的表空间。注意不在缺省表空间的表和索引不受此影响。 + - 修改某个按数据库设置的相关参数,只有数据库所有者或者系统管理员可以改变这些设置。 + - 修改某个数据库对象隔离属性,只有数据库所有者或者系统管理员可以执行此操作。 + +- 不能重命名当前使用的数据库,如果需要重新命名,须连接至其他数据库上。 + +## 语法格式 + +- 修改数据库的最大连接数。 + + ``` + ALTER DATABASE database_name + [ [ WITH ] CONNECTION LIMIT connlimit ]; + ``` + +- 修改数据库名称。 + + ``` + ALTER DATABASE database_name + RENAME TO new_name; + ``` + +- 修改数据库所属者。 + + ``` + ALTER DATABASE database_name + OWNER TO new_owner; + ``` + +- 修改数据库默认表空间。 + + ``` + ALTER DATABASE database_name + SET TABLESPACE new_tablespace; + ``` + +- 修改数据库指定会话参数值。 + + ``` + ALTER DATABASE database_name + SET configuration_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }; + ``` + +- 数据库配置参数重置。 + + ``` + ALTER DATABASE database_name RESET + { configuration_parameter | ALL }; + ``` + + +- 修改数据库对象隔离属性。 + + ``` + ALTER DATABASE database_name [ WITH ] { ENABLE | DISABLE } PRIVATE OBJECT; + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- 修改数据库的对象隔离属性时须连接至该数据库,否则无法更改。 + >- 新创建的数据库,对象隔离属性默认是关闭的。当开启数据库对象隔离属性后,普通用户只能查看有权访问的对象(表、函数、视图、字段等)。对象隔离特性对管理员用户不生效,当开启对象隔离特性后,管理员也可以查看到全量的数据库对象。 + + +## 参数说明 + +- **database\_name** + + 需要修改属性的数据库名称。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **connlimit** + + 数据库可以接收的最大并发连接数(管理员用户连接除外)。 + + 取值范围:整数,建议填写1\~50的整数。-1(缺省)表示没有限制。 + +- **new\_name** + + 数据库的新名称。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **new\_owner** + + 数据库的新所有者。 + + 取值范围:字符串,有效的用户名。 + +- **new\_tablespace** + + 数据库新的默认表空间,该表空间为数据库中已经存在的表空间。默认的表空间为pg\_default。 + + 取值范围:字符串,有效的表空间名。 + +- **configuration\_parameter** + + **value** + + 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 + + 取值范围:字符串, + + - DEFAULT + - OFF + - RESET + +- **FROM CURRENT** + + 根据当前会话连接的数据库设置该参数的值。 + +- **RESET configuration\_parameter** + + 重置指定的数据库会话参数值。 + +- **RESET ALL** + + 重置全部的数据库会话参数值。 + + +>![](public_sys-resources/icon-note.gif) **说明:** +>- 修改数据库默认表空间,会将旧表空间中的所有表和索引转移到新表空间中,该操作不会影响其他非默认表空间中的表和索引。 +>- 修改的数据库会话参数值,将在下一次会话中生效。 + +## 示例 + +请参考CREATE DATABASE的[示例](CREATE-DATABASE.md#zh-cn_topic_0237122099_zh-cn_topic_0059778277_s6be7b8abbb4b4aceb9dae686434d672c)。 + +## 相关链接 + +[CREATE DATABASE](CREATE-DATABASE.md),[DROP DATABASE](DROP-DATABASE.md#ZH-CN_TOPIC_0242370597) + diff --git a/content/zh/docs/Developerguide/ALTER DEFAULT PRIVILEGES.md b/content/zh/docs/Developerguide/ALTER DEFAULT PRIVILEGES.md new file mode 100644 index 000000000..c80963f50 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER DEFAULT PRIVILEGES.md @@ -0,0 +1,141 @@ +# ALTER DEFAULT PRIVILEGES + +## 功能描述 + +设置应用于将来创建的对象的权限(这不会影响分配到已有对象中的权限)。 + +## 注意事项 + +目前只支持表(包括视图)、 函数和类型(包括域)的权限更改。 + +## 语法格式 + +``` +ALTER DEFAULT PRIVILEGES + [ FOR { ROLE | USER } target_role [, ...] ] + [ IN SCHEMA schema_name [, ...] ] + abbreviated_grant_or_revoke; +``` + +- 其中abbreviated\_grant\_or\_revoke子句用于指定对哪些对象进行授权或回收权限。 + + ``` + grant_on_tables_clause + | grant_on_functions_clause + | grant_on_types_clause + | revoke_on_tables_clause + | revoke_on_functions_clause + | revoke_on_types_clause + ``` + + +- 其中grant\_on\_tables\_clause子句用于对表授权。 + + ``` + GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES } + [, ...] | ALL [ PRIVILEGES ] } + ON TABLES + TO { [ GROUP ] role_name | PUBLIC } [, ...] + [ WITH GRANT OPTION ] + ``` + +- 其中grant\_on\_functions\_clause子句用于对函数授权。 + + ``` + GRANT { EXECUTE | ALL [ PRIVILEGES ] } + ON FUNCTIONS + TO { [ GROUP ] role_name | PUBLIC } [, ...] + [ WITH GRANT OPTION ] + ``` + +- 其中grant\_on\_types\_clause子句用于对类型授权。 + + ``` + GRANT { USAGE | ALL [ PRIVILEGES ] } + ON TYPES + TO { [ GROUP ] role_name | PUBLIC } [, ...] + [ WITH GRANT OPTION ] + ``` + +- 其中revoke\_on\_tables\_clause子句用于回收表对象的权限。 + + ``` + REVOKE [ GRANT OPTION FOR ] + { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES } + [, ...] | ALL [ PRIVILEGES ] } + ON TABLES + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ] + ``` + +- 其中revoke\_on\_functions\_clause子句用于回收函数的权限。 + + ``` + REVOKE [ GRANT OPTION FOR ] + { EXECUTE | ALL [ PRIVILEGES ] } + ON FUNCTIONS + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ] + ``` + +- 其中revoke\_on\_types\_clause子句用于回收类型的权限。 + + ``` + REVOKE [ GRANT OPTION FOR ] + { USAGE | ALL [ PRIVILEGES ] } + ON TYPES + FROM { [ GROUP ] role_name | PUBLIC } [, ...] + [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ] + ``` + + +## 参数说明 + +- **target\_role** + + 已有角色的名称。如果省略FOR ROLE/USER,则缺省值为当前角色/用户。 + + 取值范围:已有角色的名称。 + +- **schema\_name** + + 现有模式的名称。 + + target\_role必须有schema\_name的CREATE权限。 + + 取值范围:现有模式的名称。 + +- **role\_name** + + 被授予或者取消权限角色的名称。 + + 取值范围:已存在的角色名称。 + + +>![](public_sys-resources/icon-notice.gif) **须知:** +>如果想删除一个被赋予了默认权限的角色,有必要恢复改变的缺省权限或者使用DROP OWNED BY来为角色脱离缺省的权限记录。 + +## 示例 + +``` +--将创建在模式tpcds里的所有表(和视图)的SELECT权限授予每一个用户。 +postgres=# ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds GRANT SELECT ON TABLES TO PUBLIC; + +--创建用户普通用户jack。 +postgres=# CREATE USER jack PASSWORD 'Bigdata@123'; + +--将tpcds下的所有表的插入权限授予用户jack。 +postgres=# ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds GRANT INSERT ON TABLES TO jack; + +--撤销上述权限。 +postgres=# ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds REVOKE SELECT ON TABLES FROM PUBLIC; +postgres=# ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds REVOKE INSERT ON TABLES FROM jack; + +--删除用户jack。 +postgres=# DROP USER jack; +``` + +## 相关链接 + +[GRANT](GRANT.md),[REVOKE](REVOKE.md) + diff --git a/content/zh/docs/Developerguide/ALTER DIRECTORY.md b/content/zh/docs/Developerguide/ALTER DIRECTORY.md new file mode 100644 index 000000000..ec687d8d7 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER DIRECTORY.md @@ -0,0 +1,41 @@ +# ALTER DIRECTORY + +## 功能描述 + +对directory属性进行修改。 + +## 注意事项 + +- 目前只支持修改directory属主。 +- 属主仅允许是sysadmin权限用户,不允许赋予普通用户。 + +## 语法格式 + +``` +ALTER DIRECTORY directory_name + OWNER TO new_owner; +``` + +## 参数描述 + +**directory\_name** + +需要修改的目录名称,范围为已经存在的目录名称。 + +## 示例 + +``` +--创建目录。 +postgres=# CREATE OR REPLACE DIRECTORY dir as '/tmp/'; + +--修改目录的owner。 +postgres=# ALTER DIRECTORY dir OWNER TO system; + +--删除外部表。 +postgres=# DROP DIRECTORY dir; +``` + +## 相关链接 + +[CREATE DIRECTORY](CREATE-DIRECTORY.md#ZH-CN_TOPIC_0242370565),[DROP DIRECTORY](DROP-DIRECTORY.md#ZH-CN_TOPIC_0242370600) + diff --git a/content/zh/docs/Developerguide/ALTER FUNCTION.md b/content/zh/docs/Developerguide/ALTER FUNCTION.md new file mode 100644 index 000000000..46deb1ee4 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER FUNCTION.md @@ -0,0 +1,190 @@ +# ALTER FUNCTION + +## 功能描述 + +修改自定义函数的属性。 + +## 注意事项 + +只有该函数的所有者,才有权限执行该命令,系统管理员默认拥有该权限。如果函数中涉及对临时表相关的操作,则无法使用ALTER FUNCTION。 + +## 语法格式 + +- 修改自定义函数的附加参数。 + + ``` + ALTER FUNCTION function_name ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) + action [ ... ] [ RESTRICT ]; + ``` + + 其中附加参数action子句语法为。 + + ``` + {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT} + | {IMMUTABLE | STABLE | VOLATILE} + | {SHIPPABLE | NOT SHIPPABLE} + | {NOT FENCED | FENCED} + | [ NOT ] LEAKPROOF + | { [ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER } + | AUTHID { DEFINER | CURRENT_USER } + | COST execution_cost + | ROWS result_rows + | SET configuration_parameter { { TO | = } { value | DEFAULT }| FROM CURRENT} + | RESET {configuration_parameter | ALL} + ``` + +- 修改自定义函数的名称。 + + ``` + ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) + RENAME TO new_name; + ``` + +- 修改自定义函数的所属者。 + + ``` + ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) + OWNER TO new_owner; + ``` + +- 修改自定义函数的模式。 + + ``` + ALTER FUNCTION funname ( [ { [ argmode ] [ argname ] argtype} [, ...] ] ) + SET SCHEMA new_schema; + ``` + + +## 参数说明 + +- **function\_name** + + 要修改的函数名称。 + + 取值范围:已存在的函数名。 + +- **argmode** + + 标识该参数是输入、输出参数。 + + 取值范围:IN/OUT/IN OUT + +- **argname** + + 参数名称。 + + 取值范围:字符串,符合标识符命名规范。 + +- **argtype** + + 参数类型。 + + 取值范围:有效的类型,请参考[数据类型](数据类型.md)。 + +- **CALLED ON NULL INPUT** + + 表明该函数的某些参数是NULL的时候可以按照正常的方式调用。缺省时与指定此参数的作用相同。 + +- **RETURNS NULL ON NULL INPUT** + + **STRICT** + + STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,则如果存在NULL参数时不会执行该函数;而只是自动假设一个NULL结果。 + + RETURNS NULL ON NULL INPUT和STRICT的功能相同。 + +- **IMMUTABLE** + + 表示该函数在给出同样的参数值时总是返回同样的结果。 + +- **STABLE** + + 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 + +- **VOLATILE** + + 表示该函数值可以在一次表扫描内改变,不会做任何优化。 + +- **LEAKPROOF** + + 表示该函数没有副作用,指出参数只包括返回值。LEAKROOF只能由系统管理员设置。 + +- **EXTERNAL** + + (可选)目的是和SQL兼容,这个特性适合于所有函数,而不仅是外部函数 + +- **SECURITY INVOKER** + + **AUTHID CURREN\_USER** + + 表明该函数将以调用它的用户的权限执行。缺省时与指定此参数的作用相同。 + + SECURITY INVOKER和AUTHID CURREN\_USER的功能相同。 + +- **SECURITY DEFINER** + + **AUTHID DEFINER** + + 声明该函数将以创建它的用户的权限执行。 + + AUTHID DEFINER和SECURITY DEFINER的功能相同。 + +- **COST execution\_cost** + + 用来估计函数的执行成本。 + + execution\_cost以cpu\_operator\_cost为单位。 + + 取值范围:正数 + +- **ROWS result\_rows** + + 估计函数返回的行数。用于函数返回的是一个集合。 + + 取值范围:正数,默认值是1000行。 + +- **configuration\_parameter** + - **value** + + 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 + + 取值范围:字符串 + + - DEFAULT + - OFF + - RESET + + 指定默认值。 + + - **from current** + + 取当前会话中的值设置为configuration\_parameter的值。 + + +- **new\_name** + + 函数的新名称。要修改函数的所属模式,必须拥有新模式的CREATE权限。 + + 取值范围:字符串,符合标识符命名规范。 + +- **new\_owner** + + 函数的新所有者。要修改函数的所有者,新所有者必须拥有该函数所属模式的CREATE权限。 + + 取值范围:已存在的用户角色。 + +- **new\_schema** + + 函数的新模式。 + + 取值范围:已存在的模式。 + + +## 示例 + +请参见CREATE FUNCTION的[示例](CREATE-FUNCTION.md#zh-cn_topic_0237122104_zh-cn_topic_0059778837_scc61c5d3cc3e48c1a1ef323652dda821)。 + +## 相关链接 + +[CREATE FUNCTION](CREATE-FUNCTION.md),[DROP FUNCTION](DROP-FUNCTION.md) + diff --git a/content/zh/docs/Developerguide/ALTER GROUP.md b/content/zh/docs/Developerguide/ALTER GROUP.md new file mode 100644 index 000000000..0ac879efc --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER GROUP.md @@ -0,0 +1,43 @@ +# ALTER GROUP + +## 功能描述 + +修改一个用户组的属性。 + +## 注意事项 + +ALTER GROUP是ALTER ROLE的别名,非SQL标准语法,不推荐使用,建议用户直接使用ALTER ROLE替代。 + +## 语法格式 + +- 向用户组中添加用户。 + + ``` + ALTER GROUP group_name + ADD USER user_name [, ... ]; + ``` + + +- 从用户组中删除用户。 + + ``` + ALTER GROUP group_name + DROP USER user_name [, ... ]; + ``` + +- 修改用户组的名称。 + + ``` + ALTER GROUP group_name + RENAME TO new_name; + ``` + + +## 参数说明 + +请参考ALTER ROLE的[参数说明](ALTER-ROLE.md#zh-cn_topic_0237122068_zh-cn_topic_0059778744_s50961af6143d4aafaf8fa02febbbf331)。 + +## 相关链接 + +[CREATE GROUP](CREATE-GROUP.md#ZH-CN_TOPIC_0242370569),[DROP GROUP](DROP-GROUP.md#ZH-CN_TOPIC_0242370603),[ALTER ROLE](ALTER-ROLE.md#ZH-CN_TOPIC_0242370532) + diff --git a/content/zh/docs/Developerguide/ALTER INDEX.md b/content/zh/docs/Developerguide/ALTER INDEX.md new file mode 100644 index 000000000..ffceb2467 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER INDEX.md @@ -0,0 +1,165 @@ +# ALTER INDEX + +## 功能描述 + +ALTER INDEX用于修改现有索引的定义。 + +它有几种子形式: + +- IF EXISTS + + 如果指定的索引不存在,则发出一个notice而不是error。 + +- RENAME TO + + 只改变索引的名称。对存储的数据没有影响。 + +- SET TABLESPACE + + 这个选项会改变索引的表空间为指定表空间,并且把索引相关的数据文件移动到新的表空间里。 + +- SET \( \{ STORAGE\_PARAMETER = value \} \[, ...\] \) + + 改变索引的一个或多个索引方法特定的存储参数。 需要注意的是索引内容不会被这个命令立即修改,根据参数的不同,可能需要使用REINDEX重建索引来获得期望的效果。 + +- RESET \( \{ storage\_parameter \} \[, ...\] \) + + 重置索引的一个或多个索引方法特定的存储参数为缺省值。与SET一样,可能需要使用REINDEX来完全更新索引。 + +- \[ MODIFY PARTITION index\_partition\_name \] UNUSABLE + + 用于设置表或者索引分区上的索引不可用。 + +- REBUILD \[ PARTITION index\_partition\_name \] + + 用于重建表或者索引分区上的索引。 + +- RENAME PARTITION + + 用于重命名索引分区 + +- MOVE PARTITION + + 用于修改索引分区的所属表空间。 + + +## 注意事项 + +只有索引的所有者有权限执行此命令,系统管理员默认拥有此权限。 + +## 语法格式 + +- 重命名表索引的名称。 + + ``` + ALTER INDEX [ IF EXISTS ] index_name + RENAME TO new_name; + ``` + + +- 修改表索引的所属空间。 + + ``` + ALTER INDEX [ IF EXISTS ] index_name + SET TABLESPACE tablespace_name; + ``` + + +- 修改表索引的存储参数。 + + ``` + ALTER INDEX [ IF EXISTS ] index_name + SET ( {storage_parameter = value} [, ... ] ); + ``` + + +- 重置表索引的存储参数。 + + ``` + ALTER INDEX [ IF EXISTS ] index_name + RESET ( storage_parameter [, ... ] ) ; + ``` + + +- 设置表索引或索引分区不可用。 + + ``` + ALTER INDEX [ IF EXISTS ] index_name + [ MODIFY PARTITION index_partition_name ] UNUSABLE; + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >列存表不支持该语法。 + + +- 重建表索引或索引分区。 + + ``` + ALTER INDEX index_name + REBUILD [ PARTITION index_partition_name ]; + ``` + + +- 重命名索引分区。 + + ``` + ALTER INDEX [ IF EXISTS ] index_name + RENAME PARTITION index_partition_name TO new_index_partition_name; + ``` + + +- 修改索引分区的所属表空间。 + + ``` + ALTER INDEX [ IF EXISTS ] index_name + MOVE PARTITION index_partition_name TABLESPACE new_tablespace; + ``` + + +## 参数说明 + +- **index\_name** + + 要修改的索引名。 + +- **new\_name** + + 新的索引名。 + + 取值范围:字符串,且符合标识符命名规范。 + +- **tablespace\_name** + + 表空间的名称。 + + 取值范围:已存在的表空间。 + +- **storage\_parameter** + + 索引方法特定的参数名。 + +- **value** + + 索引方法特定的存储参数的新值。根据参数的不同,这可能是一个数字或单词。 + +- **new\_index\_partition\_name** + + 新索引分区名。 + +- **index\_partition\_name** + + 索引分区名。 + +- **new\_tablespace** + + 新表空间。 + + +## 示例 + +请参见CREATE INDEX的[示例](CREATE-INDEX.md#zh-cn_topic_0237122106_zh-cn_topic_0059777455_s985289833081489e9d77c485755bd362)。 + +## 相关链接 + +[CREATE INDEX](CREATE-INDEX.md),[DROP INDEX](DROP-INDEX.md#ZH-CN_TOPIC_0242370604),[REINDEX](REINDEX.md) + diff --git a/content/zh/docs/Developerguide/ALTER LARGE OBJECT.md b/content/zh/docs/Developerguide/ALTER LARGE OBJECT.md new file mode 100644 index 000000000..540980f6b --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER LARGE OBJECT.md @@ -0,0 +1,36 @@ +# ALTER LARGE OBJECT + +## 功能描述 + +ALTER LARGE OBJECT用于更改一个large object的定义。它的唯一的功能是分配一个新的所有者。 + +## 注意事项 + +使用ALTER LARGE OBJECT必须是系统管理员或者是其所有者。 + +## 语法格式 + +``` +ALTER LARGE OBJECT large_object_oid + OWNER TO new_owner; +``` + +## 参数说明 + +- **large\_object\_oid** + + 要被变large object的OID 。 + + 取值范围:已存在的大对象名。 + +- **OWNER TO new\_owner** + + large object新的所有者。 + + 取值范围:已存在的用户名/角色名。 + + +## 示例 + +无。 + diff --git a/content/zh/docs/Developerguide/ALTER ROLE.md b/content/zh/docs/Developerguide/ALTER ROLE.md new file mode 100644 index 000000000..d28804a9f --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER ROLE.md @@ -0,0 +1,120 @@ +# ALTER ROLE + +## 功能描述 + +修改角色属性。 + +## 注意事项 + +无。 + +## 语法格式 + +- 修改角色的权限。 + + ``` + ALTER ROLE role_name [ [ WITH ] option [ ... ] ]; + ``` + + 其中权限项子句option为。 + + ``` + {CREATEDB | NOCREATEDB} + | {CREATEROLE | NOCREATEROLE} + | {INHERIT | NOINHERIT} + | {AUDITADMIN | NOAUDITADMIN} + | {SYSADMIN | NOSYSADMIN} + | {MONADMIN | NOMONADMIN} + | {OPRADMIN | NOOPRADMIN} + | {POLADMIN | NOPOLADMIN} + | {USEFT | NOUSEFT} + | {LOGIN | NOLOGIN} + | {REPLICATION | NOREPLICATION} + | {INDEPENDENT | NOINDEPENDENT} + | {VCADMIN | NOVCADMIN} + | CONNECTION LIMIT connlimit + | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password' + | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY 'password' [ REPLACE 'old_password' ] + | [ ENCRYPTED | UNENCRYPTED ] PASSWORD { 'password' | DISABLE } + | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY { 'password' [ REPLACE 'old_password' ] | DISABLE } + | VALID BEGIN 'timestamp' + | VALID UNTIL 'timestamp' + | RESOURCE POOL 'respool' + | USER GROUP 'groupuser' + | PERM SPACE 'spacelimit' + | NODE GROUP logic_cluster_name + | ACCOUNT { LOCK | UNLOCK } + | PGUSER + ``` + +- 修改角色的名称。 + + ``` + ALTER ROLE role_name + RENAME TO new_name; + ``` + +- 设置角色的配置参数。 + + ``` + ALTER ROLE role_name [ IN DATABASE database_name ] + SET configuration_parameter {{ TO | = } { value | DEFAULT } | FROM CURRENT}; + ``` + +- 重置角色的配置参数。 + + ``` + ALTER ROLE role_name + [ IN DATABASE database_name ] RESET {configuration_parameter|ALL}; + ``` + + +## 参数说明 + +- **role\_name** + + 现有角色名。 + + 取值范围:已存在的用户名。 + +- **IN DATABASE database\_name** + + 表示修改角色在指定数据库上的参数。 + +- **SET configuration\_parameter** + + 设置角色的参数。ALTER ROLE中修改的会话参数只针对指定的角色,且在下一次该角色启动的会话中有效。 + + 取值范围: + + configuration\_parameter和value的取值请参见[SET](SET.md)。 + + DEFAULT:表示清除configuration\_parameter参数的值,configuration\_parameter参数的值将继承本角色新产生的SESSION的默认值。 + + FROM CURRENT:取当前会话中的值设置为configuration\_parameter参数的值。 + +- **RESET configuration\_parameter/ALL** + + 清除configuration\_parameter参数的值。与SET configuration\_parameter TO DEFAULT的效果相同。 + + 取值范围:ALL表示清除所有参数的值。 + +- **ACCOUNT LOCK | ACCOUNT UNLOCK** + - ACCOUNT LOCK:锁定帐户,禁止登录数据库。 + - ACCOUNT UNLOCK:解锁帐户,允许登录数据库。 + +- **PGUSER** + + 当前版本不允许修改角色的PGUSER属性 + + +其他参数请参见CREATE ROLE的[参数说明](CREATE-ROLE.md#zh-cn_topic_0237122112_zh-cn_topic_0059778189_s5a43ec5742a742089e2c302063de7fe4)。 + +## 示例 + +请参见CREATE ROLE的[示例](CREATE-ROLE.md#zh-cn_topic_0237122112_zh-cn_topic_0059778189_s0dea2f90b8474387aff0ab3f366a611e)。 + +## 相关链接 + +[CREATE ROLE](CREATE-ROLE.md),[DROP ROLE](DROP-ROLE.md#ZH-CN_TOPIC_0242370611),[SET](SET.md) + diff --git a/content/zh/docs/Developerguide/ALTER ROW LEVEL SECURITY POLICY.md b/content/zh/docs/Developerguide/ALTER ROW LEVEL SECURITY POLICY.md new file mode 100644 index 000000000..b8139d66e --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER ROW LEVEL SECURITY POLICY.md @@ -0,0 +1,107 @@ +# ALTER ROW LEVEL SECURITY POLICY + +## 功能描述 + +对已存在的行访问控制策略(包括行访问控制策略的名称,行访问控制指定的用户,行访问控制的策略表达式)进行修改。 + +## 注意事项 + +表的所有者或管理员用户才能进行此操作。 + +## 语法格式 + +``` +ALTER [ ROW LEVEL SECURITY ] POLICY [ IF EXISTS ] policy_name ON table_name RENAME TO new_policy_name; + +ALTER [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name + [ TO { role_name | PUBLIC } [, ...] ] + [ USING ( using_expression ) ]; +``` + +## 参数说明 + +- policy\_name + + 行访问控制策略名称。 + +- table\_name + + 行访问控制策略的表名。 + +- new\_policy\_name + + 新的行访问控制策略名称。 + +- role\_name + + 行访问控制策略应用的数据库用户,可以指定多个用户,PUBLIC表示应用到所有用户。 + +- using\_expression + + 行访问控制的表达式,返回值为boolean类型。 + + +## 示例 + +``` +--创建数据表all_data +postgres=# CREATE TABLE all_data(id int, role varchar(100), data varchar(100)); + +--创建行访问控制策略,当前用户只能查看用户自身的数据 +postgres=# CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER); +postgres=# \d+ all_data + Table "public.all_data" + Column | Type | Modifiers | Storage | Stats target | Description +--------+------------------------+-----------+----------+--------------+------------- + id | integer | | plain | | + role | character varying(100) | | extended | | + data | character varying(100) | | extended | | +Row Level Security Policies: + POLICY "all_data_rls" + USING (((role)::name = "current_user"())) +Has OIDs: no +Location Nodes: ALL DATANODES +Options: orientation=row, compression=no + +--修改行访问控制all_data_rls的名称 +postgres=# ALTER ROW LEVEL SECURITY POLICY all_data_rls ON all_data RENAME TO all_data_new_rls; + +--修改行访问控制策略影响的用户 +postgres=# ALTER ROW LEVEL SECURITY POLICY all_data_new_rls ON all_data TO alice, bob; +postgres=# \d+ all_data + Table "public.all_data" + Column | Type | Modifiers | Storage | Stats target | Description +--------+------------------------+-----------+----------+--------------+------------- + id | integer | | plain | | + role | character varying(100) | | extended | | + data | character varying(100) | | extended | | +Row Level Security Policies: + POLICY "all_data_new_rls" + TO alice,bob + USING (((role)::name = "current_user"())) +Has OIDs: no +Location Nodes: ALL DATANODES +Options: orientation=row, compression=no, enable_rowsecurity=true + +--修改行访问控制策略表达式 +postgres=# ALTER ROW LEVEL SECURITY POLICY all_data_new_rls ON all_data USING (id > 100 AND role = current_user); +postgres=# \d+ all_data + Table "public.all_data" + Column | Type | Modifiers | Storage | Stats target | Description +--------+------------------------+-----------+----------+--------------+------------- + id | integer | | plain | | + role | character varying(100) | | extended | | + data | character varying(100) | | extended | | +Row Level Security Policies: + POLICY "all_data_new_rls" + TO alice,bob + USING (((id > 100) AND ((role)::name = "current_user"()))) +Has OIDs: no +Location Nodes: ALL DATANODES +Options: orientation=row, compression=no, enable_rowsecurity=true +``` + +## 相关链接 + +[CREATE ROW LEVLEL SECURITY POLICY](CREATE-ROW-LEVLEL-SECURITY-POLICY.md),[DROP ROW LEVEL SECURITY POLICY](DROP-ROW-LEVEL-SECURITY-POLICY.md) + diff --git a/content/zh/docs/Developerguide/ALTER SCHEMA.md b/content/zh/docs/Developerguide/ALTER SCHEMA.md new file mode 100644 index 000000000..35d3f29cb --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER SCHEMA.md @@ -0,0 +1,76 @@ +# ALTER SCHEMA + +## 功能描述 + +修改模式属性。 + +## 注意事项 + +只有模式的所有者有权限执行ALTER SCHEMA命令,系统管理员默认拥有此权限。 + +## 语法格式 + +- 修改模式的名称。 + + ``` + ALTER SCHEMA schema_name + RENAME TO new_name; + ``` + +- 修改模式的所有者。 + + ``` + ALTER SCHEMA schema_name + OWNER TO new_owner; + ``` + + +## 参数说明 + +- **schema\_name** + + 现有模式的名称。 + + 取值范围:已存在的模式名。 + +- **RENAME TO new\_name** + + 修改模式的名称。 + + new\_name:模式的新名称。 + + 取值范围:字符串,要符合标识符命名规范。 + +- **OWNER TO new\_owner** + + 修改模式的所有者。非系统管理员要改变模式的所有者,该用户还必须是新的所有角色的直接或间接成员, 并且该成员必须在此数据库上有CREATE权限。 + + new\_owner:模式的新所有者。 + + 取值范围:已存在的用户名/角色名。 + + +## 示例 + +``` +--创建模式ds。 +postgres=# CREATE SCHEMA ds; + +--将当前模式ds更名为ds_new。 +postgres=# ALTER SCHEMA ds RENAME TO ds_new; + +--创建用户jack。 +postgres=# CREATE USER jack PASSWORD 'Bigdata@123'; + +--将DS_NEW的所有者修改为jack。 +postgres=# ALTER SCHEMA ds_new OWNER TO jack; + +--删除用户jack和模式ds_new。 +postgres=# DROP SCHEMA ds_new; +postgres=# DROP USER jack; +``` + +## 相关链接 + +[CREATE SCHEMA](CREATE-SCHEMA.md#ZH-CN_TOPIC_0242370577),[DROP SCHEMA](DROP-SCHEMA.md#ZH-CN_TOPIC_0242370612) + diff --git a/content/zh/docs/Developerguide/ALTER SEQUENCE.md b/content/zh/docs/Developerguide/ALTER SEQUENCE.md new file mode 100644 index 000000000..e1e9ff711 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER SEQUENCE.md @@ -0,0 +1,76 @@ +# ALTER SEQUENCE + +## 功能描述 + +修改一个现有的序列的参数。 + +## 注意事项 + +- 使用ALTER SEQUENCE的用户必须是该序列的所有者。 +- 当前版本仅支持修改拥有者、归属列和最大值。若要修改其他参数,可以删除重建,并用Setval函数恢复当前值。 +- ALTER SEQUENCE MAXVALUE不支持在事务、函数和存储过程中使用。 +- 修改序列的最大值后,会清空该序列在所有会话的cache。 +- ALTER SEQUENCE会阻塞nextval、setval、currval和lastval的调用、 + +## 语法格式 + +修改序列归属列 + +``` +ALTER SEQUENCE [ IF EXISTS ] name + [MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE] + [ OWNED BY { table_name.column_name | NONE } ] ; +``` + +修改序列的拥有者 + +``` +ALTER SEQUENCE [ IF EXISTS ] name OWNER TO new_owner; +``` + +## 参数说明 + +- name + + 将要修改的序列名称。 + +- IF EXISTS + + 当序列不存在时使用该选项不会出现错误消息,仅有一个通知。 + +- OWNED BY + + 将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。 + + 如果序列已经和表有关联后,使用这个选项后新的关联关系会覆盖旧的关联。 + + 关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。 + + 使用OWNED BY NONE将删除任何已经存在的关联。 + +- new\_owner + + 序列新所有者的用户名。用户要修改序列的所有者,必须是新角色的直接或者间接成员,并且那个角色必须有序列所在模式上的CREATE权限。 + + +## 示例 + +``` +--创建一个名为serial的递增序列,从101开始。 +postgres=# CREATE SEQUENCE serial START 101; + +--创建一个表,定义默认值。 +postgres=# CREATE TABLE T1(C1 bigint default nextval('serial')); + +--将序列serial的归属列变为T1.C1。 +postgres=# ALTER SEQUENCE serial OWNED BY T1.C1; + +--删除序列 +postgres=# DROP SEQUENCE serial cascade; +postgres=# DROP TABLE T1; +``` + +## 相关链接 + +[CREATE SEQUENCE](CREATE-SEQUENCE.md#ZH-CN_TOPIC_0242370578),[DROP SEQUENCE](DROP-SEQUENCE.md#ZH-CN_TOPIC_0242370613) + diff --git a/content/zh/docs/Developerguide/ALTER SESSION.md b/content/zh/docs/Developerguide/ALTER SESSION.md new file mode 100644 index 000000000..4e8637afc --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER SESSION.md @@ -0,0 +1,85 @@ +# ALTER SESSION + +## 功能描述 + +ALTER SESSION命令用于定义或修改那些对当前会话有影响的条件或参数。修改后的会话参数会一直保持,直到断开当前会话。 + +## 注意事项 + +- 如果执行SET TRANSACTION之前没有执行START TRANSACTION,则事务立即结束,命令无法显示效果。 +- 可以用START TRANSACTION里面声明所需要的transaction\_mode\(s\)的方法来避免使用SET TRANSACTION。 + +## 语法格式 + +- 设置会话的事务参数。 + + ``` + ALTER SESSION SET [ SESSION CHARACTERISTICS AS ] TRANSACTION + { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED } | { READ ONLY | READ WRITE } } [, ...] ; + ``` + +- 设置会话的其他运行时参数。 + + ``` + ALTER SESSION SET + {{config_parameter { { TO | = } { value | DEFAULT } + | FROM CURRENT }} | CURRENT_SCHEMA [ TO | = ] { schema | DEFAULT } + | TIME ZONE time_zone + | SCHEMA schema + | NAMES encoding_name + | ROLE role_name PASSWORD 'password' + | SESSION AUTHORIZATION { role_name PASSWORD 'password' | DEFAULT } + | XML OPTION { DOCUMENT | CONTENT } + } ; + ``` + + +## 参数说明 + +修改会话涉及到的参数说明请参见SET语法中的[参数说明](SET.md#zh-cn_topic_0237122186_zh-cn_topic_0059779029_s39823c7ebd854a9f9c761b3a32b1c3c3)。 + +## 示例 + +``` +-- 创建模式ds。 +postgres=# CREATE SCHEMA ds; + +--设置模式搜索路径。 +postgres=# SET SEARCH_PATH TO ds, public; + +--设置日期时间风格为传统的POSTGRES风格(日在月前)。 +postgres=# SET DATESTYLE TO postgres, dmy; + +--设置当前会话的字符编码为UTF8。 +postgres=# ALTER SESSION SET NAMES 'UTF8'; + +--设置时区为加州伯克利。 +postgres=# SET TIME ZONE 'PST8PDT'; + +--设置时区为意大利。 +postgres=# SET TIME ZONE 'Europe/Rome'; + +--设置当前模式。 +postgres=# ALTER SESSION SET CURRENT_SCHEMA TO tpcds; + +--设置XML OPTION为DOCUMENT。 +postgres=# ALTER SESSION SET XML OPTION DOCUMENT; + +--创建角色joe,并设置会话的角色为joe。 +postgres=# CREATE ROLE joe WITH PASSWORD 'Bigdata@123'; +postgres=# ALTER SESSION SET SESSION AUTHORIZATION joe PASSWORD 'Bigdata@123'; + +--切换到默认用户。 +postgres=> ALTER SESSION SET SESSION AUTHORIZATION default; + +--删除ds模式。 +postgres=# DROP SCHEMA ds; + +--删除joe。 +postgres=# DROP ROLE joe; +``` + +## 相关链接 + +[SET](SET.md) + diff --git a/content/zh/docs/Developerguide/ALTER SYSTEM KILL SESSION.md b/content/zh/docs/Developerguide/ALTER SYSTEM KILL SESSION.md new file mode 100644 index 000000000..4230891f8 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER SYSTEM KILL SESSION.md @@ -0,0 +1,51 @@ +# ALTER SYSTEM KILL SESSION + +## 功能描述 + +ALTER SYSTEM KILL SESSION命令用于结束一个会话。 + +## 注意事项 + +无。 + +## 语法格式 + +``` +ALTER SYSTEM KILL SESSION 'session_sid, serial' [ IMMEDIATE ]; +``` + +## 参数说明 + +- **session\_sid, serial** + + 会话的SID和SERIAL(格式请参考示例)。 + + 取值范围:通过查看系统表V$SESSION可查看所有会话的SID和SERIAL。 + +- **IMMEDIATE** + + 表明会话将在命令执行后立即结束。 + + +## 示例 + +``` +--查询会话信息。 +postgres=# SELECT sid,serial#,username FROM V$SESSION; + + sid | serial# | username +-----------------+---------+---------- + 140131075880720 | 0 | omm + 140131025549072 | 0 | omm + 140131073779472 | 0 | omm + 140131071678224 | 0 | omm + 140131125774096 | 0 | + 140131127875344 | 0 | + 140131113629456 | 0 | + 140131094742800 | 0 | +(8 rows) + +--结束SID为140131075880720的会话。 +postgres=# ALTER SYSTEM KILL SESSION '140131075880720,0' IMMEDIATE; +``` + diff --git a/content/zh/docs/Developerguide/ALTER TABLE PARTITION.md b/content/zh/docs/Developerguide/ALTER TABLE PARTITION.md new file mode 100644 index 000000000..443df8e04 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER TABLE PARTITION.md @@ -0,0 +1,244 @@ +# ALTER TABLE PARTITION + +## 功能描述 + +修改表分区,包括增删分区、切割分区、合成分区,以及修改分区属性等。 + +## 注意事项 + +- 添加分区的表空间不能是PG\_GLOBAL。 +- 添加分区的名称不能与该分区表已有分区的名称相同。 +- 添加分区的分区键值要和分区表的分区键的类型一致,且要大于分区表中最后一个范围分区的上边界。 +- 如果目标分区表中已有分区数达到了最大值(32767),则不能继续添加分区。 + +- 当分区表只有一个分区时,不能删除该分区。 +- 选择分区使用PARTITION FOR\(\),括号里指定值个数应该与定义分区时使用的列个数相同,并且一一对应。 +- Value分区表不支持相应的Alter Partition操作。 +- 列存分区表不支持切割分区。 + +## 语法格式 + +- 修改表分区主语法。 + + ``` + ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} + action [, ... ]; + ``` + + 其中action统指如下分区维护子语法。当存在多个分区维护子句时,保证了分区的连续性,无论这些子句的排序如何,openGauss总会先执行DROP PARTITION再执行ADD PARTITION操作,最后顺序执行其它分区维护操作。 + + ``` + move_clause | + exchange_clause | + row_clause | + merge_clause | + modify_clause | + split_clause | + add_clause | + drop_clause + ``` + + - move\_clause子语法用于移动分区到新的表空间。 + + ``` + MOVE PARTITION { partion_name | FOR ( partition_value [, ...] ) } TABLESPACE tablespacename + ``` + + - exchange\_clause子语法用于把普通表的数据迁移到指定的分区。 + + ``` + EXCHANGE PARTITION { ( partition_name ) | FOR ( partition_value [, ...] ) } + WITH TABLE {[ ONLY ] ordinary_table_name | ordinary_table_name * | ONLY ( ordinary_table_name )} + [ { WITH | WITHOUT } VALIDATION ] [ VERBOSE ] + ``` + + 进行交换的普通表和分区必须满足如下条件: + + - 普通表和分区的列数目相同,对应列的信息严格一致,包括:列名、列的数据类型、列约束、列的Collation信息、列的存储参数、列的压缩信息等。 + - 普通表和分区的表压缩信息严格一致。 + - 普通表和分区的分布列信息严格一致。 + - 普通表和分区的索引个数相同,且对应索引的信息严格一致。 + - 普通表和分区的表约束个数相同,且对应表约束的信息严格一致。 + - 普通表不可以是临时表。 + + 完成交换后,普通表和分区的数据被置换,同时普通表和分区的表空间信息被置换。此时,普通表和分区的统计信息变得不可靠,需要对普通表和分区重新执行analyze。 + + - row\_clause子语法用于设置分区表的行迁移开关。 + + ``` + { ENABLE | DISABLE } ROW MOVEMENT + ``` + + - merge\_clause子语法用于把多个分区合并成一个分区。 + + ``` + MERGE PARTITIONS { partition_name } [, ...] INTO PARTITION partition_name + [ TABLESPACE tablespacename ] + ``` + + - modify\_clause子语法用于设置分区索引是否可用。 + + ``` + MODIFY PARTITION partition_name { UNUSABLE LOCAL INDEXES | REBUILD UNUSABLE LOCAL INDEXES } + ``` + + - split\_clause子语法用于把一个分区切割成多个分区。 + + ``` + SPLIT PARTITION { partition_name | FOR ( partition_value [, ...] ) } { split_point_clause | no_split_point_clause } + ``` + + - 指定切割点split\_point\_clause的语法为。 + + ``` + AT ( partition_value ) INTO ( PARTITION partition_name [ TABLESPACE tablespacename ] , PARTITION partition_name [ TABLESPACE tablespacename ] ) + ``` + + >![](public_sys-resources/icon-notice.gif) **须知:** + >- 列存分区表不支持切割分区。 + >- 切割点的大小要位于正在被切割的分区的分区键范围内,指定切割点的方式只能把一个分区切割成两个新分区。 + + - 不指定切割点no\_split\_point\_clause的语法为。 + + ``` + INTO { ( partition_less_than_item [, ...] ) | ( partition_start_end_item [, ...] ) } + ``` + + >![](public_sys-resources/icon-notice.gif) **须知:** + >- 不指定切割点的方式,partition\_less\_than\_item指定的第一个新分区的分区键要大于正在被切割的分区的前一个分区(如果存在的话)的分区键,partition\_less\_than\_item指定的最后一个分区的分区键要等于正在被切割的分区的分区键大小。 + >- 不指定切割点的方式,partition\_start\_end\_item指定的第一个新分区的起始点(如果存在的话)必须等于正在被切割的分区的前一个分区(如果存在的话)的分区键,partition\_start\_end\_item指定的最后一个分区的终止点(如果存在的话)必须等于正在被切割的分区的分区键。 + >- partition\_less\_than\_item支持的分区键个数最多为4,而partition\_start\_end\_item仅支持1个分区键,其支持的数据类型参见[PARTITION BY RANGE\(parti...](CREATE-TABLE-PARTITION.md#zh-cn_topic_0237122119_zh-cn_topic_0059777586_l00efc30fe63048ffa2ef68c5b18bb455)。 + >- 在同一语句中partition\_less\_than\_item和partition\_start\_end\_item两者不可同时使用;不同split语句之间没有限制。 + + + - 分区项partition\_less\_than\_item的语法为。 + + ``` + PARTITION partition_name VALUES LESS THAN ( { partition_value | MAXVALUE } [, ...] ) + [ TABLESPACE tablespacename ] + ``` + + - 分区项partition\_start\_end\_item的语法为,其约束参见[START END语法描述](CREATE-TABLE-PARTITION.md#zh-cn_topic_0237122119_li2094151861116)。 + + ``` + PARTITION partition_name { + {START(partition_value) END (partition_value) EVERY (interval_value)} | + {START(partition_value) END ({partition_value | MAXVALUE})} | + {START(partition_value)} | + {END({partition_value | MAXVALUE})} + } [TABLESPACE tablespace_name] + + ``` + + + - add\_clause子语法用于为指定的分区表添加一个或多个分区。 + + ``` + ADD {partition_less_than_item | partition_start_end_item} + ``` + + - drop\_clause子语法用于删除分区表中的指定分区。 + + ``` + DROP PARTITION { partition_name | FOR ( partition_value [, ...] ) } + ``` + + +- 修改表分区名称的语法。 + + ``` + ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} + RENAME PARTITION { partion_name | FOR ( partition_value [, ...] ) } TO partition_new_name; + ``` + + +## 参数说明 + +- **table\_name** + + 分区表名。 + + 取值范围:已存在的分区表名。 + +- **partition\_name** + + 分区名。 + + 取值范围:已存在的分区名。 + +- **tablespacename** + + 指定分区要移动到哪个表空间。 + + 取值范围:已存在的表空间名。 + +- **partition\_value** + + 分区键值。 + + 通过PARTITION FOR \( partition\_value \[, ...\] \)子句指定的这一组值,可以唯一确定一个分区。 + + 取值范围:需要进行重命名的分区的分区键的取值范围。 + +- **UNUSABLE LOCAL INDEXES** + + 设置该分区上的所有索引不可用。 + +- **REBUILD UNUSABLE LOCAL INDEXES** + + 重建该分区上的所有索引。 + +- **ENABLE/DISABLE ROW MOVEMET** + + 行迁移开关。 + + 如果进行UPDATE操作时,更新了元组在分区键上的值,造成了该元组所在分区发生变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。 + + 取值范围: + + - ENABLE:打开行迁移开关。 + - DISABLE:关闭行迁移开关。 + + 默认是关闭状态。 + +- **ordinary\_table\_name** + + 进行迁移的普通表的名称。 + + 取值范围:已存在的普通表名。 + +- **\{ WITH | WITHOUT \} VALIDATION** + + 在进行数据迁移时,是否检查普通表中的数据满足指定分区的分区键范围。 + + 取值范围: + + - WITH:对于普通表中的数据要检查是否满足分区的分区键范围,如果有数据不满足,则报错。 + - WITHOUT:对于普通表中的数据不检查是否满足分区的分区键范围。 + + 默认是WITH状态。 + + 由于检查比较耗时,特别是当数据量很大的情况下更甚。所以在保证当前普通表中的数据满足分区的分区键范围时,可以加上WITHOUT来指明不进行检查。 + +- **VERBOSE** + + 在VALIDATION是WITH状态时,如果检查出普通表有不满足要交换分区的分区键范围的数据,那么把这些数据插入到正确的分区,如果路由不到任何分区,再报错。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >只有在VALIDATION是WITH状态时,才可以指定VERBOSE。 + +- **partition\_new\_name** + + 分区的新名称。 + + 取值范围:字符串,要符合标识符的命名规范。 + + +## 示例 + +请参考CREATE TABLE PARTITION的[示例](CREATE-TABLE-PARTITION.md#zh-cn_topic_0237122119_zh-cn_topic_0059777586_s43dd49de892344bf89e6f56f17404842)。 + +## 相关链接 + +[CREATE TABLE PARTITION](CREATE-TABLE-PARTITION.md),[DROP TABLE](DROP-TABLE.md#ZH-CN_TOPIC_0242370616) + diff --git a/content/zh/docs/Developerguide/ALTER TABLE.md b/content/zh/docs/Developerguide/ALTER TABLE.md new file mode 100644 index 000000000..ce296029c --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER TABLE.md @@ -0,0 +1,433 @@ +# ALTER TABLE + +## 功能描述 + +修改表,包括修改表的定义、重命名表、重命名表中指定的列、重命名表的约束、设置表的所属模式、添加/更新多个列、打开/关闭行访问控制开关。 + +## 注意事项 + +- 只有表的所有者有权限执行ALTER TABLE命令,系统管理员默认拥有此权限。 +- 不能修改分区表的tablespace,但可以修改分区的tablespace。 +- 不支持修改存储参数ORIENTATION。 +- SET SCHEMA操作不支持修改为系统内部模式,当前仅支持用户模式之间的修改。 +- 不允许对表的分布列(distribute column)进行修改。 +- 列存表只支持PARTIAL CLUSTER KEY表级约束,不支持主外键等表级约束。 +- 列存表只支持添加字段ADD COLUMN、修改字段的数据类型ALTER TYPE、设置单个字段的收集目标SET STATISTICS、支持更改表名称、支持更改表空间,支持删除字段DROP COLUMN。对于添加的字段和修改的字段类型要求是列存支持的[数据类型](数据类型.md)。ALTER TYPE的USING选项只支持常量表达式和涉及本字段的表达式,暂不支持涉及其他字段的表达式。 +- 列存表支持的字段约束包括NULL、NOT NULL和DEFAULT常量值;对字段约束的修改当前只支持对DEFAULT值的修改(SET DEFAULT)和删除(DROP DEFAULT),暂不支持对非空约束NULL/NOT NULL的修改。 + +- 不支持增加自增列,或者增加DEFAULT值中包含nextval\(\)表达式的列。 +- 不支持对外表、临时表开启行访问控制开关。 +- 通过约束名删除PRIMARY KEY约束时,不会删除NOT NULL约束,如果有需要,请手动删除NOT NULL约束。 +- 使用JDBC时,支持通过PrepareStatement对DEFAUTL值进行参数化设置。 + +## 语法格式 + +- 修改表的定义。 + + ``` + ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) } + action [, ... ]; + ``` + + 其中具体表操作action可以是以下子句之一: + + ``` + column_clause + | ADD table_constraint [ NOT VALID ] + | ADD table_constraint_using_index + | VALIDATE CONSTRAINT constraint_name + | DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] + | CLUSTER ON index_name + | SET WITHOUT CLUSTER + | SET ( {storage_parameter = value} [, ... ] ) + | RESET ( storage_parameter [, ... ] ) + | OWNER TO new_owner + | SET TABLESPACE new_tablespace + | SET {COMPRESS|NOCOMPRESS} + + | TO { GROUP groupname | NODE ( nodename [, ... ] ) } + | ADD NODE ( nodename [, ... ] ) + | DELETE NODE ( nodename [, ... ] ) + | DISABLE TRIGGER [ trigger_name | ALL | USER ] + | ENABLE TRIGGER [ trigger_name | ALL | USER ] + | ENABLE REPLICA TRIGGER trigger_name + | ENABLE ALWAYS TRIGGER trigger_name + | DISABLE ROW LEVEL SECURITY + | ENABLE ROW LEVEL SECURITY + | FORCE ROW LEVEL SECURITY + | NO FORCE ROW LEVEL SECURITY + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- **ADD table\_constraint \[ NOT VALID \]** + > 给表增加一个新的约束。 + >- **ADD table\_constraint\_using\_index** + > 根据已有唯一索引为表增加主键约束或唯一约束。 + >- **VALIDATE CONSTRAINT constraint\_name** + > 验证一个外键或是一个使用NOT VALID选项创建的检查类约束,通过扫描全表来保证所有记录都符合约束条件。如果约束已标记为有效时,什么操作也不会发生。 + >- **DROP CONSTRAINT \[ IF EXISTS \] constraint\_name \[ RESTRICT | CASCADE \]** + > 删除一个表上的约束。 + >- **CLUSTER ON index\_name** + > 为将来的CLUSTER(聚簇)操作选择默认索引。实际上并没有重新盘簇化处理该表。 + >- **SET WITHOUT CLUSTER** + > 从表中删除最新使用的CLUSTER索引。这样会影响将来那些没有声明索引的CLUSTER(聚簇)操作。 + >- **SET \( \{storage\_parameter = value\} \[, ... \] \)** + > 修改表的一个或多个存储参数。 + >- **RESET \( storage\_parameter \[, ... \] \)** + > 重置表的一个或多个存储参数。与SET一样,根据参数的不同可能需要重写表才能获得想要的效果。 + >- **OWNER TO new\_owner** + > 将表、序列、视图的属主改变成指定的用户。 + >- **SET TABLESPACE new\_tablespace** + > 这种形式将表空间修改为指定的表空间并将相关的数据文件移动到新的表空间。但是表上的所有索引都不会被移动,索引可以通过ALTER INDEX语法的SET TABLESPACE选项来修改索引的表空间。 + >- **SET \{COMPRESS|NOCOMPRESS\}** + > 修改表的压缩特性。表压缩特性的改变只会影响后续批量插入的数据的存储方式,对已有数据的存储毫无影响。也就是说,表压缩特性的修改会导致该表中同时存在着已压缩和未压缩的数据。 + >- **TO \{ GROUP groupname | NODE \( nodename \[, ... \] \) \}** + > 此语法仅在扩展模式(GUC参数support\_extended\_features为on时)下可用。该模式谨慎打开,主要供内部扩容工具使用,一般用户不应使用该模式。 + >- **ADD NODE \( nodename \[, ... \] \)** + > 此语法主要供内部扩容工具使用,一般用户不建议使用。 + >- **DELETE NODE \( nodename \[, ... \] \)** + > 此语法主要供内部缩容工具使用,一般用户不建议使用。 + >- **DISABLE TRIGGER \[ trigger\_name | ALL | USER \]** + > 禁用trigger\_name所表示的单个触发器,或禁用所有触发器,或仅禁用用户触发器(此选项不包括内部生成的约束触发器,例如,可延迟唯一性和排除约束的约束触发器)。 + >![](public_sys-resources/icon-note.gif) **说明:** + >应谨慎使用此功能,因为如果不执行触发器,则无法保证原先期望的约束的完整性。 + + - **| ENABLE TRIGGER \[ trigger\_name | ALL | USER \]** + + 启用trigger\_name所表示的单个触发器,或启用所有触发器,或仅启用用户触发器。 + + - **| ENABLE REPLICA TRIGGER trigger\_name** + + 触发器触发机制受配置变量[session\_replication\_role](语句行为.md#zh-cn_topic_0237124732_zh-cn_topic_0059779117_sffbd1c48d86b4c3fa3287167a7810216)的影响,当复制角色为“origin”(默认值)或“local”时,将触发简单启用的触发器。 + + 配置为ENABLE REPLICA的触发器仅在会话处于“replica”模式时触发。 + + - **| ENABLE ALWAYS TRIGGER trigger\_name** + + 无论当前复制模式如何,配置为ENABLE ALWAYS的触发器都将触发。 + + - **| DISABLE/ENABLE ROW LEVEL SECURITY** + + 开启或关闭表的行访问控制开关。 + + 当开启行访问控制开关时,如果未在该数据表定义相关行访问控制策略,数据表的行级访问将不受影响;如果关闭表的行访问控制开关,即使定义了行访问控制策略,数据表的行访问也不受影响。详细信息参见[CREATE ROW LEVLEL SECURITY POLICY](CREATE-ROW-LEVLEL-SECURITY-POLICY.md)章节。 + + - **| NO FORCE/FORCE ROW LEVEL SECURITY** + + 强制开启或关闭表的行访问控制开关。 + + 默认情况,表所有者不受行访问控制特性影响,但当强制开启表的行访问控制开关时,表的所有者(不包含系统管理员用户)会受影响。系统管理员可以绕过所有的行访问控制策略,不受影响。 + + + + - 其中列相关的操作column\_clause可以是以下子句之一: + + ``` + ADD [ COLUMN ] column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] + | MODIFY column_name data_type + | MODIFY column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] + | MODIFY column_name [ CONSTRAINT constraint_name ] NULL + | DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] + | ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ] + | ALTER [ COLUMN ] column_name { SET DEFAULT expression | DROP DEFAULT } + | ALTER [ COLUMN ] column_name { SET | DROP } NOT NULL + | ALTER [ COLUMN ] column_name SET STATISTICS [PERCENT] integer + | ADD STATISTICS (( column_1_name, column_2_name [, ...] )) + | DELETE STATISTICS (( column_1_name, column_2_name [, ...] )) + | ALTER [ COLUMN ] column_name SET ( {attribute_option = value} [, ... ] ) + | ALTER [ COLUMN ] column_name RESET ( attribute_option [, ... ] ) + | ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- **ADD \[ COLUMN \] column\_name data\_type \[ compress\_mode \] \[ COLLATE collation \] \[ column\_constraint \[ ... \] \]** + > 向表中增加一个新的字段。用ADD COLUMN增加一个字段,所有表中现有行都初始化为该字段的缺省值(如果没有声明DEFAULT子句,值为NULL)。 + >- **ADD \( \{ column\_name data\_type \[ compress\_mode \] \} \[, ...\] \)** + > 向表中增加多列。 + >- **MODIFY \( \{ column\_name data\_type | column\_name \[ CONSTRAINT constraint\_name \] NOT NULL \[ ENABLE \] | column\_name \[ CONSTRAINT constraint\_name \] NULL \} \[, ...\] \)** + > 修改表已存在字段的数据类型。 + >- **DROP \[ COLUMN \] \[ IF EXISTS \] column\_name \[ RESTRICT | CASCADE \]** + > 从表中删除一个字段,和这个字段相关的索引和表约束也会被自动删除。如果任何表之外的对象依赖于这个字段,必须声明CASCADE ,比如外键参考、视图等。 + > DROP COLUMN命令并不是物理上把字段删除,而只是简单地把它标记为对SQL操作不可见。随后对该表的插入和更新将在该字段存储一个NULL。因此,删除一个字段是很快的,但是它不会立即释放表在磁盘上的空间,因为被删除了的字段占据的空间还没有回收。这些空间将在执行VACUUM时而得到回收。 + >- **ALTER \[ COLUMN \] column\_name \[ SET DATA \] TYPE data\_type \[ COLLATE collation \] \[ USING expression \]** + > 改变表字段的数据类型。该字段涉及的索引和简单的表约束将被自动地转换为使用新的字段类型,方法是重新分析最初提供的表达式。 + > ALTER TYPE要求重写整个表的特性有时候是一个优点,因为重写的过程消除了表中没用的空间。比如,要想立刻回收被一个已经删除的字段占据的空间,最快的方法是 + > ``` + > ALTER TABLE table ALTER COLUMN anycol TYPE anytype; + > ``` + > 这里的anycol是任何在表中还存在的字段,而anytype是和该字段的原类型一样的类型。这样的结果是在表上没有任何可见的语意的变化,但是这个命令强迫重写,这样就删除了不再使用的数据。 + >- **ALTER \[ COLUMN \] column\_name \{ SET DEFAULT expression | DROP DEFAULT \}** + > 为一个字段设置或者删除缺省值。请注意缺省值只应用于随后的INSERT命令,它们不会修改表中已经存在的行。也可以为视图创建缺省,这个时候它们是在视图的ON INSERT规则应用之前插入到INSERT句中的。 + >- **ALTER \[ COLUMN \] column\_name \{ SET | DROP \} NOT NULL** + > 修改一个字段是否允许NULL值或者拒绝NULL值。如果表在字段中包含非NULL,则只能使用SET NOT NULL。 + >- **ALTER \[ COLUMN \] column\_name SET STATISTICS \[PERCENT\] integer** + > 为随后的ANALYZE操作设置针对每个字段的统计收集目标。目标的范围可以在0到10000之内设置。设置为-1时表示重新恢复到使用系统缺省的统计目标。 + >- **\{ADD | DELETE\} STATISTICS \(\(column\_1\_name, column\_2\_name \[, ...\]\)\)** + > 用于添加和删除多列统计信息声明(不实际进行多列统计信息收集),以便在后续进行全表或全库analyze时进行多列统计信息收集。每组多列统计信息最多支持32列。不支持添加/删除多列统计信息声明的表:系统表、外表。 + >- **ALTER \[ COLUMN \] column\_name SET \( \{attribute\_option = value\} \[, ... \] \)** + > **ALTER \[ COLUMN \] column\_name RESET \( attribute\_option \[, ... \] \)** + > 设置/重置属性选项。 + > 目前,属性选项只定义了n\_distinct和n\_distinct\_inherited。n\_distinct影响表本身的统计值,而n\_distinct\_inherited影响表及其继承子表的统计。目前,只支持SET/RESET n\_distinct参数,禁止SET/RESET n\_distinct\_inherited参数。 + >- **ALTER \[ COLUMN \] column\_name SET STORAGE \{ PLAIN | EXTERNAL | EXTENDED | MAIN \}** + > 为一个字段设置存储模式。这个设置控制这个字段是内联保存还是保存在一个附属的表里,以及数据是否要压缩。仅支持对行存表的设置;对列存表没有意义,执行时报错。SET STORAGE本身并不改变表上的任何东西,只是设置将来的表操作时,建议使用的策略。 + + - 其中列约束column\_constraint为: + + ``` + [ CONSTRAINT constraint_name ] + { NOT NULL | + NULL | + CHECK ( expression ) | + DEFAULT default_expr | + UNIQUE index_parameters | + PRIMARY KEY index_parameters } + [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] + ``` + + - 其中列的压缩可选项compress\_mode为: + + ``` + [ DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS ] + ``` + + + - 其中根据已有唯一索引为表增加主键约束或唯一约束table\_constraint\_using\_index为: + + ``` + [ CONSTRAINT constraint_name ] + { UNIQUE | PRIMARY KEY } USING INDEX index_name + [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] + ``` + + - 其中表约束table\_constraint为: + + ``` + [ CONSTRAINT constraint_name ] + { CHECK ( expression ) | + UNIQUE ( column_name [, ... ] ) index_parameters | + PRIMARY KEY ( column_name [, ... ] ) index_parameters | + PARTIAL CLUSTER KEY ( column_name [, ... ] } + [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] + ``` + + 其中索引参数index\_parameters为: + + ``` + [ WITH ( {storage_parameter = value} [, ... ] ) ] + [ USING INDEX TABLESPACE tablespace_name ] + ``` + + + +- 重命名表。对名称的修改不会影响所存储的数据。 + + ``` + ALTER TABLE [ IF EXISTS ] table_name + RENAME TO new_table_name; + ``` + +- 重命名表中指定的列。 + + ``` + ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} + RENAME [ COLUMN ] column_name TO new_column_name; + ``` + +- 重命名表的约束。 + + ``` + ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) } + RENAME CONSTRAINT constraint_name TO new_constraint_name; + ``` + +- 设置表的所属模式。 + + ``` + ALTER TABLE [ IF EXISTS ] table_name + SET SCHEMA new_schema; + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- 这种形式把表移动到另外一个模式。相关的索引、约束都跟着移动。目前序列不支持改变schema。 若该表拥有序列,需要将序列删除,重建,或者取消拥有关系, 才能将表schema更改成功。 + >- 要修改一个表的模式,用户必须在新模式上拥有CREATE权限。要把该表添加为一个父表的新子表,用户必须同时又是父表的所有者。要修改所有者,用户还必须是新的所有角色的直接或间接成员,并且该成员必须在此表的模式上有CREATE权限。这些限制规定了该用户不能做出了重建和删除表之外的事情。不过,系统管理员可以以任何方式修改任意表的所有权限。 + >- 除了RENAME和SET SCHEMA之外所有动作都可以捆绑在一个经过多次修改的列表中并行使用。比如,可以在一个命令里增加几个字段或修改几个字段的类型。对于大表,此种操作带来的效率提升更明显,原因在于只需要对该大表做一次处理。 + >- 增加一个CHECK或NOT NULL约束将会扫描该表,以保证现有的行符合约束要求。 + >- 用一个非空缺省值增加一个字段或者改变一个字段的现有类型会重写整个表。对于大表来说,这个操作可能会花很长时间,并且它还临时需要两倍的磁盘空间。 + +- 添加多个列。 + + ``` + ALTER TABLE [ IF EXISTS ] table_name + ADD ( { column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ]} [, ...] ); + ``` + +- 更新多个列。 + + ``` + ALTER TABLE [ IF EXISTS ] table_name + MODIFY ( { column_name data_type | column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | column_name [ CONSTRAINT constraint_name ] NULL } [, ...] ); + ``` + + +## 参数说明 + +- **IF EXISTS** + + 如果不存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表不存在。 + +- **table\_name \[\*\] | ONLY table\_name | ONLY \( table\_name \)** + + table\_name是需要修改的表名。 + + 若声明了ONLY选项,则只有那个表被更改。若未声明ONLY,该表及其所有子表都将会被更改。另外,可以在表名称后面显示地增加\*选项来指定包括子表,即表示所有后代表都被扫描,这是默认行为。 + +- **constraint\_name** + + 要删除的现有约束的名称。 + +- **index\_name** + + 索引名称。 + +- **storage\_parameter** + + 表的存储参数的名称。 + +- **new\_owner** + + 表新拥有者的名称。 + +- **new\_tablespace** + + 表所属新的表空间名称。 + +- **column\_name**,**column\_1\_name, column\_2\_name** + + 现存的或新字段的名称。 + +- **data\_type** + + 新字段的类型,或者现存字段的新类型。 + +- **compress\_mode** + + 表字段的压缩可选项,当前仅对行存表有效。该子句指定该字段优先使用的压缩算法。 + +- **collation** + + 字段排序规则名称。可选字段COLLATE指定了新字段的排序规则,如果省略,排序规则为新字段的默认类型。 + +- **USING expression** + + USING子句声明如何从旧的字段值里计算新的字段值;如果省略,缺省从旧类型向新类型的赋值转换。如果从旧数据类型到新类型没有隐含或者赋值的转换,则必须提供一个USING子句。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >ALTER TYPE的USING选项实际上可以声明涉及该行旧值的任何表达式,即它可以引用除了正在被转换的字段之外其他的字段。这样,就可以用ALTER TYPE语法做非常普遍性的转换。因为这个灵活性,USING表达式并没有作用于该字段的缺省值(如果有的话),结果可能不是缺省表达式要求的常量表达式。这就意味着如果从旧类型到新类型没有隐含或者赋值转换的话,即使存在USING子句,ALTER TYPE也可能无法把缺省值转换成新的类型。在这种情况下,应该用DROP DEFAULT先删除缺省,执行ALTER TYPE,然后使用SET DEFAULT增加一个合适的新缺省值。类似的考虑也适用于涉及该字段的索引和约束。 + +- **NOT NULL | NULL** + + 设置列是否允许空值。 + +- **integer** + + 带符号的整数常值。当使用PERCENT时表示按照表数据的百分比收集统计信息,integer的取值范围为0-100。 + +- **attribute\_option** + + 属性选项。 + +- **PLAIN | EXTERNAL | EXTENDED | MAIN** + + 字段存储模式。 + + - PLAIN必需用于定长的数值(比如integer)并且是内联的、不压缩的。 + - MAIN用于内联、可压缩的数据。 + - EXTERNAL用于外部保存、不压缩的数据。使用EXTERNAL将令在text和bytea字段上的子字符串操作更快,但付出的代价是增加了存储空间。 + - EXTENDED用于外部的压缩数据,EXTENDED是大多数支持非PLAIN存储的数据的缺省。 + +- **CHECK \( expression \)** + + 每次将要插入的新行或者将要被更新的行必须使表达式结果为真才能成功,否则会抛出一个异常并且不会修改数据库。 + + 声明为字段约束的检查约束应该只引用该字段的数值,而在表约束里出现的表达式可以引用多个字段。 + + 目前,CHECK表达式不能包含子查询也不能引用除当前行字段之外的变量。 + +- **DEFAULT default\_expr** + + 给字段指定缺省值。 + + 缺省表达式的数据类型必须和字段类型匹配。 + + 缺省表达式将被用于任何未声明该字段数值的插入操作。如果没有指定缺省值则缺省值为NULL 。 + +- **UNIQUE index\_parameters** + + **UNIQUE \( column\_name \[, ... \] \) index\_parameters** + + UNIQUE约束表示表里的一个或多个字段的组合必须在全表范围内唯一。 + +- **PRIMARY KEY index\_parameters** + + **PRIMARY KEY \( column\_name \[, ... \] \) index\_parameters** + + 主键约束表明表中的一个或者一些字段只能包含唯一(不重复)的非NULL值。 + +- **DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE** + + 设置该约束是否可推迟。 + + - DEFERRABLE:可以推迟到事务结尾使用SET CONSTRAINTS命令检查。 + - NOT DEFERRABLE:在每条命令之后马上检查。 + - INITIALLY IMMEDIATE:那么每条语句之后就立即检查它。 + - INITIALLY DEFERRED:只有在事务结尾才检查它。 + +- **WITH \( \{storage\_parameter = value\} \[, ... \] \)** + + 为表或索引指定一个可选的存储参数。 + +- **tablespace\_name** + + 索引所在表空间的名称。 + +- **COMPRESS|NOCOMPRESS** + - NOCOMPRESS:如果指定关键字NOCOMPRESS则不会修改表的现有压缩特性。 + - COMPRESS:如果指定COMPRESS关键字,则对该表进行批量插入元组时触发该特性。 + +- **new\_table\_name** + + 修改后新的表名称。 + +- **new\_column\_name** + + 表中指定列修改后新的列名称。 + +- **new\_constraint\_name** + + 修改后表约束的新名称。 + +- **new\_schema** + + 修改后新的模式名称。 + +- **CASCADE** + + 级联删除依赖于被依赖字段或者约束的对象(比如引用该字段的视图)。 + +- **RESTRICT** + + 如果字段或者约束还有任何依赖的对象,则拒绝删除该字段。这是缺省行为。 + +- **schema\_name** + + 表所在的模式名称。 + + +## 示例 + +请参考CREATE TABLE的[示例](CREATE-TABLE.md#zh-cn_topic_0237122117_zh-cn_topic_0059778169_s86758dcf05d442d2a9ebd272e76ed1b8)。 + +## 相关链接 + +[CREATE TABLE](CREATE-TABLE.md),[DROP TABLE](DROP-TABLE.md) + diff --git a/content/zh/docs/Developerguide/ALTER TABLESPACE.md b/content/zh/docs/Developerguide/ALTER TABLESPACE.md new file mode 100644 index 000000000..a6f27d397 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER TABLESPACE.md @@ -0,0 +1,120 @@ +# ALTER TABLESPACE + +## 功能描述 + +修改表空间的属性。 + +## 注意事项 + +- 当前版本禁止使用ALTER TABLESPACE语法。 +- 只有表空间的所有者有权限执行ALTER TABLESPACE命令,系统管理员默认拥有此权限。 +- 要修改表空间的所有者A为B,则A必须是B的直接或者间接成员。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >如果new\_owner与old\_owner一致,此处不再校验当前执行操作的用户是否具有修改权限,而直接显示ALTER成功。 + + +## 语法格式 + +- 重命名表空间的语法。 + + ``` + ALTER TABLESPACE tablespace_name + RENAME TO new_tablespace_name; + ``` + +- 设置表空间所有者的语法。 + + ``` + ALTER TABLESPACE tablespace_name + OWNER TO new_owner; + ``` + +- 设置表空间属性的语法。 + + ``` + ALTER TABLESPACE tablespace_name + SET ( {tablespace_option = value} [, ... ] ); + ``` + +- 重置表空间属性的语法。 + + ``` + ALTER TABLESPACE tablespace_name + RESET ( { tablespace_option } [, ...] ); + ``` + +- 设置表空间限额的语法 + + ``` + ALTER TABLESPACE tablespace_name + RESIZE MAXSIZE { UNLIMITED | 'space_size'}; + ``` + + +## 参数说明 + +- **tablespace\_name** + + 要修改的表空间。 + + 取值范围:已存在的表空间名。 + +- **new\_tablespace\_name** + + 表空间的新名称。 + + 新名称不能以"PG\_"开头。 + + 取值范围:字符串,符合标识符命名规范。 + +- **new\_owner** + + 表空间的新所有者。 + + 取值范围:已存在的用户名。 + +- **tablespace\_option** + + 设置或者重置表空间的参数。 + + 取值范围: + + - seq\_page\_cost:设置优化器计算一次顺序获取磁盘页面的开销。缺省为1.0。 + - random\_page\_cost:设置优化器计算一次非顺序获取磁盘页面的开销。缺省为4.0。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >- random\_page\_cost是相对于seq\_page\_cost的取值,等于或者小于seq\_page\_cost时毫无意义。 + >- 默认值为4.0的前提条件是,优化器采用索引来扫描表数据,并且表数据在cache中命中率可以90%左右。 + >- 如果表数据空间要比物理内存小,那么减小该值到一个适当水平;相反地,如果表数据在cache中命中率要低于90%,那么适当增大该值。 + >- 如果采用了类似于SSD的随机访问代价较小的存储器,可以适当减小该值,以反映真正的随机扫描代价。 + + + value的取值范围:正的浮点类型。 + +- **RESIZE MAXSIZE** + + 重新设置表空间限额的数值。 + + 取值范围: + + - UNLIMITED,此表空间不设置限额。 + - 由space\_size来确定,其格式参考[CREATE TABLESPACE](CREATE-TABLESPACE.md)。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >修改参数MAXSIZE时也可使用: + >``` + >ALTER TABLESPACE tablespace_name RESIZE MAXSIZE + > { 'UNLIMITED' | 'space_size'}; + >``` + + + +## 示例 + +请参考CREATE TABLESPACE的[示例](CREATE-TABLESPACE.md#zh-cn_topic_0237122120_zh-cn_topic_0059777670_s4e5e97caa377440d87fad0d49b56323e)。 + +## 相关链接 + +[CREATE TABLESPACE](CREATE-TABLESPACE.md),[DROP TABLESPACE](DROP-TABLESPACE.md#ZH-CN_TOPIC_0242370617) + diff --git a/content/zh/docs/Developerguide/ALTER TEXT SEARCH CONFIGURATION.md b/content/zh/docs/Developerguide/ALTER TEXT SEARCH CONFIGURATION.md new file mode 100644 index 000000000..39d94e630 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER TEXT SEARCH CONFIGURATION.md @@ -0,0 +1,175 @@ +# ALTER TEXT SEARCH CONFIGURATION + +## 功能描述 + +更改文本搜索配置的定义。用户可以将映射从字串类型调整为字典,或者改变配置的名称或者所有者,或者修改搜索配置的配置参数。 + +ADD MAPPING FOR选项为文本搜索配置增加字串类型映射;如果ADD MAPPING FOR后面任何一个字串类型的映射已经存在于此文本搜索配置中,那么系统将会报错。 + +ALTER MAPPING FOR选项会首先清除已有的字串类型映射,然后添加指定的字串类型映射。 + +ALTER MAPPING REPLACE ... WITH ... 与ALTER MAPPING FOR ... REPLACE ... WITH ...选项会直接使用new\_dictionary替换old\_dictionary。需要注意的是,只有pg\_ts\_config\_map系统表中存在maptokentype与old\_dictionary对应关系的元组时,才能更新成功,否则不会成功,也不会有任何提示信息返回。 + +DROP MAPPING FOR选项会删除当前文本搜索配置中指定的字串类型映射。 如果没有指定IF EXISTS选项,当DROP MAPPING FOR选项指定的字串类型映射在文本搜索配置中不存在时,数据库会报错。 + +## 注意事项 + +- 当一个搜索配置已经被引用(如被用来创建索引),则不允许用户修改此文本搜索配置。 +- 要使用ALTER TEXT SEARCH CONFIGURATION,用户必须是配置的所有者。 + +## 语法格式 + +- 增加文本搜索配置字串类型映射语法 + +``` +ALTER TEXT SEARCH CONFIGURATION name + ADD MAPPING FOR token_type [, ... ] WITH dictionary_name [, ... ]; +``` + +- 修改文本搜索配置字典语法 + +``` +ALTER TEXT SEARCH CONFIGURATION name + ALTER MAPPING FOR token_type [, ... ] REPLACE old_dictionary WITH new_dictionary; +``` + +- 修改文本搜索配置字串类型语法 + +``` +ALTER TEXT SEARCH CONFIGURATION name + ALTER MAPPING FOR token_type [, ... ] WITH dictionary_name [, ... ]; +``` + +- 更改文本搜索配置字典语法 + +``` +ALTER TEXT SEARCH CONFIGURATION name + ALTER MAPPING REPLACE old_dictionary WITH new_dictionary; +``` + +- 删除文本搜索配置字串类型映射语法 + +``` +ALTER TEXT SEARCH CONFIGURATION name + DROP MAPPING [ IF EXISTS ] FOR token_type [, ... ]; +``` + +- 重命名文本搜索配置所有者语法 + +``` +ALTER TEXT SEARCH CONFIGURATION name OWNER TO new_owner; +``` + +- 重命名文本搜索配置名称语法 + +``` +ALTER TEXT SEARCH CONFIGURATION name RENAME TO new_name; +``` + +- 重命名文本搜索配置命名空间语法 + +``` +ALTER TEXT SEARCH CONFIGURATION name SET SCHEMA new_schema; +``` + +- 修改文本搜索配置属性语法 + +``` +ALTER TEXT SEARCH CONFIGURATION name SET ( { configuration_option = value } [, ...] ); +``` + +- 重置文本搜索配置属性语法 + +``` +ALTER TEXT SEARCH CONFIGURATION name RESET ( {configuration_option} [, ...] ); +``` + +## 参数说明 + +- **name** + + 已有文本搜索配置的名称(可以有模式修饰)。 + +- **token\_type** + + 与配置的语法解析器关联的字串类型的名称。详细信息参见[解析器](解析器.md#ZH-CN_TOPIC_0242370496)。 + +- **dictionary\_name** + + 文本搜索字典名称。 如果有多个字典,则它们会按指定的顺序搜索。 + +- **old\_dictionary** + + 映身中拟被替换的文本搜索字典名称。 + +- **new\_dictionary** + + 替换old\_dictionary的文本搜索字典的名称。 + +- **new\_owner** + + 文本搜索配置的新所有者。 + +- **new\_name** + + 文本搜索配置的新名称。 + +- **new\_schema** + + 文本搜索配置的新模式名。 + +- **configuration\_option** + + 文本搜索配置项。详细信息参见[CREATE TEXT SEARCH CONFIGURATION](CREATE-TEXT-SEARCH-CONFIGURATION.md#ZH-CN_TOPIC_0242370585)。 + +- **value** + + 文本搜索配置项的值。 + + +## 示例 + +``` +--创建文本搜索配置。 +postgres=# CREATE TEXT SEARCH CONFIGURATION english_1 (parser=default); +CREATE TEXT SEARCH CONFIGURATION + +--增加文本搜索配置字串类型映射语法。 +postgres=# ALTER TEXT SEARCH CONFIGURATION english_1 ADD MAPPING FOR word WITH simple,english_stem; +ALTER TEXT SEARCH CONFIGURATION + +--增加文本搜索配置字串类型映射语法。 +postgres=# ALTER TEXT SEARCH CONFIGURATION english_1 ADD MAPPING FOR email WITH english_stem, french_stem; +ALTER TEXT SEARCH CONFIGURATION + +--查询文本搜索配置相关信息。 +postgres=# SELECT b.cfgname,a.maptokentype,a.mapseqno,a.mapdict,c.dictname FROM pg_ts_config_map a,pg_ts_config b, pg_ts_dict c WHERE a.mapcfg=b.oid AND a.mapdict=c.oid AND b.cfgname='english_1' ORDER BY 1,2,3,4,5; + cfgname | maptokentype | mapseqno | mapdict | dictname +-----------+--------------+----------+---------+-------------- + english_1 | 2 | 1 | 3765 | simple + english_1 | 2 | 2 | 12960 | english_stem + english_1 | 4 | 1 | 12960 | english_stem + english_1 | 4 | 2 | 12964 | french_stem +(4 rows) + +--增加文本搜索配置字串类型映射语法。 +postgres=# ALTER TEXT SEARCH CONFIGURATION english_1 ALTER MAPPING REPLACE french_stem with german_stem; +ALTER TEXT SEARCH CONFIGURATION + +--查询文本搜索配置相关信息。 +postgres=# SELECT b.cfgname,a.maptokentype,a.mapseqno,a.mapdict,c.dictname FROM pg_ts_config_map a,pg_ts_config b, pg_ts_dict c WHERE a.mapcfg=b.oid AND a.mapdict=c.oid AND b.cfgname='english_1' ORDER BY 1,2,3,4,5; + cfgname | maptokentype | mapseqno | mapdict | dictname +-----------+--------------+----------+---------+-------------- + english_1 | 2 | 1 | 3765 | simple + english_1 | 2 | 2 | 12960 | english_stem + english_1 | 4 | 1 | 12960 | english_stem + english_1 | 4 | 2 | 12966 | german_stem +(4 rows) +``` + +请参见CREATE TEXT SEARCH CONFIGURATION的[示例](CREATE-TEXT-SEARCH-CONFIGURATION.md#zh-cn_topic_0237122121_zh-cn_topic_0059777835_sc3a4aef5c0c0420eaf5a2e67097004a2)。 + +## 相关链接 + +[CREATE TEXT SEARCH CONFIGURATION](CREATE-TEXT-SEARCH-CONFIGURATION.md#ZH-CN_TOPIC_0242370585), [DROP TEXT SEARCH CONFIGURATION](DROP-TEXT-SEARCH-CONFIGURATION.md#ZH-CN_TOPIC_0242370618) + diff --git a/content/zh/docs/Developerguide/ALTER TEXT SEARCH DICTIONARY.md b/content/zh/docs/Developerguide/ALTER TEXT SEARCH DICTIONARY.md new file mode 100644 index 000000000..57acbc734 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER TEXT SEARCH DICTIONARY.md @@ -0,0 +1,101 @@ +# ALTER TEXT SEARCH DICTIONARY + +## 功能描述 + +修改全文检索词典的相关定义,包括参数、名称、所有者、以及模式等。 + +## 注意事项 + +- 预定义词典不支持ALTER操作。 +- 只有词典的所有者可以执行ALTER操作,系统管理员默认拥有此权限。 +- 创建或修改词典之后,任何对于filepath路径下用户自定义的词典定义文件的修改,将不会影响到数据库中的词典。如果需要在数据库中使用这些修改,需使用ALTER TEXT SEARCH DICTIONARY语句更新对应词典的定义文件。 + +## 语法格式 + +- 修改词典定义。 + + ``` + ALTER TEXT SEARCH DICTIONARY name ( + option [ = value ] [, ... ] + ); + ``` + + +- 重命名词典。 + + ``` + ALTER TEXT SEARCH DICTIONARY name RENAME TO new_name; + ``` + +- 设置词典的所属模式。 + + ``` + ALTER TEXT SEARCH DICTIONARY name SET SCHEMA new_schema; + ``` + +- 修改词典的所属者。 + + ``` + ALTER TEXT SEARCH DICTIONARY name OWNER TO new_owner; + ``` + + +## 参数说明 + +- **name** + + 已存在的词典名(可指定模式名,否则默认在当前模式下)。 + + 取值范围:已存在的词典名。 + +- **option** + + 要修改的参数名。与template对应,不同的词典类型具有不同的参数列表,且与指定顺序无关。详细参数说明请见[option](CREATE-TEXT-SEARCH-DICTIONARY.md#zh-cn_topic_0237122122_li1286812455448)。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >- 不支持修改词典的TEMPLATE参数值。 + >- 不支持仅修改FILEPATH参数而不修改对应的词典定义文件参数。 + >- 词典定义文件的文件名仅支持小写字母、数据、下划线混合。 + +- **value** + + 要修改的参数值。如果省略等号(=)和value,则表示删除该option的先前设置,使用默认值。 + + 取值范围:对应option定义。 + +- **new\_name** + + 词典的新名称。 + + 取值范围:符合标识符命名规范的字符串,且最大长度不超过63个字符。 + +- **new\_owner** + + 词典新的所有者。 + + 取值范围:已存在的用户。 + +- **new\_schema** + + 词典的新模式。 + + 取值范围:已存在的模式。 + + +## 示例 + +``` +--更改Snowball类型字典的停用词定义,其他参数保持不变。 +postgres=# ALTER TEXT SEARCH DICTIONARY my_dict ( StopWords = newrussian, FilePath = 'file:///home/dicts' ); + +--更改Snowball类型字典的Language参数,并删除停用词定义。 +postgres=# ALTER TEXT SEARCH DICTIONARY my_dict ( Language = dutch, StopWords ); + +--更新词典定义,不实际更改任何内容。 +postgres=# ALTER TEXT SEARCH DICTIONARY my_dict ( dummy ); +``` + +## 相关链接 + +[CREATE TEXT SEARCH DICTIONARY](CREATE-TEXT-SEARCH-DICTIONARY.md#ZH-CN_TOPIC_0242370586),[DROP TEXT SEARCH DICTIONARY](DROP-TEXT-SEARCH-DICTIONARY.md#ZH-CN_TOPIC_0242370619) + diff --git a/content/zh/docs/Developerguide/ALTER TRIGGER.md b/content/zh/docs/Developerguide/ALTER TRIGGER.md new file mode 100644 index 000000000..6fa9244bc --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER TRIGGER.md @@ -0,0 +1,45 @@ +# ALTER TRIGGER + +## 功能描述 + +修改触发器定义。 + +## 注意事项 + +只有触发器所在表的所有者可以执行ALTER TRIGGER操作,系统管理员默认拥有此权限。 + +## 语法格式 + +``` +ALTER TRIGGER trigger_name ON table_name RENAME TO new_name; +``` + +## 参数说明 + +- **trigger\_name** + + 要修改的触发器名称。 + + 取值范围:已存在的触发器。 + +- **table\_name** + + 要修改的触发器所在的表名称。 + + 取值范围:已存在的含触发器的表。 + +- **new\_name** + + 修改后的新名称。 + + 取值范围:符合标识符命名规范的字符串,最大长度不超过63个字符,且不能与所在表上其他触发器同名。 + + +## 示例 + +请参见[CREATE TRIGGER](CREATE-TRIGGER.md)的示例。 + +## 相关链接 + +[CREATE TRIGGER](CREATE-TRIGGER.md),[DROP TRIGGER](DROP-TRIGGER.md#ZH-CN_TOPIC_0242370620),[ALTER TABLE](ALTER-TABLE.md) + diff --git a/content/zh/docs/Developerguide/ALTER TYPE.md b/content/zh/docs/Developerguide/ALTER TYPE.md new file mode 100644 index 000000000..9d911b7dd --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER TYPE.md @@ -0,0 +1,152 @@ +# ALTER TYPE + +## 功能描述 + +修改一个类型的定义。 + +## 语法格式 + +- 修改类型 + + ``` + ALTER TYPE name action [, ... ] + ALTER TYPE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER } + ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ] + ALTER TYPE name RENAME TO new_name + ALTER TYPE name SET SCHEMA new_schema + ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ] + ALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value + + where action is one of: + ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ] + DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ] + ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ] + ``` + +- 给复合类型增加新的属性。 + + ``` + ALTER TYPE name ADD ATTRIBUTE attribute_name data_type [ COLLATE collation ] [ CASCADE | RESTRICT ] + ``` + + +- 从复合类型删除一个属性。 + + ``` + ALTER TYPE name DROP ATTRIBUTE [ IF EXISTS ] attribute_name [ CASCADE | RESTRICT ] + ``` + + +- 改变一种复合类型中某个属性的类型。 + + ``` + ALTER TYPE name ALTER ATTRIBUTE attribute_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ CASCADE | RESTRICT ] + ``` + + +- 改变类型的所有者。 + + ``` + ALTER TYPE name OWNER TO { new_owner | CURRENT_USER | SESSION_USER } + ``` + + +- 改变类型的名称或是一个复合类型中的一个属性的名称。 + + ``` + ALTER TYPE name RENAME TO new_name + ALTER TYPE name RENAME ATTRIBUTE attribute_name TO new_attribute_name [ CASCADE | RESTRICT ] + ``` + + +- 将类型移至一个新的模式中。 + + ``` + ALTER TYPE name SET SCHEMA new_schema + ``` + + +- 为枚举类型增加一个新值。 + + ``` + ALTER TYPE name ADD VALUE [ IF NOT EXISTS ] new_enum_value [ { BEFORE | AFTER } neighbor_enum_value ] + ``` + + +- 重命名枚举类型的一个标签值。 + + ``` + ALTER TYPE name RENAME VALUE existing_enum_value TO new_enum_value + ``` + + +## 参数说明 + +- **name** + + 一个需要修改的现有的类型的名称\(可以有模式修饰\) 。 + + +- **new\_name** + + 该类型的新名称。 + + +- **new\_owner** + + 新所有者的用户名 。 + + +- **new\_schema** + + 该类型的新模式 。 + + +- **attribute\_name** + + 拟增加、更改或删除的属性的名称。 + + +- **new\_attribute\_name** + + 拟改名的属性的新名称。 + + +- **data\_type** + + 拟新增属性的数据类型,或是拟更改的属性的新类型名。 + +- **new\_enum\_value** + + 枚举类型新增加的标签值,是一个非空的长度不超过64个字节的字符串。 + +- **neighbor\_enum\_value** + + 一个已有枚举标签值,新值应该被增加在紧接着该枚举值之前或者之后的位置上。 + +- **existing\_enum\_value** + + 现有的要重命名的枚举值,是一个非空的长度不超过64个字节的字符串 + + +- **CASCADE** + + 自动级联更新需更新类型以及相关联的记录和继承它们的子表。 + +- **RESTRICT** + + 如果需联动更新类型是已更新类型的关联记录,则拒绝更新。这是缺省选项。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >- ADD ATTRIBUTE、DROP ATTRIBUTE和ALTER ATTRIBUTE选项可以组合成一个列表同时处理。 例如,在一条命令中同时增加几个属性或是更改几个属性的类型是可以实现的。 + >- 要使用ALTER TYPE,必须是该类型的所有者。 要修改一个类型的模式,还必须在新模式上拥有CREATE权限。 要修改所有者,必须是新的所有角色的直接或间接成员, 并且该成员必须在此类型的模式上有CREATE权限。 (这些限制强制了修改所有者不会做任何通过删除和重建类型不能做的事情。 不过,系统管理员可以以任何方式修改任意类型的所有权。) 要增加一个属性或是修改一个属性的类型,也必须有该类型的USAGE权限。 + + +## 示例 + +请参考CREATE TYPE的[示例](CREATE-TYPE.md#zh-cn_topic_0237122124_zh-cn_topic_0059779377_s66a0b4a6a1df4ba4a116c6c565a0fe9d)。 + +## 相关链接 + +[CREATE TYPE](CREATE-TYPE.md#ZH-CN_TOPIC_0242370588),[DROP TYPE](DROP-TYPE.md#ZH-CN_TOPIC_0242370621) + diff --git a/content/zh/docs/Developerguide/ALTER USER.md b/content/zh/docs/Developerguide/ALTER USER.md new file mode 100644 index 000000000..2f6b547fc --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER USER.md @@ -0,0 +1,113 @@ +# ALTER USER + +## 功能描述 + +修改数据库用户的属性。 + +## 注意事项 + +ALTER USER中修改的会话参数只针对指定的用户,且在下一次会话中有效。 + +## 语法格式 + +- 修改用户的权限等信息。 + + ``` + ALTER USER user_name [ [ WITH ] option [ ... ] ]; + ``` + + 其中option子句为。 + + ``` + { CREATEDB | NOCREATEDB } + | { CREATEROLE | NOCREATEROLE } + | { INHERIT | NOINHERIT } + | { AUDITADMIN | NOAUDITADMIN } + | { SYSADMIN | NOSYSADMIN } + | {MONADMIN | NOMONADMIN} + | {OPRADMIN | NOOPRADMIN} + | {POLADMIN | NOPOLADMIN} + | { USEFT | NOUSEFT } + | { LOGIN | NOLOGIN } + | { REPLICATION | NOREPLICATION } + | {INDEPENDENT | NOINDEPENDENT} + | {VCADMIN | NOVCADMIN} + | CONNECTION LIMIT connlimit + | [ ENCRYPTED | UNENCRYPTED ] PASSWORD { 'password' | DISABLE } + | [ ENCRYPTED | UNENCRYPTED ] IDENTIFIED BY { 'password' [ REPLACE 'old_password' ] | DISABLE } + | VALID BEGIN 'timestamp' + | VALID UNTIL 'timestamp' + | RESOURCE POOL 'respool' + | USER GROUP 'groupuser' + | PERM SPACE 'spacelimit' + | NODE GROUP logic_cluster_name + | ACCOUNT { LOCK | UNLOCK } + | PGUSER + ``` + +- 修改用户名。 + + ``` + ALTER USER user_name + RENAME TO new_name; + ``` + +- 修改与用户关联的指定会话参数值。 + + ``` + ALTER USER user_name + SET configuration_parameter { { TO | = } { value | DEFAULT } | FROM CURRENT }; + ``` + +- 重置与用户关联的指定会话参数值。 + + ``` + ALTER USER user_name + RESET { configuration_parameter | ALL }; + ``` + + +## 参数说明 + +- **user\_name** + + 现有用户名。 + + 取值范围:已存在的用户名。 + +- **new\_password** + + 新密码。 + + 密码规则如下: + + - 不能与当前密码相同。 + - 密码默认不少于8个字符。 + - 不能与用户名及用户名倒序相同。 + - 至少包含大写字母(A-Z),小写字母(a-z),数字(0-9),非字母数字字符(限定为\~!@\#$%^&\*\(\)-\_=+\\|\[\{\}\];:,<.\>/?)四类字符中的三类字符。 + + 取值范围:字符串。 + +- **old\_password** + + 旧密码。 + +- **ACCOUNT LOCK | ACCOUNT UNLOCK** + - ACCOUNT LOCK:锁定帐户,禁止登录数据库。 + - ACCOUNT UNLOCK:解锁帐户,允许登录数据库。 + +- **PGUSER** + + 当前版本不允许修改用户的PGUSER属性。 + + +其他参数请参见[CREATE ROLE](CREATE-ROLE.md)和[ALTER ROLE](ALTER-ROLE.md#ZH-CN_TOPIC_0242370532)的参数说明。 + +## 示例 + +请参考CREATE USER的[示例](CREATE-USER.md#zh-cn_topic_0237122125_zh-cn_topic_0059778166_sfbca773f5bcd4799b3ea668b3eb074fa)。 + +## 相关链接 + +[CREATE ROLE](CREATE-ROLE.md),[CREATE USER](CREATE-USER.md#ZH-CN_TOPIC_0242370589),[DROP USER](DROP-USER.md) + diff --git a/content/zh/docs/Developerguide/ALTER VIEW.md b/content/zh/docs/Developerguide/ALTER VIEW.md new file mode 100644 index 000000000..0e99a5fe6 --- /dev/null +++ b/content/zh/docs/Developerguide/ALTER VIEW.md @@ -0,0 +1,130 @@ +# ALTER VIEW + +## 功能描述 + +ALTER VIEW更改视图的各种辅助属性。(如果用户是更改视图的查询定义,要使用CREATE OR REPLACE VIEW。) + +## 注意事项 + +- 用户必须是视图的所有者才可以使用ALTER VIEW。 +- 要改变视图的模式,用户必须要有新模式的CREATE权限。 +- 要改变视图的所有者,用户必须是新所属角色的直接或者间接的成员,并且此角色必须有视图模式的CREATE权限。 +- 管理员用户可以更改任何视图的所属关系。 + +## 语法格式 + +- 设置视图列的默认值。 + + ``` + ALTER VIEW [ IF EXISTS ] view_name + ALTER [ COLUMN ] column_name SET DEFAULT expression; + ``` + +- 取消列视图列的默认值。 + + ``` + ALTER VIEW [ IF EXISTS ] view_name + ALTER [ COLUMN ] column_name DROP DEFAULT; + ``` + +- 修改视图的所有者。 + + ``` + ALTER VIEW [ IF EXISTS ] view_name + OWNER TO new_owner; + ``` + +- 重命名视图。 + + ``` + ALTER VIEW [ IF EXISTS ] view_name + RENAME TO new_name; + ``` + +- 设置视图的所属模式。 + + ``` + ALTER VIEW [ IF EXISTS ] view_name + SET SCHEMA new_schema; + ``` + +- 设置视图的选项。 + + ``` + ALTER VIEW [ IF EXISTS ] view_name + SET ( { view_option_name [ = view_option_value ] } [, ... ] ); + ``` + +- 重置视图的选项。 + + ``` + ALTER VIEW [ IF EXISTS ] view_name + RESET ( view_option_name [, ... ] ); + ``` + + +## 参数说明 + +- **IF EXISTS** + + 使用这个选项,如果视图不存在时不会产生错误,仅有会有一个提示信息。 + +- **view\_name** + + 视图名称,可以用模式修饰。 + + 取值范围:字符串,符合标识符命名规范。 + +- **column\_name** + + 可选的名称列表,视图的字段名。如果没有给出,字段名取自查询中的字段名。 + + 取值范围:字符串,符合标识符命名规范。 + +- **SET/DROP DEFAULT** + + 设置或删除一个列的缺省值,该参数暂无实际意义。 + +- **new\_owner** + + 视图新所有者的用户名称。 + +- **new\_name** + + 视图的新名称。 + +- **new\_schema** + + 视图的新模式。 + +- **view\_option\_name \[ = view\_option\_value \]** + + 该子句为视图指定一个可选的参数。 + + 目前view\_option\_name支持的参数仅有security\_barrier,当VIEW试图提供行级安全时,应使用该参数。 + + 取值范围:Boolean类型,TRUE、FALSE。 + + +## 示例 + +``` +--创建一个由c_customer_sk小于150的内容组成的视图。 +postgres=# CREATE VIEW tpcds.customer_details_view_v1 AS + SELECT * FROM tpcds.customer + WHERE c_customer_sk < 150; + +--修改视图名称。 +postgres=# ALTER VIEW tpcds.customer_details_view_v1 RENAME TO customer_details_view_v2; + +--修改视图所属schema。 +postgres=# ALTER VIEW tpcds.customer_details_view_v2 SET schema public; + +--删除视图。 +postgres=# DROP VIEW public.customer_details_view_v2; +``` + +## 相关链接 + +[CREATE VIEW](CREATE-VIEW.md#ZH-CN_TOPIC_0242370590),[DROP VIEW](DROP-VIEW.md#ZH-CN_TOPIC_0242370623) + diff --git a/content/zh/docs/Developerguide/ANALYZE ANALYSE.md b/content/zh/docs/Developerguide/ANALYZE ANALYSE.md new file mode 100644 index 000000000..4de78f91a --- /dev/null +++ b/content/zh/docs/Developerguide/ANALYZE ANALYSE.md @@ -0,0 +1,192 @@ +# ANALYZE | ANALYSE + +## 功能描述 + +用于收集与数据库中普通表内容相关的统计信息,统计结果存储在系统表PG\_STATISTIC下。执行计划生成器会使用这些统计数据,以确定最有效的执行计划。 + +如果没有指定参数,ANALYZE会分析当前数据库中的每个表和分区表。同时也可以通过指定table\_name、column和partition\_name参数把分析限定在特定的表、列或分区表中。 + +ANALYZE|ANALYSE VERIFY用于检测数据库中普通表(行存表、列存表)的数据文件是否损坏。 + +## 注意事项 + +ANALYZE非临时表不能在一个匿名块、事务块、函数或存储过程内被执行。支持存储过程中ANALYZE临时表,不支持统计信息回滚操作。 + +ANALYZE VERIFY 操作处理的大多为异常场景检测需要使用RELEASE版本。ANALYZE VERIFY 场景不触发远程读,因此远程读参数不生效。对于关键系统表出现错误被系统检测出页面损坏时,将直接报错不再继续检测。 + +## 语法格式 + +- 收集表的统计信息。 + + ``` + { ANALYZE | ANALYSE } [ VERBOSE ] + [ table_name [ ( column_name [, ...] ) ] ]; + ``` + + +- 收集分区表的统计信息。 + + ``` + { ANALYZE | ANALYSE } [ VERBOSE ] + [ table_name [ ( column_name [, ...] ) ] ] + PARTITION ( patrition_name ) ; + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >普通分区表目前支持针对某个分区的统计信息的语法,但功能上不支持针对某个分区的统计信息收集。 + + +- 收集多列统计信息 + + ``` + {ANALYZE | ANALYSE} [ VERBOSE ] + table_name (( column_1_name, column_2_name [, ...] )); + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- 收集多列统计信息时,请设置GUC参数[default\_statistics\_target](其他优化器选项.md#zh-cn_topic_0237124719_zh-cn_topic_0059779049_se18c86fcdf5e4a22870f71187436d815)为负数,以使用百分比采样方式。 + >- 每组多列统计信息最多支持32列。 + >- 不支持收集多列统计信息的表:系统表。 + + +- 检测当前库的数据文件 + + ``` + {ANALYZE | ANALYSE} VERIFY {FAST|COMPLETE}; + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- Fast模式校验时,需要对校验的表有并发的DML操作,会导致校验过程中有误报的问题,因为当前Fast模式是直接从磁盘上读取,并发有其他线程修改文件时,会导致获取的数据不准确,建议离线操作。 + >- 支持对全库进行操作,由于涉及的表较多,建议以重定向保存结果**gsql -d database -p port -f "verify.sql"\> verify\_warning.txt 2\>&1**。 + >- 不支持临时表和unlog表。 + >- 对外提示NOTICE只核对外可见的表,内部表的检测会包含在它所依赖的外部表,不对外显示和呈现。 + >- 此命令的处理可容错ERROR级别的处理。由于debug版本的Assert可能会导致core无法继续执行命令,建议在release模式下操作。 + >- 对于全库操作时,当关键系统表出现损坏则直接报错,不再继续执行。 + +- 检测表和索引的数据文件 + + ``` + {ANALYZE | ANALYSE} VERIFY {FAST|COMPLETE} table_name|index_name [CASCADE]; + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- 支持对普通表的操作和索引表的操作,但不支持对索引表index使用CASCADE操作。原因是由于CASCADE模式用于处理主表的所有索引表,当单独对索引表进行检测时,无需使用CASCADE模式。 + >- 不支持临时表和unlog表。 + >- 对于主表的检测会同步检测主表的内部表,例如toast表、cudesc表等。 + >- 当提示索引表损坏时,建议使用reindex命令进行重建索引操作。 + +- 检测表分区的数据文件 + +``` +{ANALYZE | ANALYSE} VERIFY {FAST|COMPLETE} table_name PARTITION {(patrition_name)}[CASCADE]; +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>- 支持对表的单独分区进行检测操作,但不支持对索引表index使用CASCADE操作。 +>- 不支持临时表和unlog表. + +## 参数说明 + +- **VERBOSE** + + 启用显示进度信息。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >如果指定了VERBOSE,ANALYZE发出进度信息,表明目前正在处理的表。各种有关表的统计信息也会打印出来。 + +- **table\_name** + + 需要分析的特定表的表名(可能会带模式名),如果省略,将对数据库中的所有表(非外部表)进行分析。 + + 对于ANALYZE收集统计信息,目前仅支持行存表、列存表。 + + 取值范围:已有的表名。 + +- **column\_name**,column\_1\_name,column\_2\_name + + 需要分析特定列的列名,默认为所有列。 + + 取值范围:已有的列名。 + +- **partition\_name** + + 如果table为分区表,在关键字PARTITION后面指定分区名partition\_name表示分析该分区表的统计信息。目前语法上支持分区表做ANALYZE,但功能实现上暂不支持对指定分区统计信息的分析。 + + 取值范围:表的某一个分区名。 + +- **index\_name** + + 需要分析的特定索引表的表名(可能会带模式名)。 + + 取值范围:已有的表名。 + +- **FAST|COMPLETE** + + 对于行存表,FAST模式下主要对于行存表的CRC和page header进行校验,如果校验失败则会告警; 而COMPLETE模式下,则主要对行存表的指针、tuple进行解析校验。 对于列存表,FAST模式下主要对于列存表的CRC和magic进行校验,如果校验失败则会告警; 而COMPLETE模式下,则主要对列存表的CU进行解析校验。 + +- **CASCADE** + + CASCADE模式下会对当前表的所有索引进行检测处理。 + + +## 示例 + +--- 创建表。 + +``` +postgres=# CREATE TABLE customer_info +( +WR_RETURNED_DATE_SK INTEGER , +WR_RETURNED_TIME_SK INTEGER , +WR_ITEM_SK INTEGER NOT NULL, +WR_REFUNDED_CUSTOMER_SK INTEGER +) +; +``` + +--- 创建分区表。 + +``` +postgres=# CREATE TABLE customer_par +( +WR_RETURNED_DATE_SK INTEGER , +WR_RETURNED_TIME_SK INTEGER , +WR_ITEM_SK INTEGER NOT NULL, +WR_REFUNDED_CUSTOMER_SK INTEGER +) +PARTITION BY RANGE(WR_RETURNED_DATE_SK) +( +PARTITION P1 VALUES LESS THAN(2452275), +PARTITION P2 VALUES LESS THAN(2452640), +PARTITION P3 VALUES LESS THAN(2453000), +PARTITION P4 VALUES LESS THAN(MAXVALUE) +) +ENABLE ROW MOVEMENT; +``` + +--- 使用ANALYZE语句更新统计信息。 + +``` +postgres=# ANALYZE customer; +``` + +--- 使用ANALYZE VERBOSE语句更新统计信息,并输出表的相关信息。 + +``` +postgres=# ANALYZE VERBOSE customer_info; +INFO: analyzing "cstore.pg_delta_3394584009"(cn_5002 pid=53078) +INFO: analyzing "public.customer_info"(cn_5002 pid=53078) +INFO: analyzing "public.customer_info" inheritance tree(cn_5002 pid=53078) +ANALYZE +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>若环境若有故障,需查看数据库主节点的log。 + +--- 删除表。 + +``` +postgres=# DROP TABLE customer; +postgres=# DROP TABLE customer_par; +``` + diff --git a/content/zh/docs/Developerguide/COMMIT END.md b/content/zh/docs/Developerguide/COMMIT END.md new file mode 100644 index 000000000..6d7d1b339 --- /dev/null +++ b/content/zh/docs/Developerguide/COMMIT END.md @@ -0,0 +1,67 @@ +# COMMIT | END + +## 功能描述 + +通过COMMIT或者END可完成提交事务的功能,即提交事务的所有操作。 + +## 注意事项 + +执行COMMIT这个命令的时候,命令执行者必须是该事务的创建者或系统管理员,且创建和提交操作可以不在同一个会话中。 + +## 语法格式 + +``` +{ COMMIT | END } [ WORK | TRANSACTION ] ; +``` + +## 参数说明 + +- **COMMIT | END** + + 提交当前事务,让所有当前事务的更改为其他事务可见。 + +- **WORK | TRANSACTION** + + 可选关键字,除了增加可读性没有其他任何作用。 + + +## 示例 + +``` +--创建表。 +postgres=# CREATE TABLE tpcds.customer_demographics_t2 +( + CD_DEMO_SK INTEGER NOT NULL, + CD_GENDER CHAR(1) , + CD_MARITAL_STATUS CHAR(1) , + CD_EDUCATION_STATUS CHAR(20) , + CD_PURCHASE_ESTIMATE INTEGER , + CD_CREDIT_RATING CHAR(10) , + CD_DEP_COUNT INTEGER , + CD_DEP_EMPLOYED_COUNT INTEGER , + CD_DEP_COLLEGE_COUNT INTEGER +) +WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE) +; + +--开启事务。 +postgres=# START TRANSACTION; + +--插入数据。 +postgres=# INSERT INTO tpcds.customer_demographics_t2 VALUES(1,'M', 'U', 'DOCTOR DEGREE', 1200, 'GOOD', 1, 0, 0); +postgres=# INSERT INTO tpcds.customer_demographics_t2 VALUES(2,'F', 'U', 'MASTER DEGREE', 300, 'BAD', 1, 0, 0); + +--提交事务,让所有更改永久化。 +postgres=# COMMIT; + +--查询数据。 +postgres=# SELECT * FROM tpcds.customer_demographics_t2; + +--删除表tpcds.customer_demographics_t2。 +postgres=# DROP TABLE tpcds.customer_demographics_t2; +``` + +## 相关链接 + +[ROLLBACK](ROLLBACK.md) + diff --git a/content/zh/docs/Developerguide/COMMIT PREPARED.md b/content/zh/docs/Developerguide/COMMIT PREPARED.md new file mode 100644 index 000000000..69867890d --- /dev/null +++ b/content/zh/docs/Developerguide/COMMIT PREPARED.md @@ -0,0 +1,35 @@ +# COMMIT PREPARED + +## 功能描述 + +提交一个早先为两阶段提交准备好的事务。 + +## 注意事项 + +- 该功能仅在维护模式\(GUC参数xc\_maintenance\_mode为on时\)下可用。该模式谨慎打开,一般供维护人员排查问题使用,一般用户不应使用该模式。 +- 命令执行者必须是该事务的创建者或系统管理员,且创建和提交操作可以不在同一个会话中。 +- 事务功能由数据库自动维护,不应显式使用事务功能。 + +## 语法格式 + +``` +COMMIT PREPARED transaction_id ; +COMMIT PREPARED transaction_id WITH CSN; +``` + +## 参数说明 + +- **transaction\_id** + + 待提交事务的标识符。它不能和任何当前预备事务已经使用了的标识符同名。 + + +- **CSN\(commit sequence number\)** + + 待提交事务的序列号。它是一个64位递增无符号数。 + + +## 相关链接 + +[PREPARE TRANSACTION](PREPARE-TRANSACTION.md#ZH-CN_TOPIC_0242370636),[ROLLBACK PREPARED](ROLLBACK-PREPARED.md#ZH-CN_TOPIC_0242370645)。 + diff --git a/content/zh/docs/Developerguide/CREATE DATA SOURCE.md b/content/zh/docs/Developerguide/CREATE DATA SOURCE.md new file mode 100644 index 000000000..211019c49 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE DATA SOURCE.md @@ -0,0 +1,92 @@ +# CREATE DATA SOURCE + +## 功能描述 + +创建一个新的外部数据源对象,该对象用于定义openGauss要连接的目标库信息。 + +## 注意事项 + +- Data Source名称在数据库中需唯一,遵循标识符命名规范,长度限制为63字节,过长则会被截断。 +- 只有系统管理员或初始用户才有权限创建Data Source对象。且创建该对象的用户为其默认属主。 +- 当在OPTIONS中出现password选项时,需要保证openGauss每个节点的$GAUSSHOME/bin目录下存在datasource.key.cipher和datasource.key.rand文件,如果不存在这两个文件,请使用gs\_guc工具生成并使用gs\_ssh工具发布到openGauss每个节点的$GAUSSHOME/bin目录下。 + +## 语法格式 + +``` +CREATE DATA SOURCE src_name + [TYPE 'type_str'] + [VERSION {'version_str' | NULL}] + [OPTIONS (optname 'optvalue' [, ...])]; +``` + +## 参数说明 + +- **src\_name** + + 新建Data Source对象的名称,需在数据库内部唯一。 + + 取值范围:字符串,要符标识符的命名规范。 + +- **TYPE** + + 新建Data Source对象的类型,可缺省。 + + 取值范围:空串或非空字符串。 + +- **VERSION** + + 新建Data Source对象的版本号,可缺省或NULL值。 + + 取值范围:空串或非空字符串或NULL。 + +- **OPTIONS** + + Data Source对象的选项字段,创建时可省略,如若指定,其关键字如下: + + - optname + + 选项名称。 + + 取值范围:dsn, username, password, encoding。不区分大小写。 + + - dsn对应odbc配置文件中的DSN。 + - username/password对应连接目标库的用户名和密码。 + + openGauss在后台会对用户输入的username/password加密以保证安全性。该加密所需密钥文件需要使用gs\_guc工具生成并使用gs\_ssh工具发布到openGauss每个节点的$GAUSSHOME/bin目录下。username/password不应当包含'encryptOpt'前缀,否则会被认为是加密后的密文。 + + - encoding表示与目标库交互的字符串编码方式(含发送的SQL语句和返回的字符类型数据),此处创建对象时不检查encoding取值的合法性,能否正确编解码取决于用户提供的编码方式是否在数据库本身支持的字符编码范围内。 + + - optvalue + + 选项值。 + + 取值范围:空或者非空字符串。 + + + +## 示例 + +``` +--创建一个空的Data Source对象,不含任何信息。 +postgres=# CREATE DATA SOURCE ds_test1; + +--创建一个Data Source对象,含TYPE信息,VERSION为NULL。 +postgres=# CREATE DATA SOURCE ds_test2 TYPE 'MPPDB' VERSION NULL; + +--创建一个Data Source对象,仅含OPTIONS。 +postgres=# CREATE DATA SOURCE ds_test3 OPTIONS (dsn 'openGauss', encoding 'utf8'); + +--创建一个Data Source对象,含TYPE, VERSION, OPTIONS。 +postgres=# CREATE DATA SOURCE ds_test4 TYPE 'unknown' VERSION '11.2.3' OPTIONS (dsn 'openGauss', username 'userid', password 'pwd@123456', encoding ''); + +--删除Data Source对象。 +postgres=# DROP DATA SOURCE ds_test1; +postgres=# DROP DATA SOURCE ds_test2; +postgres=# DROP DATA SOURCE ds_test3; +postgres=# DROP DATA SOURCE ds_test4; +``` + +## 相关链接 + +**[ALTER DATA SOURCE](ALTER-DATA-SOURCE.md#ZH-CN_TOPIC_0242370520), [DROP DATA SOURCE](DROP-DATA-SOURCE.md#ZH-CN_TOPIC_0242370599)** + diff --git a/content/zh/docs/Developerguide/CREATE DATABASE.md b/content/zh/docs/Developerguide/CREATE DATABASE.md new file mode 100644 index 000000000..08e9b2cd1 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE DATABASE.md @@ -0,0 +1,170 @@ +# CREATE DATABASE + +## 功能描述 + +创建一个新的数据库。缺省情况下新数据库将通过复制标准系统数据库template0来创建,且仅支持使用template0来创建。 + +## 注意事项 + +- 只有拥有CREATEDB权限的用户才可以创建新数据库,系统管理员默认拥有此权限。 +- 不能在事务块中执行创建数据库语句。 +- 在创建数据库过程中,若出现类似“could not initialize database directory”的错误提示,可能是由于文件系统上数据目录的权限不足或磁盘满等原因引起。 + +## 语法格式 + +``` +CREATE DATABASE database_name + [ [ WITH ] { [ OWNER [=] user_name ] | + [ TEMPLATE [=] template ] | + [ ENCODING [=] encoding ] | + [ LC_COLLATE [=] lc_collate ] | + [ LC_CTYPE [=] lc_ctype ] | + [ DBCOMPATIBILITY [=] compatibilty_type ] | + [ TABLESPACE [=] tablespace_name ] | + [ CONNECTION LIMIT [=] connlimit ]}[...] ]; +``` + +## 参数说明 + +- **database\_name** + + 数据库名称。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **OWNER \[ = \] user\_name** + + 数据库所有者。缺省时,新数据库的所有者是当前用户。 + + 取值范围:已存在的用户名。 + +- **TEMPLATE \[ = \] template** + + 模板名。即从哪个模板创建新数据库。openGauss采用从模板数据库复制的方式来创建新的数据库。初始时,openGauss包含两个模板数据库template0、template1,以及一个默认的用户数据库postgres。 + + 取值范围:仅template0。 + +- **ENCODING \[ = \] encoding** + + 指定数据库使用的字符编码,可以是字符串(如'SQL\_ASCII')、整数编号。 + + 不指定时,默认使用模版数据库的编码。模板数据库template0和template1的编码默认与操作系统环境相关。template1不允许修改字符编码,因此若要变更编码,请使用template0创建数据库。 + + 常用取值:GBK、UTF8、Latin1。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >- 指定新的数据库字符集编码必须与所选择的本地环境中(LC\_COLLATE和LC\_CTYPE)的设置兼容。 + >- 当指定的字符编码集为GBK时,部分中文生僻字无法直接作为对象名。这是因为GBK第二个字节的编码范围在0x40-0x7E之间时,字节编码与ASCII字符@A-Z\[\\\]^\_\`a-z\{|\}重叠。其中@\[\\\]^\_'\{|\}是数据库中的操作符,直接作为对象名时,会语法报错。例如“侤”字,GBK16进制编码为0x8240,第二个字节为0x40,与ASCII“@”符号编码相同,因此无法直接作为对象名使用。如果确实要使用,可以在创建和访问对象时,通过增加双引号来规避这个问题。 + +- **LC\_COLLATE \[ = \] lc\_collate** + + 指定新数据库使用的字符集。例如,通过lc\_collate = 'zh\_CN.gbk'设定该参数。 + + 该参数的使用会影响到对字符串的排序顺序(如使用ORDER BY执行,以及在文本列上使用索引的顺序)。默认是使用模板数据库的排序顺序。 + + 取值范围:有效的排序类型。 + +- **LC\_CTYPE \[ = \] lc\_ctype** + + 指定新数据库使用的字符分类。例如,通过lc\_ctype = 'zh\_CN.gbk'设定该参数。该参数的使用会影响到字符的分类,如大写、小写和数字。默认是使用模板数据库的字符分类。 + + 取值范围:有效的字符分类。 + +- **DBCOMPATIBILITY \[ = \] compatibilty\_type** + + 指定兼容的数据库的类型。 + + 取值范围:A、B、C。分别表示兼容Oracle、Mysql和TD。 + +- **TABLESPACE \[ = \] tablespace\_name** + + 指定数据库对应的表空间。 + + 取值范围:已存在表空间名。 + +- **CONNECTION LIMIT \[ = \] connlimit** + + 数据库可以接受的并发连接数。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >- 系统管理员不受此参数的限制。 + >- connlimit数据库主节点单独统计,openGauss整体的连接数 = connlimit \* 当前正常数据库主节点个数。 + + 取值范围:\>=-1的整数。默认值为-1,表示没有限制。 + + +有关字符编码的一些限制: + +- 若区域设置为C(或POSIX),则允许所有的编码类型,但是对于其他的区域设置,字符编码必须和区域设置相同。 +- 编码和区域设置必须匹配模板数据库,除了将template0当作模板。 因为其他数据库可能会包含不匹配指定编码的数据,或者可能包含排序顺序受LC\_COLLATE和LC\_CTYPE影响的索引。复制这些数据会导致在新数据库中的索引失效。template0是不包含任何会受到影响的数据或者索引。 + +## 示例 + +``` +--创建jim和tom用户。 +postgres=# CREATE USER jim PASSWORD 'Bigdata@123'; +postgres=# CREATE USER tom PASSWORD 'Bigdata@123'; + +--创建一个GBK编码的数据库music(本地环境的编码格式必须也为GBK)。 +postgres=# CREATE DATABASE music ENCODING 'GBK' template = template0; + +--创建数据库music2,并指定所有者为jim。 +postgres=# CREATE DATABASE music2 OWNER jim; + +--用模板template0创建数据库music3,并指定所有者为jim。 +postgres=# CREATE DATABASE music3 OWNER jim TEMPLATE template0; + +--设置music数据库的连接数为10。 +postgres=# ALTER DATABASE music CONNECTION LIMIT= 10; + +--将music名称改为music4。 +postgres=# ALTER DATABASE music RENAME TO music4; + +--将数据库music2的所属者改为tom。 +postgres=# ALTER DATABASE music2 OWNER TO tom; + +--设置music3的表空间为PG_DEFAULT。 +postgres=# ALTER DATABASE music3 SET TABLESPACE PG_DEFAULT; + +--关闭在数据库music3上缺省的索引扫描。 +postgres=# ALTER DATABASE music3 SET enable_indexscan TO off; + +--重置enable_indexscan参数。 +postgres=# ALTER DATABASE music3 RESET enable_indexscan; + +--删除数据库。 +postgres=# DROP DATABASE music2; +postgres=# DROP DATABASE music3; +postgres=# DROP DATABASE music4; + +--删除jim和tom用户。 +postgres=# DROP USER jim; +postgres=# DROP USER tom; + +--创建兼容TD格式的数据库。 +postgres=# CREATE DATABASE td_compatible_db DBCOMPATIBILITY 'C'; + +--创建兼容ORA格式的数据库。 +postgres=# CREATE DATABASE ora_compatible_db DBCOMPATIBILITY 'A'; + +--删除兼容TD、ORA格式的数据库。 +postgres=# DROP DATABASE td_compatible_db; +postgres=# DROP DATABASE ora_compatible_db; +``` + +## 相关链接 + +[ALTER DATABASE](ALTER-DATABASE.md),[DROP DATABASE](DROP-DATABASE.md) + +## 优化建议 + +- **create database** + + 事务中不支持创建database。 + + +- **ENCODING** + + 当新建数据库Encoding与模板数据库(SQL\_ASCII)不匹配(为'GBK' /'UTF8'/'LATIN1')时,必须指定template \[=\] template0。 + + diff --git a/content/zh/docs/Developerguide/CREATE DIRECTORY.md b/content/zh/docs/Developerguide/CREATE DIRECTORY.md new file mode 100644 index 000000000..9f8331f85 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE DIRECTORY.md @@ -0,0 +1,57 @@ +# CREATE DIRECTORY + +## 功能描述 + +使用CREATE DIRECTORY语句创建一个目录对象,该目录对象定义了服务器文件系统上目录的别名,用于存放用户使用的数据文件,用户可以通过utl\_file高级包来读写这些文件。 + +该目录对象对于指定用户可以赋予READ和WRITE的操作权限,用于给utl\_file提供权限控制。 + +## 注意事项 + +- 默认只允许初始化用户创建,如果开启enable\_access\_server\_directory(可参考[enable\_access\_server\_directory](操作审计.md#zh-cn_topic_0237124747_section4279164545515)),sysadmin权限的用户也可以创建目录。 +- 创建用户默认拥有此路径的READ和WRITE操作权限。 +- 目录的默认owner为创建directory的用户。 +- 以下路径禁止创建: + - 路径含特殊字符。 + - 路径是相对路径。 + - 路径是符号连接。 + +- 创建目录时会进行以下合法性校验: + - 创建时会检查添加路径是否为操作系统实际存在路径,如不存在会提示用户使用风险。 + - 创建时会校验数据库初始化(omm)用户对于添加路径的权限\(即操作系统目录权限,读/写/执行 - R/W/X\),如果权限不全,会提示用户使用风险。 + +- 在openGauss环境下用户指定的路径需要用户保证各节点上路径的一致性,否则在不同节点上执行会产生找不到路径的问题。 + +## 语法格式 + +``` +CREATE [OR REPLACE] DIRECTORY directory_name +AS 'path_name'; +``` + +## 参数说明 + +- **directory\_name** + + 目录名称。 + + 取值范围:字符串,要符标识符的命名规范。 + +- **path\_name** + + 操作系统的路径。 + + 取值范围: 有效的操作系统路径。 + + +## 示例 + +``` +--创建目录。 +postgres=# CREATE OR REPLACE DIRECTORY dir as '/tmp/'; +``` + +## 相关链接 + +[ALTER DIRECTORY](ALTER-DIRECTORY.md#ZH-CN_TOPIC_0242370522),[DROP DIRECTORY](DROP-DIRECTORY.md#ZH-CN_TOPIC_0242370600) + diff --git a/content/zh/docs/Developerguide/CREATE FUNCTION.md b/content/zh/docs/Developerguide/CREATE FUNCTION.md new file mode 100644 index 000000000..b19d0b207 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE FUNCTION.md @@ -0,0 +1,308 @@ +# CREATE FUNCTION + +## 功能描述 + +创建一个函数。 + +## 注意事项 + +- 如果创建函数时参数或返回值带有精度,不进行精度检测。 +- 创建函数时,函数定义中对表对象的操作建议都显式指定模式,否则可能会导致函数执行异常。 +- 在创建函数时,函数内部通过SET语句设置current\_schema和search\_path无效。执行完函数search\_path和current\_schema与执行函数前的search\_path和current\_schema保持一致。 +- 如果函数参数中带有出参,SELECT调用函数必须缺省出参,CALL调用函数适配A必须指定出参,对于调用重载的带有PACKAGE属性的函数,CALL调用函数可以缺省出参,具体信息参见[CALL](CALL.md)的示例。 +- 兼容Postgresql风格的函数或者带有PACKAGE属性的函数支持重载。在指定REPLACE的时候,如果参数个数、类型、返回值有变化,不会替换原有函数,而是会建立新的函数。 +- SELECT调用可以指定不同参数来进行同名函数调用。由于语法CALL适配自A,因此不支持调用不带有PACKAGE属性的同名函数。 +- 在创建function时,不能在avg函数外面嵌套其他agg函数,或者其他系统函数。 +- 新创建的函数默认会给PUBLIC授予执行权限(详见[GRANT](GRANT.md))。用户可以选择收回PUBLIC默认执行权限,然后根据需要将执行权限授予其他用户,为了避免出现新函数能被所有人访问的时间窗口,应在一个事务中创建函数并且设置函数执行权限。 + +## 语法格式 + +- 兼容PostgreSQL风格的创建自定义函数语法。 + + ``` + CREATE [ OR REPLACE ] FUNCTION function_name + ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ]} [, ...] ] ) + [ RETURNS rettype [ DETERMINISTIC ] | RETURNS TABLE ( { column_name column_type } [, ...] )] + LANGUAGE lang_name + [ + {IMMUTABLE | STABLE | VOLATILE } + | {SHIPPABLE | NOT SHIPPABLE} + | WINDOW + | [ NOT ] LEAKPROOF + | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } + | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER} + | {fenced | not fenced} + | {PACKAGE} + + | COST execution_cost + | ROWS result_rows + | SET configuration_parameter { {TO | =} value | FROM CURRENT }} + ][...] + { + AS 'definition' + | AS 'obj_file', 'link_symbol' + } + + ``` + +- A风格的创建自定义函数的语法。 + + ``` + CREATE [ OR REPLACE ] FUNCTION function_name + ( [ { argname [ argmode ] argtype [ { DEFAULT | := | = } expression ] } [, ...] ] ) + RETURN rettype [ DETERMINISTIC ] + [ + {IMMUTABLE | STABLE | VOLATILE } + | {SHIPPABLE | NOT SHIPPABLE} + | {PACKAGE} + | {FENCED | NOT FENCED} + | [ NOT ] LEAKPROOF + | {CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } + | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | + AUTHID DEFINER | AUTHID CURRENT_USER + } + | COST execution_cost + | ROWS result_rows + | SET configuration_parameter { {TO | =} value | FROM CURRENT + + ][...] + + { + IS | AS + } plsql_body + / + ``` + + +## 参数说明 + +- **function\_name** + + 要创建的函数名称(可以用模式修饰)。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **argname** + + 函数参数的名称。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **argmode** + + 函数参数的模式。 + + 取值范围:IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的函数定义中。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >VARIADIC用于声明数组类型的参数。 + +- **argtype** + + 函数参数的类型。 + +- **expression** + + 参数的默认表达式。 + +- **rettype** + + 函数返回值的数据类型。 + + 如果存在OUT或IN OUT参数,可以省略RETURNS子句。如果存在,该子句必须和输出参数所表示的结果类型一致:如果有多个输出参数,则为RECORD,否则与单个输出参数的类型相同。 + + SETOF修饰词表示该函数将返回一个集合,而不是单独一项。 + +- **column\_name** + + 字段名称。 + +- **column\_type** + + 字段类型。 + +- **definition** + + 一个定义函数的字符串常量,含义取决于语言。它可以是一个内部函数名称、一个指向某个目标文件的路径、一个SQL查询、一个过程语言文本。 + +- **LANGUAGE lang\_name** + + 用以实现函数的语言的名称。可以是SQL,C,internal,或者是用户定义的过程语言名称。为了保证向下兼容,该名称可以用单引号(包围)。若采用单引号,则引号内必须为大写。 + +- **WINDOW** + + 表示该函数是窗口函数,通常只用于C语言编写的函数。替换函数定义时不能改变WINDOW属性。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >自定义窗口函数只支持LANGUAGE是internal,并且引用的内部函数必须是窗口函数。 + +- **IMMUTABLE** + + 表示该函数在给出同样的参数值时总是返回同样的结果。 + +- **STABLE** + + 表示该函数不能修改数据库,对相同参数值,在同一次表扫描里,该函数的返回值不变,但是返回值可能在不同SQL语句之间变化。 + +- **VOLATILE** + + 表示该函数值可以在一次表扫描内改变,因此不会做任何优化。 + +- PACKAGE + + 表示该函数是否支持重载。PostgreSQL风格的函数本身就支持重载,此参数主要是针对A风格的函数。 + + - 不允许package函数和非package函数重载或者替换。 + - package函数不支持VARIADIC类型的参数。 + - 不允许修改函数的package属性。 + +- **LEAKPROOF** + + 指出该函数的参数只包括返回值。LEAKPROOF只能由系统管理员设置。 + +- **CALLED ON NULL INPUT** + + 表明该函数的某些参数是NULL的时候可以按照正常的方式调用。该参数可以省略。 + +- **RETURNS NULL ON NULL INPUT** + + **STRICT** + + STRICT用于指定如果函数的某个参数是NULL,此函数总是返回NULL。如果声明了这个参数,当有NULL值参数时该函数不会被执行;而只是自动返回一个NULL结果。 + + RETURNS NULL ON NULL INPUT和STRICT的功能相同。 + +- **EXTERNAL** + + 目的是和SQL兼容,是可选的,这个特性适合于所有函数,而不仅是外部函数。 + +- **SECURITY INVOKER** + + **AUTHID CURRENT\_USER** + + 表明该函数将带着调用它的用户的权限执行。该参数可以省略。 + + SECURITY INVOKER和AUTHID CURRENT\_USER的功能相同。 + +- **SECURITY DEFINER** + + **AUTHID DEFINER** + + 声明该函数将以创建它的用户的权限执行。 + + AUTHID DEFINER和SECURITY DEFINER的功能相同。 + +- **COST execution\_cost** + + 用来估计函数的执行成本。 + + execution\_cost以cpu\_operator\_cost为单位。 + + 取值范围:正数 + +- **ROWS result\_rows** + + 估计函数返回的行数。用于函数返回的是一个集合。 + + 取值范围:正数,默认值是1000行。 + +- **configuration\_parameter** + - **value** + + 把指定的数据库会话参数值设置为给定的值。如果value是DEFAULT或者RESET,则在新的会话中使用系统的缺省设置。OFF关闭设置。 + + 取值范围:字符串 + + - DEFAULT + - OFF + - RESET + + 指定默认值。 + + - **from current** + + 取当前会话中的值设置为configuration\_parameter的值。 + + +- **obj\_file, link\_symbol** + + 适用于C语言函数,字符串_obj\_file_指定了动态库的绝对路径;_link\_symbol_指定了该函数的链接符号,也就是该函数在C代码中的函数名称。 + +- **plsql\_body** + + PL/SQL存储过程体。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >当在函数体中创建用户时,日志中会记录密码的明文。因此不建议用户在函数体中创建用户。 + + +## 示例 + +``` +--定义函数为SQL查询。 +postgres=# CREATE FUNCTION func_add_sql(integer, integer) RETURNS integer + AS 'select $1 + $2;' + LANGUAGE SQL + IMMUTABLE + RETURNS NULL ON NULL INPUT; + +--利用参数名用 PL/pgSQL 自增一个整数。 +postgres=# CREATE OR REPLACE FUNCTION func_increment_plsql(i integer) RETURNS integer AS $$ + BEGIN + RETURN i + 1; + END; +$$ LANGUAGE plpgsql; + +--返回RECORD类型 +CREATE OR REPLACE FUNCTION compute(i int, out result_1 bigint, out result_2 bigint) +returns SETOF RECORD +as $$ +begin + result_1 = i + 1; + result_2 = i * 10; +return next; +end; +$$language plpgsql; + +--返回一个包含多个输出参数的记录。 +postgres=# CREATE FUNCTION func_dup_sql(in int, out f1 int, out f2 text) + AS $$ SELECT $1, CAST($1 AS text) || ' is text' $$ + LANGUAGE SQL; + +postgres=# SELECT * FROM func_dup_sql(42); + +--计算两个整数的和,并返回结果。若果输入为null,则返回null。 +postgres=# CREATE FUNCTION func_add_sql2(num1 integer, num2 integer) RETURN integer +AS +BEGIN +RETURN num1 + num2; +END; +/ +--修改函数add的执行规则为IMMUTABLE,即参数不变时返回相同结果。 +postgres=# ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) IMMUTABLE; + +--将函数add的名称修改为add_two_number。 +postgres=# ALTER FUNCTION func_add_sql2(INTEGER, INTEGER) RENAME TO add_two_number; + +--将函数add的属者改为omm。 +postgres=# ALTER FUNCTION add_two_number(INTEGER, INTEGER) OWNER TO omm; + +--删除函数。 +postgres=# DROP FUNCTION add_two_number; +postgres=# DROP FUNCTION func_increment_sql; +postgres=# DROP FUNCTION func_dup_sql; +postgres=# DROP FUNCTION func_increment_plsql; +postgres=# DROP FUNCTION func_add_sql; +``` + +## 相关链接 + +[ALTER FUNCTION](ALTER-FUNCTION.md),[DROP FUNCTION](DROP-FUNCTION.md) + +## 优化建议 + +- analyse | analyze + - 不支持在事务或匿名块中执行analyze 。 + - 不支持在函数或存储过程中执行analyze操作。 + + diff --git a/content/zh/docs/Developerguide/CREATE GROUP.md b/content/zh/docs/Developerguide/CREATE GROUP.md new file mode 100644 index 000000000..09be785ed --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE GROUP.md @@ -0,0 +1,61 @@ +# CREATE GROUP + +## 功能描述 + +创建一个新用户组。 + +## 注意事项 + +CREATE GROUP是CREATE ROLE的别名,非SQL标准语法,不推荐使用,建议用户直接使用CREATE ROLE替代。 + +## 语法格式 + +``` +CREATE GROUP group_name [ [ WITH ] option [ ... ] ] + [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' | DISABLE }; +``` + +其中可选项action子句语法为: + +``` +where option can be: +{SYSADMIN | NOSYSADMIN} + | {MONADMIN | NOMONADMIN} + | {OPRADMIN | NOOPRADMIN} + | {POLADMIN | NOPOLADMIN} + | {AUDITADMIN | NOAUDITADMIN} + | {CREATEDB | NOCREATEDB} + | {USEFT | NOUSEFT} + | {CREATEROLE | NOCREATEROLE} + | {INHERIT | NOINHERIT} + | {LOGIN | NOLOGIN} + | {REPLICATION | NOREPLICATION} + | {INDEPENDENT | NOINDEPENDENT} + | {VCADMIN | NOVCADMIN} + | CONNECTION LIMIT connlimit + | VALID BEGIN 'timestamp' + | VALID UNTIL 'timestamp' + | RESOURCE POOL 'respool' + | USER GROUP 'groupuser' + | PERM SPACE 'spacelimit' + | NODE GROUP logic_group_name + | IN ROLE role_name [, ...] + | IN GROUP role_name [, ...] + | ROLE role_name [, ...] + | ADMIN role_name [, ...] + | USER role_name [, ...] + | SYSID uid + | DEFAULT TABLESPACE tablespace_name + | PROFILE DEFAULT + | PROFILE profile_name + | PGUSER +``` + +## 参数说明 + +请参考CREATE ROLE的[参数说明](CREATE-ROLE.md#zh-cn_topic_0237122112_zh-cn_topic_0059778189_s5a43ec5742a742089e2c302063de7fe4)。 + +## 相关链接 + +[ALTER GROUP](ALTER-GROUP.md#ZH-CN_TOPIC_0242370526),[DROP GROUP](DROP-GROUP.md#ZH-CN_TOPIC_0242370603),[CREATE ROLE](CREATE-ROLE.md) + diff --git a/content/zh/docs/Developerguide/CREATE INDEX.md b/content/zh/docs/Developerguide/CREATE INDEX.md new file mode 100644 index 000000000..f199c930e --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE INDEX.md @@ -0,0 +1,305 @@ +# CREATE INDEX + +## 功能描述 + +在指定的表上创建索引。 + +索引可以用来提高数据库查询性能,但是不恰当的使用将导致数据库性能下降。建议仅在匹配如下某条原则时创建索引: + +- 经常执行查询的字段。 +- 在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。例如,select \* from t1 join t2 on t1.a=t2.a and t1.b=t2.b,可以在t1表上的a,b字段上建立组合索引。 +- where子句的过滤条件字段上(尤其是范围条件)。 +- 在经常出现在order by、group by和distinct后的字段。 + +在分区表上创建索引与在普通表上创建索引的语法不太一样,使用时请注意,如分区表上不支持并行创建索引、不支持创建部分索引、不支持NULL FIRST特性。 + +## 注意事项 + +- 索引自身也占用存储空间、消耗计算资源,创建过多的索引将对数据库性能造成负面影响(尤其影响数据导入的性能,建议在数据导入后再建索引)。因此,仅在必要时创建索引。 +- 索引定义里的所有函数和操作符都必须是immutable类型的,即它们的结果必须只能依赖于它们的输入参数,而不受任何外部的影响(如另外一个表的内容或者当前时间)。这个限制可以确保该索引的行为是定义良好的。要在一个索引上或WHERE中使用用户定义函数,请把它标记为immutable类型函数。 +- 在分区表上创建唯一索引时,索引项中必须包含分布列和所有分区键。 +- 列存表支持的PSORT和B-tree索引都不支持创建表达式索引、部分索引和唯一索引。 +- 列存表支持的GIN索引支持创建表达式索引,但表达式不能包含空分词、空列和多列,不支持创建部分索引和唯一索引。 + +## 语法格式 + +- 在表上创建索引。 + + ``` + CREATE [ UNIQUE ] INDEX [ [schemaname.]index_name ] ON table_name [ USING method ] + ({ { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] }[, ...] ) + [ WITH ( {storage_parameter = value} [, ... ] ) ] + [ TABLESPACE tablespace_name ] + [ WHERE predicate ]; + ``` + +- 在分区表上创建索引。 + + ``` + CREATE [ UNIQUE ] INDEX [ [schemaname.]index_name ] ON table_name [ USING method ] + ( {{ column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS LAST ] }[, ...] ) + LOCAL [ ( { PARTITION index_partition_name [ TABLESPACE index_partition_tablespace ] } [, ...] ) ] + [ WITH ( { storage_parameter = value } [, ...] ) ] + [ TABLESPACE tablespace_name ]; + ``` + + +## 参数说明 + +- **UNIQUE** + + 创建唯一性索引,每次添加数据时检测表中是否有重复值。如果插入或更新的值会引起重复的记录时,将导致一个错误。 + + 目前只有行存表B-tree索引支持唯一索引。 + +- **schema\_name** + + 模式的名称。 + + 取值范围:已存在模式名。 + +- **index\_name** + + 要创建的索引名,不能包含模式名,索引的模式与表相同。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **table\_name** + + 需要为其创建索引的表的名称,可以用模式修饰。 + + 取值范围:已存在的表名。 + +- **USING method** + + 指定创建索引的方法。 + + 取值范围: + + - btree:B-tree索引使用一种类似于B+树的结构来存储数据的键值,通过这种结构能够快速的查找索引。btree适合支持比较查询以及查询范围。 + - gin:GIN索引是倒排索引,可以处理包含多个键的值(比如数组)。 + - gist:Gist索引适用于几何和地理等多维数据类型和集合数据类型。 + - Psort:Psort索引。针对列存表进行局部排序索引。 + + 行存表支持的索引类型:btree(行存表缺省值)、gin、gist。列存表支持的索引类型:Psort(列存表缺省值)、btree、gin。 + +- **column\_name** + + 表中需要创建索引的列的名称(字段名)。 + + 如果索引方式支持多字段索引,可以声明多个字段。最多可以声明32个字段。 + +- **expression** + + 创建一个基于该表的一个或多个字段的表达式索引,通常必须写在圆括弧中。如果表达式有函数调用的形式,圆括弧可以省略。 + + 表达式索引可用于获取对基本数据的某种变形的快速访问。比如,一个在upper\(col\)上的函数索引将允许WHERE upper\(col\) = 'JIM'子句使用索引。 + + 在创建表达式索引时,如果表达式中包含IS NULL子句,则这种索引是无效的。此时,建议用户尝试创建一个部分索引。 + +- **COLLATE collation** + + COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。 + +- **opclass** + + 操作符类的名称。对于索引的每一列可以指定一个操作符类,操作符类标识了索引那一列的使用的操作符。例如一个B-tree索引在一个四字节整数上可以使用int4\_ops;这个操作符类包括四字节整数的比较函数。实际上对于列上的数据类型默认的操作符类是足够用的。操作符类主要用于一些有多种排序的数据。例如,用户想按照绝对值或者实数部分排序一个复数。能通过定义两个操作符类然后当建立索引时选择合适的类。 + +- **ASC** + + 指定按升序排序 (默认)。 + +- **DESC** + + 指定按降序排序。 + +- **NULLS FIRST** + + 指定空值在排序中排在非空值之前,当指定DESC排序时,本选项为默认的。 + +- **NULLS LAST** + + 指定空值在排序中排在非空值之后,未指定DESC排序时,本选项为默认的。 + +- **WITH \( \{storage\_parameter = value\} \[, ... \] \)** + + 指定索引方法的存储参数。 + + 取值范围: + + 只有GIN索引支持FASTUPDATE,GIN\_PENDING\_LIST\_LIMIT参数。GIN和Psort之外的索引都支持FILLFACTOR参数。 + + - FILLFACTOR + + 一个索引的填充因子(fillfactor)是一个介于10和100之间的百分数。 + + 取值范围:10\~100 + + - FASTUPDATE + + GIN索引是否使用快速更新。 + + 取值范围:ON,OFF + + 默认值:ON + + - GIN\_PENDING\_LIST\_LIMIT + + 当GIN索引启用fastupdate时,设置该索引pending list容量的最大值。 + + 取值范围:64\~INT\_MAX,单位KB。 + + 默认值:gin\_pending\_list\_limit的默认取决于GUC中gin\_pending\_list\_limit的值(默认为4MB) + + +- **TABLESPACE tablespace\_name** + + 指定索引的表空间,如果没有声明则使用默认的表空间。 + + 取值范围:已存在的表空间名。 + +- **WHERE predicate** + + 创建一个部分索引。部分索引是一个只包含表的一部分记录的索引,通常是该表中比其他部分数据更有用的部分。例如,有一个表,表里包含已记账和未记账的定单,未记账的定单只占表的一小部分而且这部分是最常用的部分,此时就可以通过只在未记账部分创建一个索引来改善性能。另外一个可能的用途是使用带有UNIQUE的WHERE强制一个表的某个子集的唯一性。 + + 取值范围:predicate表达式只能引用表的字段,它可以使用所有字段,而不仅是被索引的字段。目前,子查询和聚集表达式不能出现在WHERE子句里。 + +- **PARTITION index\_partition\_name** + + 索引分区的名称。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **TABLESPACE index\_partition\_tablespace** + + 索引分区的表空间。 + + 取值范围:如果没有声明,将使用分区表索引的表空间index\_tablespace。 + + +## 示例 + +``` +--创建表tpcds.ship_mode_t1。 +postgres=# create schema tpcds; +postgres=# CREATE TABLE tpcds.ship_mode_t1 +( + SM_SHIP_MODE_SK INTEGER NOT NULL, + SM_SHIP_MODE_ID CHAR(16) NOT NULL, + SM_TYPE CHAR(30) , + SM_CODE CHAR(10) , + SM_CARRIER CHAR(20) , + SM_CONTRACT CHAR(20) +) +; + +--在表tpcds.ship_mode_t1上的SM_SHIP_MODE_SK字段上创建普通索引。 +postgres=# CREATE UNIQUE INDEX ds_ship_mode_t1_index1 ON tpcds.ship_mode_t1(SM_SHIP_MODE_SK); + +--在表tpcds.ship_mode_t1上的SM_SHIP_MODE_SK字段上创建指定B-tree索引。 +postgres=# CREATE INDEX ds_ship_mode_t1_index4 ON tpcds.ship_mode_t1 USING btree(SM_SHIP_MODE_SK); + +--在表tpcds.ship_mode_t1上SM_CODE字段上创建表达式索引。 +postgres=# CREATE INDEX ds_ship_mode_t1_index2 ON tpcds.ship_mode_t1(SUBSTR(SM_CODE,1 ,4)); + +--在表tpcds.ship_mode_t1上的SM_SHIP_MODE_SK字段上创建SM_SHIP_MODE_SK大于10的部分索引。 +postgres=# CREATE UNIQUE INDEX ds_ship_mode_t1_index3 ON tpcds.ship_mode_t1(SM_SHIP_MODE_SK) WHERE SM_SHIP_MODE_SK>10; + +--重命名一个现有的索引。 +postgres=# ALTER INDEX tpcds.ds_ship_mode_t1_index1 RENAME TO ds_ship_mode_t1_index5; + +--设置索引不可用。 +postgres=# ALTER INDEX tpcds.ds_ship_mode_t1_index2 UNUSABLE; + +--重建索引。 +postgres=# ALTER INDEX tpcds.ds_ship_mode_t1_index2 REBUILD; + +--删除一个现有的索引。 +postgres=# DROP INDEX tpcds.ds_ship_mode_t1_index2; + +--删除表。 +postgres=# DROP TABLE tpcds.ship_mode_t1; + +--创建表空间。 +postgres=# CREATE TABLESPACE example1 RELATIVE LOCATION 'tablespace1/tablespace_1'; +postgres=# CREATE TABLESPACE example2 RELATIVE LOCATION 'tablespace2/tablespace_2'; +postgres=# CREATE TABLESPACE example3 RELATIVE LOCATION 'tablespace3/tablespace_3'; +postgres=# CREATE TABLESPACE example4 RELATIVE LOCATION 'tablespace4/tablespace_4'; +--创建表tpcds.customer_address_p1。 +postgres=# CREATE TABLE tpcds.customer_address_p1 +( + CA_ADDRESS_SK INTEGER NOT NULL, + CA_ADDRESS_ID CHAR(16) NOT NULL, + CA_STREET_NUMBER CHAR(10) , + CA_STREET_NAME VARCHAR(60) , + CA_STREET_TYPE CHAR(15) , + CA_SUITE_NUMBER CHAR(10) , + CA_CITY VARCHAR(60) , + CA_COUNTY VARCHAR(30) , + CA_STATE CHAR(2) , + CA_ZIP CHAR(10) , + CA_COUNTRY VARCHAR(20) , + CA_GMT_OFFSET DECIMAL(5,2) , + CA_LOCATION_TYPE CHAR(20) +) +TABLESPACE example1 +PARTITION BY RANGE(CA_ADDRESS_SK) +( + PARTITION p1 VALUES LESS THAN (3000), + PARTITION p2 VALUES LESS THAN (5000) TABLESPACE example1, + PARTITION p3 VALUES LESS THAN (MAXVALUE) TABLESPACE example2 +) +ENABLE ROW MOVEMENT; +--创建分区表索引ds_customer_address_p1_index1,不指定索引分区的名称。 +postgres=# CREATE INDEX ds_customer_address_p1_index1 ON tpcds.customer_address_p1(CA_ADDRESS_SK) LOCAL; +--创建分区表索引ds_customer_address_p1_index2,并指定索引分区的名称。 +postgres=# CREATE INDEX ds_customer_address_p1_index2 ON tpcds.customer_address_p1(CA_ADDRESS_SK) LOCAL +( + PARTITION CA_ADDRESS_SK_index1, + PARTITION CA_ADDRESS_SK_index2 TABLESPACE example3, + PARTITION CA_ADDRESS_SK_index3 TABLESPACE example4 +) +TABLESPACE example2; + +--修改分区表索引CA_ADDRESS_SK_index2的表空间为example1。 +postgres=# ALTER INDEX tpcds.ds_customer_address_p1_index2 MOVE PARTITION CA_ADDRESS_SK_index2 TABLESPACE example1; + +--修改分区表索引CA_ADDRESS_SK_index3的表空间为example2。 +postgres=# ALTER INDEX tpcds.ds_customer_address_p1_index2 MOVE PARTITION CA_ADDRESS_SK_index3 TABLESPACE example2; + +--重命名分区表索引。 +postgres=# ALTER INDEX tpcds.ds_customer_address_p1_index2 RENAME PARTITION CA_ADDRESS_SK_index1 TO CA_ADDRESS_SK_index4; + +--删除索引和分区表。 +postgres=# DROP INDEX tpcds.ds_customer_address_p1_index1; +postgres=# DROP INDEX tpcds.ds_customer_address_p1_index2; +postgres=# DROP TABLE tpcds.customer_address_p1; +--删除表空间。 +postgres=# DROP TABLESPACE example1; +postgres=# DROP TABLESPACE example2; +postgres=# DROP TABLESPACE example3; +postgres=# DROP TABLESPACE example4; +``` + +## 相关链接 + +[ALTER INDEX](ALTER-INDEX.md),[DROP INDEX](DROP-INDEX.md) + +## 优化建议 + +- create index + + 建议仅在匹配如下条件之一时创建索引: + + - 经常执行查询的字段。 + - 在连接条件上创建索引,对于存在多字段连接的查询,建议在这些字段上建立组合索引。例如,select \* from t1 join t2 on t1.a=t2.a and t1.b=t2.b,可以在t1表上的a,b字段上建立组合索引。 + - where子句的过滤条件字段上(尤其是范围条件)。 + - 在经常出现在order by、group by和distinct后的字段。 + + 约束限制: + + - 分区表上不支持创建部分索引、不支持NULL FIRST特性。 + + - 在分区表上创建唯一索引时,索引项中必须包含分布列和所有分区键。 + + diff --git a/content/zh/docs/Developerguide/CREATE PROCEDURE.md b/content/zh/docs/Developerguide/CREATE PROCEDURE.md new file mode 100644 index 000000000..cbef8fef8 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE PROCEDURE.md @@ -0,0 +1,95 @@ +# CREATE PROCEDURE + +## 功能描述 + +创建一个新的存储过程。 + +## 注意事项 + +- 如果创建存储过程时参数或返回值带有精度,不进行精度检测。 +- 创建存储过程时,存储过程定义中对表对象的操作建议都显示指定模式,否则可能会导致存储过程执行异常。 +- 在创建存储过程时,存储过程内部通过SET语句设置current\_schema和search\_path无效。执行完函数search\_path和current\_schema与执行函数前的search\_path和current\_schema保持一致。 +- 如果存储过程参数中带有出参,SELECT调用存储过程必须缺省出参,CALL调用存储过程适配A,调用非重载函数时必须指定出参,对于重载的package函数,out参数可以缺省,具体信息参见[CALL](CALL.md)的示例。 +- 存储过程指定package属性时支持重载。 +- 在创建procedure时,不能在avg函数外面嵌套其他agg函数,或者其他系统函数。 + +## 语法格式 + +``` +postgres=# CREATE [ OR REPLACE ] PROCEDURE procedure_name + [ ( {[ argmode ] [ argname ] argtype [ { DEFAULT | := | = } expression ]}[,...]) ] + [ + { IMMUTABLE | STABLE | VOLATILE } + | { SHIPPABLE | NOT SHIPPABLE } + | {PACKAGE} + | [ NOT ] LEAKPROOF + | { CALLED ON NULL INPUT | RETURNS NULL ON NULL INPUT | STRICT } + | {[ EXTERNAL ] SECURITY INVOKER | [ EXTERNAL ] SECURITY DEFINER | AUTHID DEFINER | AUTHID CURRENT_USER} + | COST execution_cost + | ROWS result_rows + | SET configuration_parameter { [ TO | = ] value | FROM CURRENT } + ][ ... ] + { IS | AS } +plsql_body +/ +``` + +## 参数说明 + +- **OR REPLACE** + + 当存在同名的存储过程时,替换原来的定义。 + +- **procedure\_name** + + 创建的存储过程名称,可以带有模式名。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **argmode** + + 参数的模式。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >VARIADIC用于声明数组类型的参数。 + + 取值范围: IN,OUT,INOUT或VARIADIC。缺省值是IN。只有OUT模式的参数后面能跟VARIADIC。并且OUT和INOUT模式的参数不能用在RETURNS TABLE的过程定义中。 + +- **argname** + + 参数的名称。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **argtype** + + 参数的数据类型。 + + 取值范围:可用的数据类型。 + +- **IMMUTABLE、STABLE**等 + + 行为约束可选项。各参数的功能与CREATE FUNCTION类似,详细说明见[CREATE FUNCTION](CREATE-FUNCTION.md) + +- **plsql\_body** + + PL/SQL存储过程体。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >当在存储过程体中进行创建用户等涉及用户密码相关操作时,系统表及csv日志中会记录密码的明文。因此不建议用户在存储过程体中进行涉及用户密码的相关操作。 + + +>![](public_sys-resources/icon-note.gif) **说明:** +>argument\_name和argmode的顺序没有严格要求,推荐按照argument\_name、argmode、argument\_type的顺序使用。 + +## 相关链接 + +[DROP PROCEDURE](DROP-PROCEDURE.md) + +## 优化建议 + +- analyse | analyze + - 不支持在事务或匿名块中执行analyze 。 + - 不支持在函数或存储过程中执行analyze操作。 + + diff --git a/content/zh/docs/Developerguide/CREATE ROLE.md b/content/zh/docs/Developerguide/CREATE ROLE.md new file mode 100644 index 000000000..c4eff61ba --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE ROLE.md @@ -0,0 +1,239 @@ +# CREATE ROLE + +## 功能描述 + +创建角色。 + +角色是拥有数据库对象和权限的实体。在不同的环境中角色可以认为是一个用户,一个组或者兼顾两者。 + +## 注意事项 + +- 在数据库中添加一个新角色,角色无登录权限。 +- 创建角色的用户必须具备CREATE ROLE的权限或者是系统管理员。 + +## 语法格式 + +``` +CREATE ROLE role_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' | DISABLE }; +``` + +其中角色信息设置子句option语法为: + +``` +{SYSADMIN | NOSYSADMIN} + | {AUDITADMIN | NOAUDITADMIN} + | {CREATEDB | NOCREATEDB} + | {USEFT | NOUSEFT} + | {CREATEROLE | NOCREATEROLE} + | {INHERIT | NOINHERIT} + | {LOGIN | NOLOGIN} + | {REPLICATION | NOREPLICATION} + | {INDEPENDENT | NOINDEPENDENT} + | {VCADMIN | NOVCADMIN} + | CONNECTION LIMIT connlimit + | VALID BEGIN 'timestamp' + | VALID UNTIL 'timestamp' + | RESOURCE POOL 'respool' + | USER GROUP 'groupuser' + | PERM SPACE 'spacelimit' + | TEMP SPACE 'tmpspacelimit' + | SPILL SPACE 'spillspacelimit' + | NODE GROUP logic_cluster_name + | IN ROLE role_name [, ...] + | IN GROUP role_name [, ...] + | ROLE role_name [, ...] + | ADMIN rol e_name [, ...] + | USER role_name [, ...] + | SYSID uid + | DEFAULT TABLESPACE tablespace_name + | PROFILE DEFAULT + | PROFILE profile_name + | PGUSER +``` + +## 参数说明 + +- **role\_name** + + 角色名称。 + + 取值范围:字符串,要符合标识符的命名规范,且最多为63个字符。若超过63个字符,数据库会截断并保留前63个字符当做角色名称。在创建角色时,数据库的时候会给出提示信息。 + +- **password** + + 登录密码。 + + 密码规则如下: + + - 密码默认不少于8个字符。 + - 不能与用户名及用户名倒序相同。 + - 至少包含大写字母(A-Z),小写字母(a-z),数字(0-9),非字母数字字符(限定为\~!@\#$%^&\*\(\)-\_=+\\|\[\{\}\];:,<.\>/?)四类字符中的三类字符。 + + 取值范围:字符串。 + +- DISABLE + + 默认情况下,用户可以更改自己的密码,除非密码被禁用。要禁用用户的密码,请指定DISABLE。禁用某个用户的密码后,将从系统中删除该密码,此类用户只能通过外部认证来连接数据库,例如:kerberos认证。只有管理员才能启用或禁用密码。普通用户不能禁用初始用户的密码。要启用密码,请运行ALTER USER并指定密码。 + +- **ENCRYPTED | UNENCRYPTED** + + 控制密码存储在系统表里的口令是否加密。(如果没有指定,那么缺省的行为由配置参数password\_encryption控制。)按照产品安全要求,密码必须加密存储,所以,UNENCRYPTED在openGauss中禁止使用。因为系统无法对指定的加密口令字符串进行解密,所以如果目前的口令字符串已经是用SHA256加密的格式,则会继续照此存放,而不管是否声明了ENCRYPTED或UNENCRYPTED。这样就允许在dump/restore的时候重新加载加密的口令。 + +- **SYSADMIN | NOSYSADMIN** + + 决定一个新角色是否为“系统管理员”,具有SYSADMIN属性的角色拥有系统最高权限。 + + 缺省为NOSYSADMIN。 + +- **AUDITADMIN | NOAUDITADMIN** + + 定义角色是否有审计管理属性。 + + 缺省为NOAUDITADMIN。 + +- **CREATEDB | NOCREATEDB** + + 决定一个新角色是否能创建数据库。 + + 新角色没有创建数据库的权限。 + + 缺省为NOCREATEDB。 + +- **USEFT | NOUSEFT** + + 该参数为保留参数,暂未启用。 + +- **CREATEROLE | NOCREATEROLE** + + 决定一个角色是否可以创建新角色(也就是执行CREATE ROLE和CREATE USER)。 一个拥有CREATEROLE权限的角色也可以修改和删除其他角色。 + + 缺省为NOCREATEROLE。 + +- **INHERIT | NOINHERIT** + + 这些子句决定一个角色是否“继承”它所在组的角色的权限。不推荐使用。 + +- **LOGIN | NOLOGIN** + + 具有LOGIN属性的角色才可以登录数据库。一个拥有LOGIN属性的角色可以认为是一个用户。 + + 缺省为NOLOGIN。 + +- **REPLICATION | NOREPLICATION** + + 定义角色是否允许流复制或设置系统为备份模式。REPLICATION属性是特定的角色,仅用于复制。 + + 缺省为NOREPLICATION。 + +- **INDEPENDENT | NOINDEPENDENT** + + 定义私有、独立的角色。具有INDEPENDENT属性的角色,管理员对其进行的控制、访问的权限被分离,具体规则如下: + + - 未经INDEPENDENT角色授权,系统管理员无权对其表对象进行增、删、查、改、拷贝、授权操作。 + - 未经INDEPENDENT角色授权,系统管理员和拥有CREATEROLE属性的安全管理员无权修改INDEPENDENT角色的继承关系。 + - 系统管理员无权修改INDEPENDENT角色的表对象的属主。 + - 系统管理员和拥有CREATEROLE属性的安全管理员无权去除INDEPENDENT角色的INDEPENDENT属性。 + - 系统管理员和拥有CREATEROLE属性的安全管理员无权修改INDEPENDENT角色的数据库口令,INDEPENDENT角色需管理好自身口令,口令丢失无法重置。 + - 管理员属性用户不允许定义修改为INDEPENDENT属性。 + +- **CONNECTION LIMIT** + + 声明该角色可以使用的并发连接数量。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >- 系统管理员不受此参数的限制。 + >- connlimit数据库主节点单独统计,openGauss整体的连接数 = connlimit \* 当前正常数据库主节点个数。 + + 取值范围:整数,\>=-1,缺省值为-1,表示没有限制。 + +- **VALID BEGIN** + + 设置角色生效的时间戳。如果省略了该子句,角色无有效开始时间限制。 + +- **VALID UNTIL** + + 设置角色失效的时间戳。如果省略了该子句,角色无有效结束时间限制。 + +- **RESOURCE POOL** + + 设置角色使用的resource pool名称,该名称属于系统表:pg\_resource\_pool + +- **USER GROUP 'groupuser'** + + 创建一个user的子用户。 + +- **PERM SPACE** + + 设置用户使用空间的大小。 + +- **TEMP SPACE** + + 设置用户临时表存储空间限额。 + +- **SPILL SPACE** + + 设置用户算子落盘空间限额。 + +- **IN ROLE** + + 新角色立即拥有IN ROLE子句中列出的一个或多个现有角色拥有的权限。不推荐使用。 + +- **IN GROUP** + + IN GROUP是IN ROLE过时的拼法。不推荐使用。 + +- **ROLE** + + ROLE子句列出一个或多个现有的角色,它们将自动添加为这个新角色的成员,拥有新角色所有的权限。 + +- **ADMIN** + + ADMIN子句类似ROLE子句,不同的是ADMIN后的角色可以把新角色的权限赋给其他角色。 + +- **USER** + + USER子句是ROLE子句过时的拼法。 + +- **SYSID** + + SYSID子句将被忽略,无实际意义。 + +- **DEFAULT TABLESPACE** + + DEFAULT TABLESPACE子句将被忽略,无实际意义。 + +- **PROFILE** + + PROFILE子句将被忽略,无实际意义。 + +- **PGUSER** + + 当前版本该属性没有实际意义,仅为了语法的前向兼容而保留。 + + +## 示例 + +``` +--创建一个角色,名为manager,密码为Bigdata@123。 +postgres=# CREATE ROLE manager IDENTIFIED BY 'Bigdata@123'; + +--创建一个角色,从2015年1月1日开始生效,到2026年1月1日失效。 +postgres=# CREATE ROLE miriam WITH LOGIN PASSWORD 'Bigdata@123' VALID BEGIN '2015-01-01' VALID UNTIL '2026-01-01'; + +--修改角色manager的密码为abcd@123。 +postgres=# ALTER ROLE manager IDENTIFIED BY 'abcd@123' REPLACE 'Bigdata@123'; + +--修改角色manager为系统管理员。 +postgres=# ALTER ROLE manager SYSADMIN; + +--删除角色manager。 +postgres=# DROP ROLE manager; + +--删除角色miriam。 +postgres=# DROP ROLE miriam; +``` + +## 相关链接 + +[SET ROLE](SET-ROLE.md),[ALTER ROLE](ALTER-ROLE.md),[DROP ROLE](DROP-ROLE.md),[GRANT](GRANT.md),[REVOKE](REVOKE.md) + diff --git a/content/zh/docs/Developerguide/CREATE ROW LEVLEL SECURITY POLICY.md b/content/zh/docs/Developerguide/CREATE ROW LEVLEL SECURITY POLICY.md new file mode 100644 index 000000000..acc5d59f8 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE ROW LEVLEL SECURITY POLICY.md @@ -0,0 +1,224 @@ +# CREATE ROW LEVLEL SECURITY POLICY + +## 功能描述 + +对表创建行访问控制策略。 + +当对表创建了行访问控制策略,只有打开该表的行访问控制开关\(ALTER TABLE ... ENABLE ROW LEVEL SECURITY\),策略才能生效。否则不生效。 + +当前行访问控制影响数据表的读取操作\(SELECT、UPDATE、DELETE\),暂不影响数据表的写入操作\(INSERT、MERGE INTO\)。表所有者或系统管理员可以在USING子句中创建表达式,在客户端执行数据表读取操作时,数据库后台在查询重写阶段会将满足条件的表达式拼接并应用到执行计划中。针对数据表的每一条元组,当USING表达式返回TRUE时,元组对当前用户可见,当USING表达式返回FALSE或NULL时,元组对当前用户不可见。 + +行访问控制策略名称是针对表的,同一个数据表上不能有同名的行访问控制策略;对不同的数据表,可以有同名的行访问控制策略。 + +行访问控制策略可以应用到指定的操作\(SELECT、UPDATE、DELETE、ALL\),ALL表示会影响SELECT、UPDATE、DELETE三种操作;定义行访问控制策略时,若未指定受影响的相关操作,默认为ALL。 + +行访问控制策略可以应用到指定的用户\(角色\),也可应用到全部用户\(PUBLIC\);定义行访问控制策略时,若未指定受影响的用户,默认为PUBLIC。 + +## 注意事项 + +- 支持对行存表、行存分区表、列存表、列存分区表、复制表、unlogged表、hash表定义行访问控制策略。 +- 不支持外表、临时表定义行访问控制策略。 +- 不支持对视图定义行访问控制策略。 +- 同一张表上可以创建多个行访问控制策略,一张表最多创建100个行访问控制策略。 +- 系统管理员不受行访问控制影响,可以查看表的全量数据。 +- 通过SQL语句、视图、函数、存储过程查询包含行访问控制策略的表,都会受影响。 + +## 语法格式 + +``` +CREATE [ ROW LEVEL SECURITY ] POLICY policy_name ON table_name + [ AS { PERMISSIVE | RESTRICTIVE } ] + [ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ] + [ TO { role_name | PUBLIC | CURRENT_USER | SESSION_USER } [, ...] ] + USING ( using_expression ) +``` + +## 参数说明 + +- **policy\_name** + + 行访问控制策略名称,同一个数据表上行访问控制策略名称不能相同。 + +- **table\_name** + + 行访问控制策略的表名。 + +- **command** + + 当前行访问控制影响的SQL操作,可指定操作包括:ALL、SELECT、UPDATE、DELETE。当未指定时,ALL为默认值,涵盖SELECT、UPDATE、DELETE操作。 + + 当command为SELECT时,SELECT类操作受行访问控制的影响,只能查看到满足条件\(using\_expression返回值为TRUE\)的元组数据,受影响的操作包括SELECT,UPDATE ... RETURNING,DELETE ... RETURNING。 + + 当command为UPDATE时,UPDATE类操作受行访问控制的影响,只能更新满足条件\(using\_expression返回值为TRUE\)的元组数据,受影响的操作包括UPDATE, UPDATE ... RETURNING, SELECT ... FOR UPDATE/SHARE。 + + 当command为DELETE时,DELETE类操作受行访问控制的影响,只能删除满足条件\(using\_expression返回值为TRUE\)的元组数据,受影响的操作包括DELETE, DELETE ... RETURNING。 + + 行访问控制策略与适配的SQL语法关系参加下表: + + **表 1** ROW LEVLEL SECURITY策略与适配SQL语法关系 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Command

+

SELECT/ALL policy

+

UPDATE/ALL policy

+

DELETE/ALL policy

+

SELECT

+

Existing row

+

No

+

No

+

SELECT FOR UPDATE/SHARE

+

Existing row

+

Existing row

+

No

+

UPDATE

+

No

+

Existing row

+

No

+

UPDATE RETURNING

+

Existing row

+

Existing row

+

No

+

DELETE

+

No

+

No

+

Existing row

+

DELETE RETURNING

+

Existing row

+

No

+

Existing row

+
+ +- **role\_name** + + 行访问控制影响的数据库用户。 + + 当未指定时,PUBLIC为默认值,PUBLIC表示影响所有数据库用户,可以指定多个受影响的数据库用户。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >系统管理员不受行访问控制特性影响。 + + +- **using\_expression** + + 行访问控制的表达式(返回boolean值)。 + + 条件表达式中不能包含AGG函数和窗口(WINDOW)函数。在查询重写阶段,如果数据表的行访问控制开关打开,满足条件的表达式会添加到计划树中。针对数据表的每条元组,会进行表达式计算,只有表达式返回值为TRUE时,行数据对用户才可见(SELECT、UPDATE、DELETE);当表达式返回FALSE时,该元组对当前用户不可见,用户无法通过SELECT语句查看此元组,无法通过UPDATE语句更新此元组,无法通过DELETE语句删除此元组。 + + +## 示例 + +``` +--创建用户alice +postgres=# CREATE ROLE alice PASSWORD 'Gauss@123'; + +--创建用户bob +postgres=# CREATE ROLE bob PASSWORD 'Gauss@123'; + +--创建数据表all_data +postgres=# CREATE TABLE all_data(id int, role varchar(100), data varchar(100)); + +--向数据表插入数据 +postgres=# INSERT INTO all_data VALUES(1, 'alice', 'alice data'); +postgres=# INSERT INTO all_data VALUES(2, 'bob', 'bob data'); +postgres=# INSERT INTO all_data VALUES(3, 'peter', 'peter data'); + +--将表all_data的读取权限赋予alice和bob用户 +postgres=# GRANT SELECT ON all_data TO alice, bob; + +--打开行访问控制策略开关 +postgres=# ALTER TABLE all_data ENABLE ROW LEVEL SECURITY; + +--创建行访问控制策略,当前用户只能查看用户自身的数据 +postgres=# CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER); + +--查看表all_data相关信息 +postgres=# \d+ all_data + Table "public.all_data" + Column | Type | Modifiers | Storage | Stats target | Description +--------+------------------------+-----------+----------+--------------+------------- + id | integer | | plain | | + role | character varying(100) | | extended | | + data | character varying(100) | | extended | | +Row Level Security Policies: + POLICY "all_data_rls" + USING (((role)::name = "current_user"())) +Has OIDs: no +Location Nodes: ALL DATANODES +Options: orientation=row, compression=no, enable_rowsecurity=true + +--当前用户执行SELECT操作 +postgres=# SELECT * FROM all_data; + id | role | data +----+-------+------------ + 1 | alice | alice data + 2 | bob | bob data + 3 | peter | peter data +(3 rows) + +postgres=# EXPLAIN(COSTS OFF) SELECT * FROM all_data; + QUERY PLAN +---------------------------- + Streaming (type: GATHER) + Node/s: All dbnodes + -> Seq Scan on all_data +(3 rows) + +--切换至alice用户执行SELECT操作 +postgres=# SELECT * FROM all_data; + id | role | data +----+-------+------------ + 1 | alice | alice data +(1 row) + +postgres=# EXPLAIN(COSTS OFF) SELECT * FROM all_data; + QUERY PLAN +---------------------------------------------------------------- + Streaming (type: GATHER) + Node/s: All dbnodes + -> Seq Scan on all_data + Filter: ((role)::name = 'alice'::name) + Notice: This query is influenced by row level security feature +(5 rows) +``` + +## 相关链接 + +[DROP ROW LEVEL SECURITY POLICY](DROP-ROW-LEVEL-SECURITY-POLICY.md) + diff --git a/content/zh/docs/Developerguide/CREATE SCHEMA.md b/content/zh/docs/Developerguide/CREATE SCHEMA.md new file mode 100644 index 000000000..0256c5343 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE SCHEMA.md @@ -0,0 +1,81 @@ +# CREATE SCHEMA + +## 功能描述 + +创建模式。 + +访问命名对象时可以使用模式名作为前缀进行访问,如果无模式名前缀,则访问当前模式下的命名对象。创建命名对象时也可用模式名作为前缀修饰。 + +另外,CREATE SCHEMA可以包括在新模式中创建对象的子命令,这些子命令和那些在创建完模式后发出的命令没有任何区别。如果使用了AUTHORIZATION子句,则所有创建的对象都将被该用户所拥有。 + +## 注意事项 + +- 只要用户对当前数据库有CREATE权限,就可以创建模式。 +- 系统管理员在普通用户同名schema下创建的对象,所有者为schema的同名用户(非系统管理员)。 + +## 语法格式 + +- 根据指定的名称创建模式。 + + ``` + CREATE SCHEMA schema_name + [ AUTHORIZATION user_name ] [ schema_element [ ... ] ]; + ``` + +- 根据用户名创建模式。 + + ``` + CREATE SCHEMA AUTHORIZATION user_name [ schema_element [ ... ] ]; + ``` + + +## 参数说明 + +- **schema\_name** + + 模式名称。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >模式名不能和当前数据库里其他的模式重名。 + >模式的名称不可以“pg\_”开头。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **AUTHORIZATION user\_name** + + 指定模式的所有者。当不指定schema\_name时,把user\_name当作模式名,此时user\_name只能是角色名。 + + 取值范围:已存在的用户名/角色名。 + +- **schema\_element** + + 在模式里创建对象的SQL语句。目前仅支持CREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE PARTITION、GRANT子句。 + + 子命令所创建的对象都被AUTHORIZATION子句指定的用户所拥有。 + + +>![](public_sys-resources/icon-note.gif) **说明:** +>如果当前搜索路径上的模式中存在同名对象时,需要明确指定引用对象所在的模式。可以通过命令SHOW SEARCH\_PATH来查看当前搜索路径上的模式。 + +## 示例 + +``` +--创建一个角色role1。 +postgres=# CREATE ROLE role1 IDENTIFIED BY 'Bigdata@123'; + +-- 为用户role1创建一个同名schema,子命令创建的表films和winners的拥有者为role1。 +postgres=# 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; + +--删除schema。 +postgres=# DROP SCHEMA role1 CASCADE; +--删除用户。 +postgres=# DROP USER role1 CASCADE; +``` + +## 相关链接 + +[ALTER SCHEMA](ALTER-SCHEMA.md#ZH-CN_TOPIC_0242370534),[DROP SCHEMA](DROP-SCHEMA.md#ZH-CN_TOPIC_0242370612) + diff --git a/content/zh/docs/Developerguide/CREATE SEQUENCE.md b/content/zh/docs/Developerguide/CREATE SEQUENCE.md new file mode 100644 index 000000000..9b23c8b73 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE SEQUENCE.md @@ -0,0 +1,140 @@ +# CREATE SEQUENCE + +## 功能描述 + +CREATE SEQUENCE用于向当前数据库里增加一个新的序列。序列的Owner为创建此序列的用户。 + +## 注意事项 + +- Sequence是一个存放等差数列的特殊表,该表受DBMS控制。这个表没有实际意义,通常用于为行或者表生成唯一的标识符。 +- 如果给出一个模式名,则该序列就在给定的模式中创建,否则会在当前模式中创建。序列名必须和同一个模式中的其他序列、表、索引、视图或外表的名称不同。 +- 创建序列后,在表中使用序列的nextval\(\)函数和generate\_series\(1,N\)函数对表插入数据,请保证nextval的可调用次数大于等于N+1次,否则会因为generate\_series\(\)函数会调用N+1次而导致报错。 + +## 语法格式 + +``` +CREATE SEQUENCE name [ INCREMENT [ BY ] increment ] + [ MINVALUE minvalue | NO MINVALUE | NOMINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE | NOMAXVALUE] + [ START [ WITH ] start ] [ CACHE cache ] [ [ NO ] CYCLE | NOCYCLE ] + [ OWNED BY { table_name.column_name | NONE } ]; +``` + +## 参数说明 + +- **name** + + 将要创建的序列名称。 + + 取值范围: 仅可以使用小写字母(a\~z)、 大写字母(A\~Z),数字和特殊字符"\#","\_","$"的组合。 + +- **increment** + + 指定序列的步长。一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。 + + 缺省值为1。 + +- **MINVALUE minvalue | NO MINVALUE| NOMINVALUE** + + 执行序列的最小值。如果没有声明minvalue或者声明了NO MINVALUE,则递增序列的缺省值为1,递减序列的缺省值为-263-1。NOMINVALUE等价于NO MINVALUE + +- **MAXVALUE maxvalue | NO MAXVALUE| NOMAXVALUE** + + 执行序列的最大值。如果没有声明maxvalue或者声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE + +- **start** + + 指定序列的起始值。缺省值:对于递增序列为minvalue,递减序列为maxvalue。 + +- **cache** + + 为了快速访问,而在内存中预先存储序列号的个数。 + + 缺省值为1,表示一次只能生成一个值,也就是没有缓存。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >不建议同时定义cache和maxvalue或minvalue。因为定义cache后不能保证序列的连续性,可能会产生空洞,造成序列号段浪费。 + +- **CYCLE** + + 用于使序列达到maxvalue或者minvalue后可循环并继续下去。 + + 如果声明了NO CYCLE,则在序列达到其最大值后任何对nextval的调用都会返回一个错误。 + + NOCYCLE的作用等价于NO CYCLE。 + + 缺省值为NO CYCLE。 + + 若定义序列为CYCLE,则不能保证序列的唯一性。 + +- **OWNED BY**- + + 将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。需要注意的是,通过指定OWNED BY,仅仅是建立了表的对应列和sequence之间关联关系,并不会在插入数据时在该列上产生自增序列。 + + 缺省值为OWNED BY NONE,表示不存在这样的关联。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >通过OWNED BY创建的Sequence不建议用于其他表,如果希望多个表共享Sequence,该Sequence不应该从属于特定表。 + + +## 示例 + +创建一个名为serial的递增序列,从101开始: + +``` +postgres=# CREATE SEQUENCE serial + START 101 + CACHE 20; +``` + +从序列中选出下一个数字: + +``` +postgres=# SELECT nextval('serial'); + nextval + --------- + 101 +``` + +从序列中选出下一个数字: + +``` +postgres=# SELECT nextval('serial'); + nextval + --------- + 102 +``` + +创建与表关联的序列: + +``` +postgres=# CREATE TABLE customer_address +( + ca_address_sk integer not null, + ca_address_id char(16) not null, + ca_street_number char(10) , + ca_street_name varchar(60) , + ca_street_type char(15) , + ca_suite_number char(10) , + ca_city varchar(60) , + ca_county varchar(30) , + ca_state char(2) , + ca_zip char(10) , + ca_country varchar(20) , + ca_gmt_offset decimal(5,2) , + ca_location_type char(20) +); + +postgres=# CREATE SEQUENCE serial1 + START 101 + CACHE 20 +OWNED BY customer_address.ca_address_sk; +--删除序列 +postgres=# DROP TABLE customer_address; +postgres=# DROP SEQUENCE serial cascade; +postgres=# DROP SEQUENCE serial1 cascade; +``` + +## 相关链接 + +[DROP SEQUENCE](DROP-SEQUENCE.md#ZH-CN_TOPIC_0242370613),[ALTER SEQUENCE](ALTER-SEQUENCE.md#ZH-CN_TOPIC_0242370535) + diff --git a/content/zh/docs/Developerguide/CREATE TABLE AS.md b/content/zh/docs/Developerguide/CREATE TABLE AS.md new file mode 100644 index 000000000..a3178a1bf --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE TABLE AS.md @@ -0,0 +1,134 @@ +# CREATE TABLE AS + +## 功能描述 + +根据查询结果创建表。 + +CREATE TABLE AS创建一个表并且用来自SELECT命令的结果填充该表。该表的字段和SELECT输出字段的名称及数据类型相关。不过用户可以通过明确地给出一个字段名称列表来覆盖SELECT输出字段的名称。 + +CREATE TABLE AS对源表进行一次查询,然后将数据写入新表中,而查询视图结果会根据源表的变化而有所改变。相比之下,每次做查询的时候,视图都重新计算定义它的SELECT语句。 + +## 注意事项 + +- 分区表不能采用此方式进行创建。 +- 如果在建表过程中数据库系统发生故障,系统恢复后可能无法自动清除之前已创建的、大小非0的磁盘文件。此种情况出现概率小,不影响数据库系统的正常运行。 + +## 语法格式 + +``` +CREATE [ UNLOGGED ] TABLE table_name + [ (column_name [, ...] ) ] + [ WITH ( {storage_parameter = value} [, ... ] ) ] + [ COMPRESS | NOCOMPRESS ] + [ TABLESPACE tablespace_name ] + [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ] + AS query + [ WITH [ NO ] DATA ]; +``` + +## 参数说明 + +- **UNLOGGED** + + 指定表为非日志表。在非日志表中写入的数据不会被写入到预写日志中,这样就会比普通表快很多。但是,它也是不安全的,非日志表在冲突或异常关机后会被自动删截。非日志表中的内容也不会被复制到备用服务器中。在该类表中创建的索引也不会被自动记录。 + + - 使用场景:非日志表不能保证数据的安全性,用户应该在确保数据已经做好备份的前提下使用,例如系统升级时进行数据的备份。 + - 故障处理:当异常关机等操作导致非日志表上的索引发生数据丢失时,用户应该对发生错误的索引进行重建。 + +- **table\_name** + + 要创建的表名。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **column\_name** + + 新表中要创建的字段名。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **WITH \( storage\_parameter \[= value\] \[, ... \] \)** + + 这个子句为表或索引指定一个可选的存储参数。参数的详细说明如下所示。 + + - FILLFACTOR + + 一个表的填充因子(fillfactor)是一个介于10和100之间的百分数。100(完全填充)是默认值。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是最佳选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。该参数只对行存表有效。 + + 取值范围:10\~100 + + - ORIENTATION + + 取值范围: + + COLUMN:表的数据将以列式存储。 + + ROW(缺省值):表的数据将以行式存储。 + + - COMPRESSION + + 指定表数据的压缩级别,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。 + + 取值范围: + + 列存表的有效值为YES/NO/LOW/MIDDLE/HIGH,默认值为LOW。 + + 行存表的有效值为YES/NO,默认值为NO。 + + - MAX\_BATCHROW + + 指定了在数据加载过程中一个存储单元可以容纳记录的最大数目。该参数只对列存表有效。 + + 取值范围:10000\~60000 + + +- **COMPRESS / NOCOMPRESS** + + 创建一个新表时,需要在创建表语句中指定关键字COMPRESS,这样,当对该表进行批量插入时就会触发压缩特性。该特性会在页范围内扫描所有元组数据,生成字典、压缩元组数据并进行存储。指定关键字NOCOMPRESS则不对表进行压缩。 + + 缺省值:NOCOMPRESS,即不对元组数据进行压缩。 + +- **TABLESPACE tablespace\_name** + + 指定新表将要在tablespace\_name表空间内创建。如果没有声明,将使用默认表空间。 + +- **TO \{ GROUP groupname | NODE \( nodename \[, ... \] \) \}** + + TO GROUP指定创建表所在的Node Group。TO NODE主要供内部扩容工具使用,一般用户不应该使用。 + +- **AS query** + + 一个SELECT VALUES命令或者一个运行预备好的SELECT或VALUES查询的EXECUTE命令。 + +- **\[ WITH \[ NO \] DATA \]** + + 创建表时,是否也插入查询到的数据。默认是要数据,选择“NO”参数时,则不要数据。 + + +## 示例 + +``` +--创建一个表tpcds.store_returns表。 +postgres=# CREATE TABLE tpcds.store_returns +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + sr_item_sk VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER +); +--创建一个表tpcds.store_returns_t1并插入tpcds.store_returns表中sr_item_sk字段中大于16的数值。 +postgres=# CREATE TABLE tpcds.store_returns_t1 AS SELECT * FROM tpcds.store_returns WHERE sr_item_sk > '4795'; + +--使用tpcds.store_returns拷贝一个新表tpcds.store_returns_t2。 +postgres=# CREATE TABLE tpcds.store_returns_t2 AS table tpcds.store_returns; + +--删除表。 +postgres=# DROP TABLE tpcds.store_returns_t1 ; +postgres=# DROP TABLE tpcds.store_returns_t2 ; +postgres=# DROP TABLE tpcds.store_returns; +``` + +## 相关链接 + +[CREATE TABLE](CREATE-TABLE.md),[SELECT](SELECT.md) + diff --git a/content/zh/docs/Developerguide/CREATE TABLE PARTITION.md b/content/zh/docs/Developerguide/CREATE TABLE PARTITION.md new file mode 100644 index 000000000..1a3f1bea7 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE TABLE PARTITION.md @@ -0,0 +1,643 @@ +# CREATE TABLE PARTITION + +## 功能描述 + +创建分区表。分区表是把逻辑上的一张表根据某种方案分成几张物理块进行存储,这张逻辑上的表称之为分区表,物理块称之为分区。分区表是一张逻辑表,不存储数据,数据实际是存储在分区上的。 + +常见的分区方案有范围分区(Range Partitioning)、哈希分区(Hash Partitioning)、列表分区(List Partitioning)、数值分区(Value Partition)等。目前行存表、列存表仅支持范围分区。 + +范围分区是根据表的一列或者多列,将要插入表的记录分为若干个范围,这些范围在不同的分区里没有重叠。为每个范围创建一个分区,用来存储相应的数据。 + +范围分区的分区策略是指记录插入分区的方式。目前范围分区仅支持范围分区策略。 + +范围分区策略:根据分区键值将记录映射到已创建的某个分区上,如果可以映射到已创建的某一分区上,则把记录插入到对应的分区上,否则给出报错和提示信息。这是最常用的分区策略。 + +分区可以提供若干好处: + +- 某些类型的查询性能可以得到极大提升。特别是表中访问率较高的行位于一个单独分区或少数几个分区上的情况下。分区可以减少数据的搜索空间,提高数据访问效率。 +- 当查询或更新一个分区的大部分记录时,连续扫描那个分区而不是访问整个表可以获得巨大的性能提升。 +- 如果需要大量加载或者删除的记录位于单独的分区上,则可以通过直接读取或删除那个分区以获得巨大的性能提升,同时还可以避免由于大量DELETE导致的VACUUM超载(仅范围分区)。 + +## 注意事项 + +有限地支持唯一约束和主键约束,即唯一约束和主键约束的约束键必须包含所有分区键。 + +## 语法格式 + +``` +CREATE TABLE [ IF NOT EXISTS ] partition_table_name +( [ + { column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ] + | table_constraint + | LIKE source_table [ like_option [...] ] }[, ... ] +] ) + [ WITH ( {storage_parameter = value} [, ... ] ) ] + [ COMPRESS | NOCOMPRESS ] + [ TABLESPACE tablespace_name ] + + [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ] + PARTITION BY { + {VALUES (partition_key)} | + {RANGE (partition_key) ( partition_less_than_item [, ... ] )} | + {RANGE (partition_key) ( partition_start_end_item [, ... ] )} + } [ { ENABLE | DISABLE } ROW MOVEMENT ]; + + +``` + +- 列约束column\_constraint: + + ``` + [ CONSTRAINT constraint_name ] + { NOT NULL | + NULL | + CHECK ( expression ) | + DEFAULT default_expr | + UNIQUE index_parameters | + PRIMARY KEY index_parameters } + [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] + ``` + +- 表约束table\_constraint: + + ``` + [ CONSTRAINT constraint_name ] + { CHECK ( expression ) | + UNIQUE ( column_name [, ... ] ) index_parameters | + PRIMARY KEY ( column_name [, ... ] ) index_parameters} + [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] + ``` + + +- like选项like\_option: + + ``` + { INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | RELOPTIONS | DISTRIBUTION | ALL } + ``` + + +- 索引存储参数index\_parameters: + + ``` + [ WITH ( {storage_parameter = value} [, ... ] ) ] + [ USING INDEX TABLESPACE tablespace_name ] + ``` + + +- partition\_less\_than\_item: + + ``` + PARTITION partition_name VALUES LESS THAN ( { partition_value | MAXVALUE } ) [TABLESPACE tablespace_name] + ``` + +- partition\_start\_end\_item: + + ``` + PARTITION partition_name { + {START(partition_value) END (partition_value) EVERY (interval_value)} | + {START(partition_value) END ({partition_value | MAXVALUE})} | + {START(partition_value)} | + {END({partition_value | MAXVALUE})} + } [TABLESPACE tablespace_name] + ``` + + +## 参数说明 + +- **IF NOT EXISTS** + + 如果已经存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表关系已存在。 + +- **partition\_table\_name** + + 分区表的名称。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **column\_name** + + 新表中要创建的字段名。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **data\_type** + + 字段的数据类型。 + +- **COLLATE collation** + + COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。 + +- **CONSTRAINT constraint\_name** + + 列约束或表约束的名称。可选的约束子句用于声明约束,新行或者更新的行必须满足这些约束才能成功插入或更新。 + + 定义约束有两种方法: + + - 列约束:作为一个列定义的一部分,仅影响该列。 + - 表约束:不和某个列绑在一起,可以作用于多个列。 + +- **LIKE source\_table \[ like\_option ... \]** + + LIKE子句声明一个表,新表自动从这个表里面继承所有字段名及其数据类型和非空约束。 + + 和INHERITS不同,新表与原来的表之间在创建动作完毕之后是完全无关的。在源表做的任何修改都不会传播到新表中,并且也不可能在扫描源表的时候包含新表的数据。 + + 字段缺省表达式只有在声明了INCLUDING DEFAULTS之后才会包含进来。缺省是不包含缺省表达式的,即新表中所有字段的缺省值都是NULL。 + + 非空约束将总是复制到新表中,CHECK约束则仅在指定了INCLUDING CONSTRAINTS的时候才复制,而其他类型的约束则永远也不会被复制。此规则同时适用于表约束和列约束。 + + 和INHERITS不同,被复制的列和约束并不使用相同的名称进行融合。如果明确的指定了相同的名称或者在另外一个LIKE子句中,将会报错。 + + - 如果指定了INCLUDING INDEXES,则源表上的索引也将在新表上创建,默认不建立索引。 + - 如果指定了INCLUDING STORAGE,则拷贝列的STORAGE设置也将被拷贝,默认情况下不包含STORAGE设置。 + - 如果指定了INCLUDING COMMENTS,则源表列、约束和索引的注释也会被拷贝过来。默认情况下,不拷贝源表的注释。 + - 如果指定了INCLUDING RELOPTIONS,则源表的存储参数(即源表的WITH子句)也将拷贝至新表。默认情况下,不拷贝源表的存储参数。 + - 如果指定了INCLUDING DISTRIBUTION,则新表将拷贝源表的分布信息,包括分布类型和分布列。默认情况下,不拷贝源表的分布信息。 + - INCLUDING ALL是INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES INCLUDING STORAGE INCLUDING COMMENTS INCLUDING RELOPTIONS INCLUDING DISTRIBUTION的简写形式。 + +- **WITH \( storage\_parameter \[= value\] \[, ... \] \)** + + 这个子句为表或索引指定一个可选的存储参数。参数的详细描述如下所示: + + - FILLFACTOR + + 一个表的填充因子(fillfactor)是一个介于10和100之间的百分数。100(完全填充)是默认值。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是最佳选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。该参数对于列存表没有意义。 + + 取值范围:10\~100 + + - ORIENTATION + + 决定了表的数据的存储方式。 + + 取值范围: + + - COLUMN:表的数据将以列式存储。 + - ROW(缺省值):表的数据将以行式存储。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >orientation不支持修改。 + + + - COMPRESSION + - 列存表的有效值为LOW/MIDDLE/HIGH/YES/NO,压缩级别依次升高,默认值为LOW。 + - 行存表的有效值为YES/NO,默认值为NO。 + + - MAX\_BATCHROW + + 指定了在数据加载过程中一个存储单元可以容纳记录的最大数目。该参数只对列存表有效。 + + 取值范围:10000\~60000 + + - PARTIAL\_CLUSTER\_ROWS + + 指定了在数据加载过程中进行将局部聚簇存储的记录数目。该参数只对列存表有效。 + + 取值范围:其有效值为大于等于10万。此值是MAX\_BATCHROW的倍数。 + + - DELTAROW\_THRESHOLD + + 预留参数。该参数只对列存表有效。 + + 取值范围:0~9999 + + +- **COMPRESS / NOCOMPRESS** + + 创建一个新表时,需要在创建表语句中指定关键字COMPRESS,这样,当对该表进行批量插入时就会触发压缩特性。该特性会在页范围内扫描所有元组数据,生成字典、压缩元组数据并进行存储。指定关键字NOCOMPRESS则不对表进行压缩。 + + 缺省值为NOCOMPRESS,即不对元组数据进行压缩。 + +- **TABLESPACE tablespace\_name** + + 指定新表将要在tablespace\_name表空间内创建。如果没有声明,将使用默认表空间。 + +- **PARTITION BY RANGE\(partition\_key\)** + + 创建范围分区。partition\_key为分区键的名称。 + + (1)对于从句是VALUES LESS THAN的语法格式: + + >![](public_sys-resources/icon-notice.gif) **须知:** + >对于从句是VALUE LESS THAN的语法格式,范围分区策略的分区键最多支持4列。 + + 该情形下,分区键支持的数据类型为:SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、CHARACTER VARYING\(n\)、VARCHAR\(n\)、CHARACTER\(n\)、CHAR\(n\)、CHARACTER、CHAR、TEXT、NVARCHAR2、NAME、TIMESTAMP\[\(p\)\] \[WITHOUT TIME ZONE\]、TIMESTAMP\[\(p\)\] \[WITH TIME ZONE\]、DATE。 + + (2)对于从句是START END的语法格式: + + >![](public_sys-resources/icon-notice.gif) **须知:** + >对于从句是START END的语法格式,范围分区策略的分区键仅支持1列。 + + 该情形下,分区键支持的数据类型为:SMALLINT、INTEGER、BIGINT、DECIMAL、NUMERIC、REAL、DOUBLE PRECISION、TIMESTAMP\[\(p\)\] \[WITHOUT TIME ZONE\]、TIMESTAMP\[\(p\)\] \[WITH TIME ZONE\]、DATE。 + +- **PARTITION partition\_name VALUES LESS THAN \( \{ partition\_value | MAXVALUE \} \)** + + 指定各分区的信息。partition\_name为范围分区的名称。partition\_value为范围分区的上边界,取值依赖于partition\_key的类型。MAXVALUE表示分区的上边界,它通常用于设置最后一个范围分区的上边界。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >- 每个分区都需要指定一个上边界。 + >- 分区上边界的类型应当和分区键的类型一致。 + >- 分区列表是按照分区上边界升序排列的,值较小的分区位于值较大的分区之前。 + +- **PARTITION partition\_name \{START \(partition\_value\) END \(partition\_value\) EVERY \(interval\_value\)\} | **\{START \(partition\_value\) END \(partition\_value|MAXVALUE\)\} | \{START\(partition\_value\)\} | **\{END \(partition\_value | MAXVALUE\)**\} + + 指定各分区的信息,各参数意义如下: + + - partition\_name:范围分区的名称或名称前缀,除以下情形外(假定其中的partition\_name是p1),均为分区的名称。 + - 若该定义是START+END+EVERY从句,则语义上定义的分区的名称依次为p1\_1, p1\_2, ...。例如对于定义“PARTITION p1 START\(1\) END\(4\) EVERY\(1\)”,则生成的分区是:\[1, 2\), \[2, 3\) 和 \[3, 4\),名称依次为p1\_1, p1\_2和p1\_3,即此处的p1是名称前缀。 + - 若该定义是第一个分区定义,且该定义有START值,则范围(MINVALUE, START)将自动作为第一个实际分区,其名称为p1\_0,然后该定义语义描述的分区名称依次为p1\_1, p1\_2, ...。例如对于完整定义“PARTITION p1 START\(1\), PARTITION p2 START\(2\)”,则生成的分区是:\(MINVALUE, 1\), \[1, 2\) 和 \[2, MAXVALUE\),其名称依次为p1\_0, p1\_1和p2,即此处p1是名称前缀,p2是分区名称。这里MINVALUE表示最小值。 + + - partition\_value:范围分区的端点值(起始或终点),取值依赖于partition\_key的类型,不可是MAXVALUE。 + - interval\_value:对\[START,END\) 表示的范围进行切分,interval\_value是指定切分后每个分区的宽度,不可是MAXVALUE;如果(END-START)值不能整除以EVERY值,则仅最后一个分区的宽度小于EVERY值。 + - MAXVALUE:表示最大值,它通常用于设置最后一个范围分区的上边界。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >1. 在创建分区表若第一个分区定义含START值,则范围(MINVALUE,START)将自动作为实际的第一个分区。 + >2. START END语法需要遵循以下限制: + > - 每个partition\_start\_end\_item中的START值(如果有的话,下同)必须小于其END值; + > - 相邻的两个partition\_start\_end\_item,第一个的END值必须等于第二个的START值; + > - 每个partition\_start\_end\_item中的EVERY值必须是正向递增的,且必须小于(END-START)值; + > - 每个分区包含起始值,不包含终点值,即形如:\[起始值,终点值\),起始值是MINVALUE时则不包含; + > - 一个partition\_start\_end\_item创建的每个分区所属的TABLESPACE一样; + > - partition\_name作为分区名称前缀时,其长度不要超过57字节,超过时自动截断; + > - 在创建、修改分区表时请注意分区表的分区总数不可超过最大限制(32767); + >3. 在创建分区表时START END与LESS THAN语法不可混合使用。 + >4. 即使创建分区表时使用START END语法,备份(gs\_dump)出的SQL语句也是VALUES LESS THAN语法格式。 + +- **\{ ENABLE | DISABLE \} ROW MOVEMENT** + + 行迁移开关。 + + 如果进行UPDATE操作时,更新了元组在分区键上的值,造成了该元组所在分区发生变化,就会根据该开关给出报错信息,或者进行元组在分区间的转移。 + + 取值范围: + + - ENABLE:行迁移开关打开。 + - DISABLE(缺省值):行迁移开关关闭。 + + +- **NOT NULL** + + 字段值不允许为NULL。ENABLE用于语法兼容,可省略。 + +- **NULL** + + 字段值允许NULL ,这是缺省。 + + 这个子句只是为和非标准SQL数据库兼容。不建议使用。 + +- **CHECK \(condition\) \[ NO INHERIT \]** + + CHECK约束声明一个布尔表达式,每次要插入的新行或者要更新的行的新值必须使表达式结果为真或未知才能成功,否则会抛出一个异常并且不会修改数据库。 + + 声明为字段约束的检查约束应该只引用该字段的数值,而在表约束里出现的表达式可以引用多个字段。 + + 用NO INHERIT标记的约束将不会传递到子表中去。 + + ENABLE用于语法兼容,可省略。 + +- **DEFAULT default\_expr** + + DEFAULT子句给字段指定缺省值。该数值可以是任何不含变量的表达式\(不允许使用子查询和对本表中的其他字段的交叉引用\)。缺省表达式的数据类型必须和字段类型匹配。 + + 缺省表达式将被用于任何未声明该字段数值的插入操作。如果没有指定缺省值则缺省值为NULL 。 + +- **UNIQUE index\_parameters** + + **UNIQUE \( column\_name \[, ... \] \) index\_parameters** + + UNIQUE约束表示表里的一个字段或多个字段的组合必须在全表范围内唯一。 + + 对于唯一约束,NULL被认为是互不相等的。 + +- **PRIMARY KEY index\_parameters** + + **PRIMARY KEY \( column\_name \[, ... \] \) index\_parameters** + + 主键约束声明表中的一个或者多个字段只能包含唯一的非NULL值。 + + 一个表只能声明一个主键。 + +- **DEFERRABLE | NOT DEFERRABLE** + + 这两个关键字设置该约束是否可推迟。一个不可推迟的约束将在每条命令之后马上检查。可推迟约束可以推迟到事务结尾使用SET CONSTRAINTS命令检查。缺省是NOT DEFERRABLE。目前,UNIQUE约束和主键约束可以接受这个子句。所有其他约束类型都是不可推迟的。 + +- **INITIALLY IMMEDIATE | INITIALLY DEFERRED** + + 如果约束是可推迟的,则这个子句声明检查约束的缺省时间。 + + - 如果约束是INITIALLY IMMEDIATE(缺省),则在每条语句执行之后就立即检查它; + - 如果约束是INITIALLY DEFERRED ,则只有在事务结尾才检查它。 + + 约束检查的时间可以用SET CONSTRAINTS命令修改。 + +- **USING INDEX TABLESPACE tablespace\_name** + + 为UNIQUE或PRIMARY KEY约束相关的索引声明一个表空间。如果没有提供这个子句,这个索引将在default\_tablespace中创建,如果default\_tablespace为空,将使用数据库的缺省表空间。 + + +## 示例 + +- 示例1:创建范围分区表tpcds.web\_returns\_p1,含有8个分区,分区键为integer类型。 分区的范围分别为:wr\_returned\_date\_sk< 2450815,2450815<= wr\_returned\_date\_sk< 2451179,2451179<=wr\_returned\_date\_sk< 2451544,2451544 <= wr\_returned\_date\_sk< 2451910,2451910 <= wr\_returned\_date\_sk< 2452275,2452275 <= wr\_returned\_date\_sk< 2452640,2452640 <= wr\_returned\_date\_sk< 2453005,wr\_returned\_date\_sk\>=2453005。 + + ``` + --创建表tpcds.web_returns。 + postgres=# CREATE TABLE tpcds.web_returns + ( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) + ); + --创建分区表tpcds.web_returns_p1。 + postgres=# CREATE TABLE tpcds.web_returns_p1 + ( + WR_RETURNED_DATE_SK INTEGER , + WR_RETURNED_TIME_SK INTEGER , + WR_ITEM_SK INTEGER NOT NULL, + WR_REFUNDED_CUSTOMER_SK INTEGER , + WR_REFUNDED_CDEMO_SK INTEGER , + WR_REFUNDED_HDEMO_SK INTEGER , + WR_REFUNDED_ADDR_SK INTEGER , + WR_RETURNING_CUSTOMER_SK INTEGER , + WR_RETURNING_CDEMO_SK INTEGER , + WR_RETURNING_HDEMO_SK INTEGER , + WR_RETURNING_ADDR_SK INTEGER , + WR_WEB_PAGE_SK INTEGER , + WR_REASON_SK INTEGER , + WR_ORDER_NUMBER BIGINT NOT NULL, + WR_RETURN_QUANTITY INTEGER , + WR_RETURN_AMT DECIMAL(7,2) , + WR_RETURN_TAX DECIMAL(7,2) , + WR_RETURN_AMT_INC_TAX DECIMAL(7,2) , + WR_FEE DECIMAL(7,2) , + WR_RETURN_SHIP_COST DECIMAL(7,2) , + WR_REFUNDED_CASH DECIMAL(7,2) , + WR_REVERSED_CHARGE DECIMAL(7,2) , + WR_ACCOUNT_CREDIT DECIMAL(7,2) , + WR_NET_LOSS DECIMAL(7,2) + ) + WITH (ORIENTATION = COLUMN,COMPRESSION=MIDDLE) + PARTITION BY RANGE(WR_RETURNED_DATE_SK) + ( + PARTITION P1 VALUES LESS THAN(2450815), + PARTITION P2 VALUES LESS THAN(2451179), + PARTITION P3 VALUES LESS THAN(2451544), + PARTITION P4 VALUES LESS THAN(2451910), + PARTITION P5 VALUES LESS THAN(2452275), + PARTITION P6 VALUES LESS THAN(2452640), + PARTITION P7 VALUES LESS THAN(2453005), + PARTITION P8 VALUES LESS THAN(MAXVALUE) + ); + + --从示例数据表导入数据。 + postgres=# INSERT INTO tpcds.web_returns_p1 SELECT * FROM tpcds.web_returns; + + --删除分区P8。 + postgres=# ALTER TABLE tpcds.web_returns_p1 DROP PARTITION P8; + + --增加分区WR_RETURNED_DATE_SK介于2453005和2453105之间。 + postgres=# ALTER TABLE tpcds.web_returns_p1 ADD PARTITION P8 VALUES LESS THAN (2453105); + + --增加分区WR_RETURNED_DATE_SK介于2453105和MAXVALUE之间。 + postgres=# ALTER TABLE tpcds.web_returns_p1 ADD PARTITION P9 VALUES LESS THAN (MAXVALUE); + + --删除分区P8。 + postgres=# ALTER TABLE tpcds.web_returns_p1 DROP PARTITION FOR (2453005); + + --分区P7重命名为P10。 + postgres=# ALTER TABLE tpcds.web_returns_p1 RENAME PARTITION P7 TO P10; + + --分区P6重命名为P11。 + postgres=# ALTER TABLE tpcds.web_returns_p1 RENAME PARTITION FOR (2452639) TO P11; + + --查询分区P10的行数。 + postgres=# SELECT count(*) FROM tpcds.web_returns_p1 PARTITION (P10); + count + -------- + 0 + (1 row) + + --查询分区P1的行数。 + postgres=# SELECT COUNT(*) FROM tpcds.web_returns_p1 PARTITION FOR (2450815); + count + -------- + 0 + (1 row) + ``` + +- 示例2:创建范围分区表tpcds.web\_returns\_p2,含有8个分区,分区键类型为integer类型,其中第8个分区上边界为MAXVALUE。 + + 八个分区的范围分别为: wr\_returned\_date\_sk< 2450815,2450815<= wr\_returned\_date\_sk< 2451179,2451179<=wr\_returned\_date\_sk< 2451544,2451544 <= wr\_returned\_date\_sk< 2451910,2451910 <= wr\_returned\_date\_sk< 2452275,2452275 <= wr\_returned\_date\_sk< 2452640,2452640 <= wr\_returned\_date\_sk< 2453005,wr\_returned\_date\_sk\>=2453005。 + + 分区表tpcds.web\_returns\_p2的表空间为example1;分区P1到P7没有声明表空间,使用采用分区表tpcds.web\_returns\_p2的表空间example1;指定分区P8的表空间为example2。 + + 假定数据库节点的数据目录/pg\_location/mount1/path1,数据库节点的数据目录/pg\_location/mount2/path2,数据库节点的数据目录/pg\_location/mount3/path3,数据库节点的数据目录/pg\_location/mount4/path4是dwsadmin用户拥有读写权限的空目录。 + + ``` + postgres=# CREATE TABLESPACE example1 RELATIVE LOCATION 'tablespace1/tablespace_1'; + postgres=# CREATE TABLESPACE example2 RELATIVE LOCATION 'tablespace2/tablespace_2'; + postgres=# CREATE TABLESPACE example3 RELATIVE LOCATION 'tablespace3/tablespace_3'; + postgres=# CREATE TABLESPACE example4 RELATIVE LOCATION 'tablespace4/tablespace_4'; + + postgres=# CREATE TABLE tpcds.web_returns_p2 + ( + WR_RETURNED_DATE_SK INTEGER , + WR_RETURNED_TIME_SK INTEGER , + WR_ITEM_SK INTEGER NOT NULL, + WR_REFUNDED_CUSTOMER_SK INTEGER , + WR_REFUNDED_CDEMO_SK INTEGER , + WR_REFUNDED_HDEMO_SK INTEGER , + WR_REFUNDED_ADDR_SK INTEGER , + WR_RETURNING_CUSTOMER_SK INTEGER , + WR_RETURNING_CDEMO_SK INTEGER , + WR_RETURNING_HDEMO_SK INTEGER , + WR_RETURNING_ADDR_SK INTEGER , + WR_WEB_PAGE_SK INTEGER , + WR_REASON_SK INTEGER , + WR_ORDER_NUMBER BIGINT NOT NULL, + WR_RETURN_QUANTITY INTEGER , + WR_RETURN_AMT DECIMAL(7,2) , + WR_RETURN_TAX DECIMAL(7,2) , + WR_RETURN_AMT_INC_TAX DECIMAL(7,2) , + WR_FEE DECIMAL(7,2) , + WR_RETURN_SHIP_COST DECIMAL(7,2) , + WR_REFUNDED_CASH DECIMAL(7,2) , + WR_REVERSED_CHARGE DECIMAL(7,2) , + WR_ACCOUNT_CREDIT DECIMAL(7,2) , + WR_NET_LOSS DECIMAL(7,2) + ) + TABLESPACE example1 + PARTITION BY RANGE(WR_RETURNED_DATE_SK) + ( + PARTITION P1 VALUES LESS THAN(2450815), + PARTITION P2 VALUES LESS THAN(2451179), + PARTITION P3 VALUES LESS THAN(2451544), + PARTITION P4 VALUES LESS THAN(2451910), + PARTITION P5 VALUES LESS THAN(2452275), + PARTITION P6 VALUES LESS THAN(2452640), + PARTITION P7 VALUES LESS THAN(2453005), + PARTITION P8 VALUES LESS THAN(MAXVALUE) TABLESPACE example2 + ) + ENABLE ROW MOVEMENT; + + --以like方式创建一个分区表。 + postgres=# CREATE TABLE tpcds.web_returns_p3 (LIKE tpcds.web_returns_p2 INCLUDING PARTITION); + + --修改分区P1的表空间为example2。 + postgres=# ALTER TABLE tpcds.web_returns_p2 MOVE PARTITION P1 TABLESPACE example2; + + --修改分区P2的表空间为example3。 + postgres=# ALTER TABLE tpcds.web_returns_p2 MOVE PARTITION P2 TABLESPACE example3; + + --以2453010为分割点切分P8。 + postgres=# ALTER TABLE tpcds.web_returns_p2 SPLIT PARTITION P8 AT (2453010) INTO + ( + PARTITION P9, + PARTITION P10 + ); + + --将P6,P7合并为一个分区。 + postgres=# ALTER TABLE tpcds.web_returns_p2 MERGE PARTITIONS P6, P7 INTO PARTITION P8; + + --修改分区表迁移属性。 + postgres=# ALTER TABLE tpcds.web_returns_p2 DISABLE ROW MOVEMENT; + --删除表和表空间。 + postgres=# DROP TABLE tpcds.web_returns_p1; + postgres=# DROP TABLE tpcds.web_returns_p2; + postgres=# DROP TABLE tpcds.web_returns_p3; + postgres=# DROP TABLESPACE example1; + postgres=# DROP TABLESPACE example2; + postgres=# DROP TABLESPACE example3; + postgres=# DROP TABLESPACE example4; + ``` + + +- 示例3:START END语法创建、修改Range分区表。 + + 假定/home/omm/startend\_tbs1,/home/omm/startend\_tbs2,/home/omm/startend\_tbs3,/home/omm/startend\_tbs4是omm用户拥有读写权限的空目录。 + + ``` + -- 创建表空间 + postgres=# CREATE TABLESPACE startend_tbs1 LOCATION '/home/omm/startend_tbs1'; + postgres=# CREATE TABLESPACE startend_tbs2 LOCATION '/home/omm/startend_tbs2'; + postgres=# CREATE TABLESPACE startend_tbs3 LOCATION '/home/omm/startend_tbs3'; + postgres=# CREATE TABLESPACE startend_tbs4 LOCATION '/home/omm/startend_tbs4'; + + -- 创建临时schema + postgres=# CREATE SCHEMA tpcds; + postgres=# SET CURRENT_SCHEMA TO tpcds; + + -- 创建分区表,分区键是integer类型 + postgres=# CREATE TABLE tpcds.startend_pt (c1 INT, c2 INT) + TABLESPACE startend_tbs1 + PARTITION BY RANGE (c2) ( + PARTITION p1 START(1) END(1000) EVERY(200) TABLESPACE startend_tbs2, + PARTITION p2 END(2000), + PARTITION p3 START(2000) END(2500) TABLESPACE startend_tbs3, + PARTITION p4 START(2500), + PARTITION p5 START(3000) END(5000) EVERY(1000) TABLESPACE startend_tbs4 + ) + ENABLE ROW MOVEMENT; + + -- 查看分区表信息 + postgres=# SELECT relname, boundaries, spcname FROM pg_partition p JOIN pg_tablespace t ON p.reltablespace=t.oid and p.parentid='tpcds.startend_pt'::regclass ORDER BY 1; + relname | boundaries | spcname + -------------+------------+--------------- + p1_0 | {1} | startend_tbs2 + p1_1 | {201} | startend_tbs2 + p1_2 | {401} | startend_tbs2 + p1_3 | {601} | startend_tbs2 + p1_4 | {801} | startend_tbs2 + p1_5 | {1000} | startend_tbs2 + p2 | {2000} | startend_tbs1 + p3 | {2500} | startend_tbs3 + p4 | {3000} | startend_tbs1 + p5_1 | {4000} | startend_tbs4 + p5_2 | {5000} | startend_tbs4 + startend_pt | | startend_tbs1 + (12 rows) + + -- 导入数据,查看分区数据量 + postgres=# INSERT INTO tpcds.startend_pt VALUES (GENERATE_SERIES(0, 4999), GENERATE_SERIES(0, 4999)); + postgres=# SELECT COUNT(*) FROM tpcds.startend_pt PARTITION FOR (0); + count + ------- + 1 + (1 row) + + postgres=# SELECT COUNT(*) FROM tpcds.startend_pt PARTITION (p3); + count + ------- + 500 + (1 row) + + -- 增加分区: [5000, 5300), [5300, 5600), [5600, 5900), [5900, 6000) + postgres=# ALTER TABLE tpcds.startend_pt ADD PARTITION p6 START(5000) END(6000) EVERY(300) TABLESPACE startend_tbs4; + + -- 增加MAXVALUE分区: p7 + postgres=# ALTER TABLE tpcds.startend_pt ADD PARTITION p7 END(MAXVALUE); + + -- 重命名分区p7为p8 + postgres=# ALTER TABLE tpcds.startend_pt RENAME PARTITION p7 TO p8; + + -- 删除分区p8 + postgres=# ALTER TABLE tpcds.startend_pt DROP PARTITION p8; + + -- 重命名5950所在的分区为:p71 + postgres=# ALTER TABLE tpcds.startend_pt RENAME PARTITION FOR(5950) TO p71; + + -- 分裂4500所在的分区[4000, 5000) + postgres=# ALTER TABLE tpcds.startend_pt SPLIT PARTITION FOR(4500) INTO(PARTITION q1 START(4000) END(5000) EVERY(250) TABLESPACE startend_tbs3); + + -- 修改分区p2的表空间为startend_tbs4 + postgres=# ALTER TABLE tpcds.startend_pt MOVE PARTITION p2 TABLESPACE startend_tbs4; + + -- 查看分区情形 + postgres=# SELECT relname, boundaries, spcname FROM pg_partition p JOIN pg_tablespace t ON p.reltablespace=t.oid and p.parentid='tpcds.startend_pt'::regclass ORDER BY 1; + relname | boundaries | spcname + -------------+------------+--------------- + p1_0 | {1} | startend_tbs2 + p1_1 | {201} | startend_tbs2 + p1_2 | {401} | startend_tbs2 + p1_3 | {601} | startend_tbs2 + p1_4 | {801} | startend_tbs2 + p1_5 | {1000} | startend_tbs2 + p2 | {2000} | startend_tbs4 + p3 | {2500} | startend_tbs3 + p4 | {3000} | startend_tbs1 + p5_1 | {4000} | startend_tbs4 + p6_1 | {5300} | startend_tbs4 + p6_2 | {5600} | startend_tbs4 + p6_3 | {5900} | startend_tbs4 + p71 | {6000} | startend_tbs4 + q1_1 | {4250} | startend_tbs3 + q1_2 | {4500} | startend_tbs3 + q1_3 | {4750} | startend_tbs3 + q1_4 | {5000} | startend_tbs3 + startend_pt | | startend_tbs1 + (19 rows) + + -- 删除表和表空间 + postgres=# DROP SCHEMA tpcds CASCADE; + postgres=# DROP TABLESPACE startend_tbs1; + postgres=# DROP TABLESPACE startend_tbs2; + postgres=# DROP TABLESPACE startend_tbs3; + postgres=# DROP TABLESPACE startend_tbs4; + ``` + + +## 相关链接 + +[ALTER TABLE PARTITION](ALTER-TABLE-PARTITION.md),[DROP TABLE](DROP-TABLE.md) + diff --git a/content/zh/docs/Developerguide/CREATE TABLE.md b/content/zh/docs/Developerguide/CREATE TABLE.md new file mode 100644 index 000000000..9d992b160 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE TABLE.md @@ -0,0 +1,931 @@ +# CREATE TABLE + +## 功能描述 + +在当前数据库中创建一个新的空白表,该表由命令执行者所有。 + +## 注意事项 + +- 列存表支持的数据类型请参考[列存表支持的数据类型](列存表支持的数据类型.md)。 +- 创建列存的数量建议不超过1000个。 +- 表中的主键约束和唯一约束必须包含分布列。 +- 如果在建表过程中数据库系统发生故障,系统恢复后可能无法自动清除之前已创建的、大小为0的磁盘文件。此种情况出现概率小,不影响数据库系统的正常运行。 +- 列存表的表级约束只支持PARTIAL CLUSTER KEY,不支持主外键等表级约束。 +- 列存表的字段约束只支持NULL、NOT NULL和DEFAULT常量值。 +- 列存表支持delta表,受参数[enable\_delta\_store](并行导入.md#zh-cn_topic_0237124705_section1035224982816) 控制是否开启,受参数deltarow\_threshold控制进入delta表的阀值。 +- 使用JDBC时,支持通过PrepareStatement对DEFAUTL值进行参数化设置。 + +## 语法格式 + +- 创建表。 + + ``` + CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } | UNLOGGED ] TABLE [ IF NOT EXISTS ] table_name + ({ column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] + | table_constraint + | LIKE source_table [ like_option [...] ] } + [, ... ]) + [ WITH ( {storage_parameter = value} [, ... ] ) ] + [ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ] + [ COMPRESS | NOCOMPRESS ] + [ TABLESPACE tablespace_name ] + [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ]; + ``` + + - 其中列约束column\_constraint为: + + ``` + [ CONSTRAINT constraint_name ] + { NOT NULL | + NULL | + CHECK ( expression ) | + DEFAULT default_expr | + UNIQUE index_parameters | + PRIMARY KEY index_parameters } + [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] + ``` + + - 其中列的压缩可选项compress\_mode为: + + ``` + { DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS } + ``` + + - 其中表约束table\_constraint为: + + ``` + [ CONSTRAINT constraint_name ] + { CHECK ( expression ) | + UNIQUE ( column_name [, ... ] ) index_parameters | + PRIMARY KEY ( column_name [, ... ] ) index_parameters | + PARTIAL CLUSTER KEY ( column_name [, ... ] ) } + [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] + ``` + + - 其中like选项like\_option为: + + ``` + { INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | DISTRIBUTION | ALL } + + ``` + + + +其中索引参数index\_parameters为: + +``` +[ WITH ( {storage_parameter = value} [, ... ] ) ] +[ USING INDEX TABLESPACE tablespace_name ] +``` + +## 参数说明 + +- **UNLOGGED** + + 如果指定此关键字,则创建的表为非日志表。在非日志表中写入的数据不会被写入到预写日志中,这样就会比普通表快很多。但是非日志表在冲突、执行操作系统重启、强制重启、切断电源操作或异常关机后会被自动截断,会造成数据丢失的风险。非日志表中的内容也不会被复制到备服务器中。在非日志表中创建的索引也不会被自动记录。 + + 使用场景:非日志表不能保证数据的安全性,用户应该在确保数据已经做好备份的前提下使用,例如系统升级时进行数据的备份。 + + 故障处理:当异常关机等操作导致非日志表上的索引发生数据丢失时,用户应该对发生错误的索引进行重建。 + +- **GLOBAL | LOCAL** + + 创建临时表时可以在TEMP或TEMPORARY前指定GLOBAL或LOCAL关键字。目前这两个关键字的设立,仅是为了兼容SQL标准,实际上无论指定GLOBAL还是LOCAL,openGauss都会创建本地临时表。 + +- **TEMPORARY | TEMP** + + 如果指定TEMP或TEMPORARY关键字,则创建的表为临时表。临时表只在当前会话可见,本会话结束后会自动删除。因此,在除当前会话连接的数据库节点故障时,仍然可以在当前会话上创建和使用临时表。由于临时表只在当前会话创建,对于涉及对临时表操作的DDL语句,会产生DDL失败的报错。因此,建议DDL语句中不要对临时表进行操作。TEMP和TEMPORARY等价。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >- 临时表通过每个会话独立的以pg\_temp开头的schema来保证只对当前会话可见,因此,不建议用户在日常操作中手动删除以pg\_temp,pg\_toast\_temp开头的schema。 + >- 如果建表时不指定TEMPORARY/TEMP关键字,而指定表的schema为当前会话的pg\_temp\_开头的schema,则此表会被创建为临时表。 + +- **IF NOT EXISTS** + + 如果已经存在相同名称的表,不会报出错误,而会发出通知,告知通知此表已存在。 + +- **table\_name** + + 要创建的表名。 + +- **column\_name** + + 新表中要创建的字段名。 + +- **data\_type** + + 字段的数据类型。 + +- **compress\_mode** + + 表字段的压缩选项,当前仅对行存表有效。该选项指定表字段优先使用的压缩算法。 + + 取值范围:DELTA、PREFIX、DICTIONARY、NUMSTR、NOCOMPRESS + +- **COLLATE collation** + + COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。 + +- **LIKE source\_table \[ like\_option ... \]** + + LIKE子句声明一个表,新表自动从这个表中继承所有字段名及其数据类型和非空约束。 + + 新表与源表之间在创建动作完毕之后是完全无关的。在源表做的任何修改都不会传播到新表中,并且也不可能在扫描源表的时候包含新表的数据。 + + 被复制的列和约束并不使用相同的名称进行融合。如果明确的指定了相同的名称或者在另外一个LIKE子句中,将会报错。 + + - 源表上的字段缺省表达式只有在指定INCLUDING DEFAULTS时,才会复制到新表中。缺省是不包含缺省表达式的,即新表中的所有字段的缺省值都是NULL。 + - 源表上的CHECK约束仅在指定INCLUDING CONSTRAINTS时,会复制到新表中,而其他类型的约束永远不会复制到新表中。非空约束总是复制到新表中。此规则同时适用于表约束和列约束。 + - 如果指定了INCLUDING INDEXES,则源表上的索引也将在新表上创建,默认不建立索引。 + - 如果指定了INCLUDING STORAGE,则复制列的STORAGE设置会复制到新表中,默认情况下不包含STORAGE设置。 + - 如果指定了INCLUDING COMMENTS,则源表列、约束和索引的注释会复制到新表中。默认情况下,不复制源表的注释。 + - 如果指定了INCLUDING PARTITION,则源表的分区定义会复制到新表中,同时新表将不能再使用PARTITION BY子句。默认情况下,不拷贝源表的分区定义。 + - 如果指定了INCLUDING RELOPTIONS,则源表的存储参数(即源表的WITH子句)会复制到新表中。默认情况下,不复制源表的存储参数。 + - 如果指定了INCLUDING DISTRIBUTION,则源表的分布信息会复制到新表中,包括分布类型和分布列。默认情况下,不拷贝源表的分布信息。 + - INCLUDING ALL包含了INCLUDING DEFAULTS、INCLUDING CONSTRAINTS、INCLUDING INDEXES、INCLUDING STORAGE、INCLUDING COMMENTS、INCLUDING PARTITION、INCLUDING RELOPTIONS和INCLUDING DISTRIBUTION的内容。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >- 如果源表包含serial、bigserial、smallseriral类型,或者源表字段的默认值是sequence,且sequence属于源表(通过CREATE SEQUENCE ... OWNED BY创建),这些Sequence不会关联到新表中,新表中会重新创建属于自己的sequence。这和之前版本的处理逻辑不同。如果用户希望源表和新表共享Sequence,需要首先创建一个共享的Sequence(避免使用OWNED BY),并配置为源表字段默认值,这样创建的新表会和源表共享该Sequence。 + >- 不建议将其他表私有的Sequence配置为源表字段的默认值,尤其是其他表只分布在特定的NodeGroup上,这可能导致CREATE TABLE ... LIKE执行失败。另外,如果源表配置其他表私有的Sequence,当该表删除时Sequence也会连带删除,这样源表的Sequence将不可用。如果用户希望多个表共享Sequence,建议创建共享的Sequence。 + +- **WITH \( \{ storage\_parameter = value \} \[, ... \] \)** + + 这个子句为表或索引指定一个可选的存储参数。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >使用任意精度类型Numeric定义列时,建议指定精度p以及刻度s。在不指定精度和刻度时,会按输入的显示出来。 + + 参数的详细描述如下所示。 + + - FILLFACTOR + + 一个表的填充因子(fillfactor)是一个介于10和100之间的百分数。100(完全填充)是默认值。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是最佳选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。该参数对于列存表没有意义。 + + 取值范围:10\~100 + + - ORIENTATION + + 指定表数据的存储方式,即行存方式、列存方式、ORC格式的方式,该参数设置成功后就不再支持修改。 + + 取值范围: + + - ROW,表示表的数据将以行式存储。 + + 行存储适合于OLTP业务,此类型的表上交互事务比较多,一次交互会涉及表中的多个列,用行存查询效率较高。 + + - COLUMN,表示表的数据将以列式存储。 + + 列存储适合于数据仓库业务,此类型的表上会做大量的汇聚计算,且涉及的列操作较少。 + + 默认值: + + 若指定表空间为普通表空间,默认值为ROW。 + + - COMPRESSION + + 指定表数据的压缩级别,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。 + + 取值范围: + + 列存表的有效值为YES/NO/LOW/MIDDLE/HIGH,默认值为LOW。 + + - COMPRESSLEVEL + + 指定表数据同一压缩级别下的不同压缩水平,它决定了同一压缩级别下表数据的压缩比以及压缩时间。对同一压缩级别进行了更加详细的划分,为用户选择压缩比和压缩时间提供了更多的空间。总体来讲,此值越大,表示同一压缩级别下压缩比越大,压缩时间越长;反之亦然。 + + 取值范围:0\~3,默认值为0。 + + - MAX\_BATCHROW + + 指定了在数据加载过程中一个存储单元可以容纳记录的最大数目。该参数只对列存表有效。 + + 取值范围:10000\~60000 + + - PARTIAL\_CLUSTER\_ROWS + + 指定了在数据加载过程中进行将局部聚簇存储的记录数目。该参数只对列存表有效。 + + 取值范围:600000\~2147483647 + + - DELTAROW\_THRESHOLD + + 指定列存表导入时小于多少行的数据进入delta表,只在GUC参数[enable\_delta\_store](并行导入.md#zh-cn_topic_0237124705_section1035224982816)开启时生效。该参数只对列存表有效。 + + 取值范围:0~9999,默认值为100 + + - VERSION + + 指定ORC存储格式的版本。 + + 取值范围:0.12,目前支持ORC 0.12格式,后续会随着ORC格式的发展,支持更多格式。 + + 默认值:0.12 + + +- **ON COMMIT \{ PRESERVE ROWS | DELETE ROWS | DROP \}** + + ON COMMIT选项决定在事务中执行创建临时表操作,当事务提交时,此临时表的后续操作。有以下三个选项,当前支持PRESERVE ROWS和DELETE ROWS选项。 + + - PRESERVE ROWS(缺省值):提交时不对临时表做任何操作,临时表及其表数据保持不变。 + - DELETE ROWS:提交时删除临时表中数据。 + - DROP:提交时删除此临时表。 + +- **COMPRESS | NOCOMPRESS** + + 创建新表时,需要在CREATE TABLE语句中指定关键字COMPRESS,这样,当对该表进行批量插入时就会触发压缩特性。该特性会在页范围内扫描所有元组数据,生成字典、压缩元组数据并进行存储。指定关键字NOCOMPRESS则不对表进行压缩。 + + 缺省值:NOCOMPRESS,即不对元组数据进行压缩。 + +- **TABLESPACE tablespace\_name** + + 创建新表时指定此关键字,表示新表将要在指定表空间内创建。如果没有声明,将使用默认表空间。 + +- **CONSTRAINT constraint\_name** + + 列约束或表约束的名称。可选的约束子句用于声明约束,新行或者更新的行必须满足这些约束才能成功插入或更新。 + + 定义约束有两种方法: + + - 列约束:作为一个列定义的一部分,仅影响该列。 + - 表约束:不和某个列绑在一起,可以作用于多个列。 + +- **NOT NULL** + + 字段值不允许为NULL。 + +- **NULL** + + 字段值允许为NULL ,这是缺省值。 + + 这个子句只是为和非标准SQL数据库兼容。不建议使用。 + +- **CHECK \( expression \)** + + CHECK约束声明一个布尔表达式,每次要插入的新行或者要更新的行的新值必须使表达式结果为真或未知才能成功,否则会抛出一个异常并且不会修改数据库。 + + 声明为字段约束的检查约束应该只引用该字段的数值,而在表约束里出现的表达式可以引用多个字段。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >expression表达式中,如果存在“<\>NULL”或“!=NULL”,这种写法是无效的,需要写成“is NOT NULL”。 + +- **DEFAULT default\_expr** + + DEFAULT子句给字段指定缺省值。该数值可以是任何不含变量的表达式\(不允许使用子查询和对本表中的其他字段的交叉引用\)。缺省表达式的数据类型必须和字段类型匹配。 + + 缺省表达式将被用于任何未声明该字段数值的插入操作。如果没有指定缺省值则缺省值为NULL 。 + +- **UNIQUE index\_parameters** + + **UNIQUE \( column\_name \[, ... \] \) index\_parameters** + + UNIQUE约束表示表里的一个字段或多个字段的组合必须在全表范围内唯一。 + + 对于唯一约束,NULL被认为是互不相等的。 + +- **PRIMARY KEY index\_parameters** + + **PRIMARY KEY \( column\_name \[, ... \] \) index\_parameters** + + 主键约束声明表中的一个或者多个字段只能包含唯一的非NULL值。 + + 一个表只能声明一个主键。 + +- **DEFERRABLE | NOT DEFERRABLE** + + 这两个关键字设置该约束是否可推迟。一个不可推迟的约束将在每条命令之后马上检查。可推迟约束可以推迟到事务结尾使用SET CONSTRAINTS命令检查。缺省是NOT DEFERRABLE。目前,UNIQUE约束和主键约束可以接受这个子句。所有其他约束类型都是不可推迟的。 + +- **PARTIAL CLUSTER KEY** + + 局部聚簇存储,列存表导入数据时按照指定的列\(单列或多列\),进行局部排序。 + +- **INITIALLY IMMEDIATE | INITIALLY DEFERRED** + + 如果约束是可推迟的,则这个子句声明检查约束的缺省时间。 + + - 如果约束是INITIALLY IMMEDIATE(缺省),则在每条语句执行之后就立即检查它; + - 如果约束是INITIALLY DEFERRED ,则只有在事务结尾才检查它。 + + 约束检查的时间可以用SET CONSTRAINTS命令修改。 + +- **USING INDEX TABLESPACE tablespace\_name** + + 为UNIQUE或PRIMARY KEY约束相关的索引声明一个表空间。如果没有提供这个子句,这个索引将在default\_tablespace中创建,如果default\_tablespace为空,将使用数据库的缺省表空间。 + + +## 示例 + +``` +--创建简单的表。 +postgres=# CREATE TABLE tpcds.warehouse_t1 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); + +postgres=# CREATE TABLE tpcds.warehouse_t2 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) DICTIONARY, + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); +``` + +``` +--创建表,并指定W_STATE字段的缺省值为GA。 +postgres=# CREATE TABLE tpcds.warehouse_t3 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) DEFAULT 'GA', + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); + +--创建表,并在事务结束时检查W_WAREHOUSE_NAME字段是否有重复。 +postgres=# CREATE TABLE tpcds.warehouse_t4 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) UNIQUE DEFERRABLE, + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); +``` + +``` +--创建一个带有70%填充因子的表。 +postgres=# CREATE TABLE tpcds.warehouse_t5 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2), + UNIQUE(W_WAREHOUSE_NAME) WITH(fillfactor=70) +); + +--或者用下面的语法。 +postgres=# CREATE TABLE tpcds.warehouse_t6 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) UNIQUE, + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +) WITH(fillfactor=70); + +--创建表,并指定该表数据不写入预写日志。 +postgres=# CREATE UNLOGGED TABLE tpcds.warehouse_t7 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); + +--创建表临时表。 +postgres=# CREATE TEMPORARY TABLE warehouse_t24 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); + +--事务中创建表临时表,并指定提交事务时删除该临时表数据。 +postgres=# CREATE TEMPORARY TABLE warehouse_t25 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +) ON COMMIT DELETE ROWS; + +--创建表时,不希望因为表已存在而报错。 +postgres=# CREATE TABLE IF NOT EXISTS tpcds.warehouse_t8 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); + +--创建普通表空间。 +postgres=# CREATE TABLESPACE DS_TABLESPACE1 RELATIVE LOCATION 'tablespace/tablespace_1'; +--创建表时,指定表空间。 +postgres=# CREATE TABLE tpcds.warehouse_t9 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +) TABLESPACE DS_TABLESPACE1; + +--创建表时,单独指定W_WAREHOUSE_NAME的索引表空间。 +postgres=# CREATE TABLE tpcds.warehouse_t10 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) UNIQUE USING INDEX TABLESPACE DS_TABLESPACE1, + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); +``` + +``` +--创建一个有主键约束的表。 +postgres=# CREATE TABLE tpcds.warehouse_t11 +( + W_WAREHOUSE_SK INTEGER PRIMARY KEY, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); + +---或是用下面的语法,效果完全一样。 +postgres=# CREATE TABLE tpcds.warehouse_t12 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2), + PRIMARY KEY(W_WAREHOUSE_SK) +); + +--或是用下面的语法,指定约束的名称。 +postgres=# CREATE TABLE tpcds.warehouse_t13 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2), + CONSTRAINT W_CSTR_KEY1 PRIMARY KEY(W_WAREHOUSE_SK) +); + +--创建一个有复合主键约束的表。 +postgres=# CREATE TABLE tpcds.warehouse_t14 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2), + CONSTRAINT W_CSTR_KEY2 PRIMARY KEY(W_WAREHOUSE_SK, W_WAREHOUSE_ID) +); + +--创建列存表。 +postgres=# CREATE TABLE tpcds.warehouse_t15 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +) WITH (ORIENTATION = COLUMN); + +--创建局部聚簇存储的列存表。 +postgres=# CREATE TABLE tpcds.warehouse_t16 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2), + PARTIAL CLUSTER KEY(W_WAREHOUSE_SK, W_WAREHOUSE_ID) +) WITH (ORIENTATION = COLUMN); + +--定义一个带压缩的列存表。 +postgres=# CREATE TABLE tpcds.warehouse_t17 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +) WITH (ORIENTATION = COLUMN, COMPRESSION=HIGH); + +--定义一个带压缩的表。 +postgres=# CREATE TABLE tpcds.warehouse_t18 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +) COMPRESS; + +--定义一个检查列约束。 +postgres=# CREATE TABLE tpcds.warehouse_t19 +( + W_WAREHOUSE_SK INTEGER PRIMARY KEY CHECK (W_WAREHOUSE_SK > 0), + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) CHECK (W_WAREHOUSE_NAME IS NOT NULL), + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); + +postgres=# CREATE TABLE tpcds.warehouse_t20 +( + W_WAREHOUSE_SK INTEGER PRIMARY KEY, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) CHECK (W_WAREHOUSE_NAME IS NOT NULL), + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2), + CONSTRAINT W_CONSTR_KEY2 CHECK(W_WAREHOUSE_SK > 0 AND W_WAREHOUSE_NAME IS NOT NULL) +); + +--定义一个表,表中每一个行存在数据库节点中。 +postgres=# CREATE TABLE tpcds.warehouse_t21 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2) +); + +--定义一个表,使用HASH分布。 +postgres=# CREATE TABLE tpcds.warehouse_t22 +( + W_WAREHOUSE_SK INTEGER NOT NULL, + W_WAREHOUSE_ID CHAR(16) NOT NULL, + W_WAREHOUSE_NAME VARCHAR(20) , + W_WAREHOUSE_SQ_FT INTEGER , + W_STREET_NUMBER CHAR(10) , + W_STREET_NAME VARCHAR(60) , + W_STREET_TYPE CHAR(15) , + W_SUITE_NUMBER CHAR(10) , + W_CITY VARCHAR(60) , + W_COUNTY VARCHAR(30) , + W_STATE CHAR(2) , + W_ZIP CHAR(10) , + W_COUNTRY VARCHAR(20) , + W_GMT_OFFSET DECIMAL(5,2), + CONSTRAINT W_CONSTR_KEY3 UNIQUE(W_WAREHOUSE_SK) +); + +--向tpcds.warehouse_t19表中增加一个varchar列。 +``` + +``` +postgres=# ALTER TABLE tpcds.warehouse_t19 ADD W_GOODS_CATEGORY varchar(30); + +--给tpcds.warehouse_t19表增加一个检查约束。 +postgres=# ALTER TABLE tpcds.warehouse_t19 ADD CONSTRAINT W_CONSTR_KEY4 CHECK (W_STATE IS NOT NULL); + +--在一个操作中改变两个现存字段的类型。 +postgres=# ALTER TABLE tpcds.warehouse_t19 + ALTER COLUMN W_GOODS_CATEGORY TYPE varchar(80), + ALTER COLUMN W_STREET_NAME TYPE varchar(100); + +--此语句与上面语句等效。 +postgres=# ALTER TABLE tpcds.warehouse_t19 MODIFY (W_GOODS_CATEGORY varchar(30), W_STREET_NAME varchar(60)); + +--给一个已存在字段添加非空约束。 +postgres=# ALTER TABLE tpcds.warehouse_t19 ALTER COLUMN W_GOODS_CATEGORY SET NOT NULL; + +--移除已存在字段的非空约束。 +postgres=# ALTER TABLE tpcds.warehouse_t19 ALTER COLUMN W_GOODS_CATEGORY DROP NOT NULL; + +--如果列存表中还未指定局部聚簇,向在一个列存表中添加局部聚簇列。 +postgres=# ALTER TABLE tpcds.warehouse_t17 ADD PARTIAL CLUSTER KEY(W_WAREHOUSE_SK); + +--查看约束的名称,并删除一个列存表中的局部聚簇列。 +postgres=# \d+ tpcds.warehouse_t17 + Table "tpcds.warehouse_t17" + Column | Type | Modifiers | Storage | Stats target | Description +-------------------+-----------------------+-----------+----------+--------------+------------- + w_warehouse_sk | integer | not null | plain | | + w_warehouse_id | character(16) | not null | extended | | + w_warehouse_name | character varying(20) | | extended | | + w_warehouse_sq_ft | integer | | plain | | + w_street_number | character(10) | | extended | | + w_street_name | character varying(60) | | extended | | + w_street_type | character(15) | | extended | | + w_suite_number | character(10) | | extended | | + w_city | character varying(60) | | extended | | + w_county | character varying(30) | | extended | | + w_state | character(2) | | extended | | + w_zip | character(10) | | extended | | + w_country | character varying(20) | | extended | | + w_gmt_offset | numeric(5,2) | | main | | +Partial Cluster : + "warehouse_t17_cluster" PARTIAL CLUSTER KEY (w_warehouse_sk) +Has OIDs: no +Location Nodes: ALL DATANODES +Options: compression=no, version=0.12 +postgres=# ALTER TABLE tpcds.warehouse_t17 DROP CONSTRAINT warehouse_t17_cluster; + +--将表移动到另一个表空间。 +postgres=# ALTER TABLE tpcds.warehouse_t19 SET TABLESPACE PG_DEFAULT; +--创建模式joe。 +postgres=# CREATE SCHEMA joe; + +--将表移动到另一个模式中。 +postgres=# ALTER TABLE tpcds.warehouse_t19 SET SCHEMA joe; + +--重命名已存在的表。 +postgres=# ALTER TABLE joe.warehouse_t19 RENAME TO warehouse_t23; + +--从warehouse_t23表中删除一个字段。 +postgres=# ALTER TABLE joe.warehouse_t23 DROP COLUMN W_STREET_NAME; + +--删除表空间、模式joe和模式表warehouse。 +postgres=# DROP TABLE tpcds.warehouse_t1; +postgres=# DROP TABLE tpcds.warehouse_t2; +postgres=# DROP TABLE tpcds.warehouse_t3; +postgres=# DROP TABLE tpcds.warehouse_t4; +postgres=# DROP TABLE tpcds.warehouse_t5; +postgres=# DROP TABLE tpcds.warehouse_t6; +postgres=# DROP TABLE tpcds.warehouse_t7; +postgres=# DROP TABLE tpcds.warehouse_t8; +postgres=# DROP TABLE tpcds.warehouse_t9; +postgres=# DROP TABLE tpcds.warehouse_t10; +postgres=# DROP TABLE tpcds.warehouse_t11; +postgres=# DROP TABLE tpcds.warehouse_t12; +postgres=# DROP TABLE tpcds.warehouse_t13; +postgres=# DROP TABLE tpcds.warehouse_t14; +postgres=# DROP TABLE tpcds.warehouse_t15; +postgres=# DROP TABLE tpcds.warehouse_t16; +postgres=# DROP TABLE tpcds.warehouse_t17; +postgres=# DROP TABLE tpcds.warehouse_t18; +postgres=# DROP TABLE tpcds.warehouse_t20; +postgres=# DROP TABLE tpcds.warehouse_t21; +postgres=# DROP TABLE tpcds.warehouse_t22; +postgres=# DROP TABLE joe.warehouse_t23; +postgres=# DROP TABLE tpcds.warehouse_t24; +postgres=# DROP TABLE tpcds.warehouse_t25; +postgres=# DROP TABLESPACE DS_TABLESPACE1; +postgres=# DROP SCHEMA IF EXISTS joe CASCADE; +``` + +## 相关链接 + +[ALTER TABLE](ALTER-TABLE.md),[DROP TABLE](DROP-TABLE.md),[CREATE TABLESPACE](CREATE-TABLESPACE.md) + +## 优化建议 + +- UNLOGGED + - UNLOGGED表和表上的索引因为数据写入时不通过WAL日志机制,写入速度远高于普通表。因此,可以用于缓冲存储复杂查询的中间结果集,增强复杂查询的性能。 + - UNLOGGED表无主备机制,在系统故障或异常断点等情况下,会有数据丢失风险,因此,不可用来存储基础数据。 + +- TEMPORARY | TEMP + - 临时表只在当前会话可见,会话结束后会自动删除。 + +- LIKE + - 新表自动从这个表中继承所有字段名及其数据类型和非空约束,新表与源表之间在创建动作完毕之后是完全无关的。 + +- LIKE INCLUDING DEFAULTS + - 源表上的字段缺省表达式只有在指定INCLUDING DEFAULTS时,才会复制到新表中。缺省是不包含缺省表达式的,即新表中的所有字段的缺省值都是NULL。 + +- LIKE INCLUDING CONSTRAINTS + - 源表上的CHECK约束仅在指定INCLUDING CONSTRAINTS时,会复制到新表中,而其他类型的约束永远不会复制到新表中。非空约束总是复制到新表中。此规则同时适用于表约束和列约束。 + +- LIKE INCLUDING INDEXES + - 如果指定了INCLUDING INDEXES,则源表上的索引也将在新表上创建,默认不建立索引。 + +- LIKE INCLUDING STORAGE + - 如果指定了INCLUDING STORAGE,则复制列的STORAGE设置会复制到新表中,默认情况下不包含STORAGE设置。 + +- LIKE INCLUDING COMMENTS + - 如果指定了INCLUDING COMMENTS,则源表列、约束和索引的注释会复制到新表中。默认情况下,不复制源表的注释。 + +- LIKE INCLUDING PARTITION + - 如果指定了INCLUDING PARTITION,则源表的分区定义会复制到新表中,同时新表将不能再使用PARTITION BY子句。默认情况下,不拷贝源表的分区定义。 + +- LIKE INCLUDING RELOPTIONS + - 如果指定了INCLUDING RELOPTIONS,则源表的存储参数(即源表的WITH子句)会复制到新表中。默认情况下,不复制源表的存储参数。 + +- LIKE INCLUDING DISTRIBUTION + - 如果指定了INCLUDING DISTRIBUTION,则源表的分布信息会复制到新表中,包括分布类型和分布列。默认情况下,不拷贝源表的分布信息。 + +- LIKE INCLUDING ALL + - INCLUDING ALL包含了INCLUDING DEFAULTS、INCLUDING CONSTRAINTS、INCLUDING INDEXES、INCLUDING STORAGE、INCLUDING COMMENTS、INCLUDING PARTITION、INCLUDING RELOPTIONS和INCLUDING DISTRIBUTION的内容。 + +- ORIENTATION ROW + - 创建行存表,行存储适合于OLTP业务,此类型的表上交互事务比较多,一次交互会涉及表中的多个列,用行存查询效率较高。 + +- ORIENTATION COLUMN + - 创建列存表,列存储适合于数据仓库业务,此类型的表上会做大量的汇聚计算,且涉及的列操作较少。 + + diff --git a/content/zh/docs/Developerguide/CREATE TABLESPACE.md b/content/zh/docs/Developerguide/CREATE TABLESPACE.md new file mode 100644 index 000000000..72e63fea0 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE TABLESPACE.md @@ -0,0 +1,131 @@ +# CREATE TABLESPACE + +## 功能描述 + +在数据库中创建一个新的表空间。 + +## 注意事项 + +- 只有系统管理员可以创建表空间。 +- 不允许在一个事务块内部执行CREATE TABLESPACE。 +- 执行CREATE TABLESPACE失败,如果内部创建目录(文件)操作成功了就会产生残留的目录(文件),重新创建时需要用户手动清理表空间指定的目录下残留的内容。如果在创建过程中涉及到数据目录下的表空间软连接残留,需要先将软连接的残留文件删除,再重新执行OM相关操作。 +- CREATE TABLESPACE不支持两阶段事务,如果部分节点执行失败,不支持回滚。 +- 创建表空间前的准备工作参考下述参数说明。 + +## 语法格式 + +``` +CREATE TABLESPACE tablespace_name + [ OWNER user_name ] RELATIVE LOCATION 'directory' [ MAXSIZE 'space_size' ] + [with_option_clause]; +``` + +其中普通表空间的with\_option\_clause为: + +``` +WITH ( {filesystem= { 'general'| "general" | general} | + random_page_cost = { 'value ' | value } | + seq_page_cost = { 'value ' | value }}[,...]) +``` + +## 参数说明 + +- **tablespace\_name** + + 要创建的表空间名称。 + + 表空间名称不能和数据openGauss中的其他表空间重名,且名称不能以"pg"开头,这样的名称留给系统表空间使用。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **OWNER user\_name** + + 指定该表空间的所有者。缺省时,新表空间的所有者是当前用户。 + + 只有系统管理员可以创建表空间,但是可以通过OWNER子句把表空间的所有权赋给其他非系统管理员。 + + 取值范围:字符串,已存在的用户。 + +- **RELATIVE** + + 使用相对路径,LOCATION目录是相对于各个数据库节点数据目录下的。 + + 目录层次:数据库节点的数据目录/pg\_location/相对路径 + + 相对路径最多指定两层。 + +- **LOCATION directory** + + 用于表空间的目录,对于目录有如下要求: + + - openGauss系统用户必须对该目录拥有读写权限,并且目录为空。如果该目录不存在,将由系统自动创建。 + - 目录必须是绝对路径,目录中不得含有特殊字符(如$,\> 等)。 + - 目录不允许指定在数据库数据目录下。 + - 目录需为本地路径。 + + 取值范围:字符串,有效的目录。 + +- **MAXSIZE 'space\_size'** + + 指定表空间在单个数据库节点上的最大值。 + + 取值范围:字符串格式为正整数+单位,单位当前支持K/M/G/T/P。解析后的数值以K为单位,且范围不能够超过64比特表示的有符号整数,即1KB\~9007199254740991KB。 + +- **random\_page\_cost** + + 指定随机读取page的开销。 + + 取值范围:0\~1.79769e+308。 + + 默认值:使用GUC参数random\_page\_cost的值。 + +- **seq\_page\_cost** + + 指定顺序读取page的开销。 + + 取值范围:0\~1.79769e+308。 + + 默认值:使用GUC参数seq\_page\_cost的值。 + + +## 示例 + +``` +--创建表空间。 +postgres=# CREATE TABLESPACE ds_location1 RELATIVE LOCATION 'tablespace/tablespace_1'; + +--创建用户joe。 +postgres=# CREATE ROLE joe IDENTIFIED BY 'Bigdata@123'; + +--创建用户jay。 +postgres=# CREATE ROLE jay IDENTIFIED BY 'Bigdata@123'; + +--创建表空间,且所有者指定为用户joe。 +postgres=# CREATE TABLESPACE ds_location2 OWNER joe RELATIVE LOCATION 'tablespace/tablespace_1'; + +--把表空间ds_location1重命名为ds_location3。 +postgres=# ALTER TABLESPACE ds_location1 RENAME TO ds_location3; + +--改变表空间ds_location2的所有者。 +postgres=# ALTER TABLESPACE ds_location2 OWNER TO jay; + +--删除表空间。 +postgres=# DROP TABLESPACE ds_location2; +postgres=# DROP TABLESPACE ds_location3; + +--删除用户。 +postgres=# DROP ROLE joe; +postgres=# DROP ROLE jay; +``` + +## 相关链接 + +[CREATE DATABASE](CREATE-DATABASE.md),[CREATE TABLE](CREATE-TABLE.md),[CREATE INDEX](CREATE-INDEX.md),[DROP TABLESPACE](DROP-TABLESPACE.md),[ALTER TABLESPACE](ALTER-TABLESPACE.md) + +## 优化建议 + +- create tablespace + + 不建议在事务内部创建表空间。 + + diff --git a/content/zh/docs/Developerguide/CREATE TEXT SEARCH CONFIGURATION.md b/content/zh/docs/Developerguide/CREATE TEXT SEARCH CONFIGURATION.md new file mode 100644 index 000000000..f6d0b6ffe --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE TEXT SEARCH CONFIGURATION.md @@ -0,0 +1,123 @@ +# CREATE TEXT SEARCH CONFIGURATION + +## 功能描述 + +创建新的文本搜索配置。一个文本搜索配置声明一个能将一个字符串划分成符号的文本搜索解析器,加上可以用于确定搜索对哪些标记感兴趣的字典。 + +## 注意事项 + +- 若仅声明分析器,那么新的文本搜索配置初始没有从符号类型到词典的映射, 因此会忽略所有的单词。后面必须调用ALTER TEXT SEARCH CONFIGURATION命令创建映射使配置生效。如果声明了COPY选项,那么会自动拷贝指定的文本搜索配置的解析器、映射、配置选项等信息。 +- 若模式名称已给出,那么文本搜索配置会在声明的模式中创建。否则会在当前模式创建。 +- 定义文本搜索配置的用户成为其所有者。 +- PARSER和COPY选项是互相排斥的,因为当一个现有配置被复制,其分析器配置也被复制了。 +- 若仅声明分析器,那么新的文本搜索配置初始没有从符号类型到词典的映射, 因此会忽略所有的单词。 + +## 语法格式 + +``` +CREATE TEXT SEARCH CONFIGURATION name + ( PARSER = parser_name | COPY = source_config ) + [ WITH ( {configuration_option = value} [, ...] )]; +``` + +## 参数说明 + +- **name** + + 要创建的文本搜索配置的名称。该名称可以有模式修饰。 + +- **parser\_name** + + 用于该配置的文本搜索分析器的名称。 + +- **source\_config** + + 要复制的现有文本搜索配置的名称。 + +- **configuration\_option** + + 文本搜索配置的配置参数,主要是针对parser\_name执行的解析器,或者source\_config隐含的解析器而言的。 + + 取值范围:目前共支持default、ngram两种类型的解析器,其中default类型的解析器没有对应的configuration\_option,ngram类型解析器对应的configuration\_option如[表1](#zh-cn_topic_0237122121_zh-cn_topic_0059777835_t0d301ca84e1a4c16ae8bead85aa1a8c3)所示。 + + **表 1** ngram类型解析器对应的配置参数 + + + + + + + + + + + + + + + + + + + + + + +

解析器

+

配置参数

+

参数描述

+

取值范围

+

ngram

+

gram_size

+

分词长度。

+

正整数,1~4

+

默认值:2

+

punctuation_ignore

+

是否忽略标点符号。

+
  • true(默认值):忽略标点符号。
  • false:不忽略标点符号。
+

grapsymbol_ignore

+

是否忽略图形化字符。

+
  • true:忽略图形化字符。
  • false(默认值):不忽略图形化字符。
+
+ + +## 示例 + +``` +--创建文本搜索配置。 +postgres=# CREATE TEXT SEARCH CONFIGURATION ngram2 (parser=ngram) WITH (gram_size = 2, grapsymbol_ignore = false); + +--创建文本搜索配置。 +postgres=# CREATE TEXT SEARCH CONFIGURATION ngram3 (copy=ngram2) WITH (gram_size = 2, grapsymbol_ignore = false); + +--添加类型映射。 +postgres=# ALTER TEXT SEARCH CONFIGURATION ngram2 ADD MAPPING FOR multisymbol WITH simple; + +--创建用户joe。 +postgres=# CREATE USER joe IDENTIFIED BY 'Bigdata@123'; + +--修改文本搜索配置的所有者。 +postgres=# ALTER TEXT SEARCH CONFIGURATION ngram2 OWNER TO joe; + +--修改文本搜索配置的schema。 +postgres=# ALTER TEXT SEARCH CONFIGURATION ngram2 SET SCHEMA joe; + +--重命名文本搜索配置。 +postgres=# ALTER TEXT SEARCH CONFIGURATION joe.ngram2 RENAME TO ngram_2; + +--删除类型映射。 +postgres=# ALTER TEXT SEARCH CONFIGURATION joe.ngram_2 DROP MAPPING IF EXISTS FOR multisymbol; + +--删除文本搜索配置。 +postgres=# DROP TEXT SEARCH CONFIGURATION joe.ngram_2; +postgres=# DROP TEXT SEARCH CONFIGURATION ngram3; + +--删除Schema及用户joe。 +postgres=# DROP SCHEMA IF EXISTS joe CASCADE; +postgres=# DROP ROLE IF EXISTS joe; +``` + +## 相关链接 + +[ALTER TEXT SEARCH CONFIGURATION](ALTER-TEXT-SEARCH-CONFIGURATION.md#ZH-CN_TOPIC_0242370543), [DROP TEXT SEARCH CONFIGURATION](DROP-TEXT-SEARCH-CONFIGURATION.md#ZH-CN_TOPIC_0242370618) + diff --git a/content/zh/docs/Developerguide/CREATE TEXT SEARCH DICTIONARY.md b/content/zh/docs/Developerguide/CREATE TEXT SEARCH DICTIONARY.md new file mode 100644 index 000000000..a2265e398 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE TEXT SEARCH DICTIONARY.md @@ -0,0 +1,143 @@ +# CREATE TEXT SEARCH DICTIONARY + +## 功能描述 + +创建一个新的全文检索词典。词典是一种指定在全文检索时识别特定词并处理的方法。 + +词典的创建依赖于预定义模板(在系统表[PG\_TS\_TEMPLATE](PG_TS_TEMPLATE.md#ZH-CN_TOPIC_0242385854)中定义),支持创建五种类型的词典,分别是Simple、Ispell、Synonym、Thesaurus、以及Snowball,每种类型的词典可以完成不同的任务。 + +## 注意事项 + +- 具有SYSADMIN权限的用户可以执行创建词典操作,创建该词典的用户自动成为其所有者。 +- 临时模式(pg\_temp)下不允许创建词典。 +- 创建或修改词典之后,任何对于用户自定义的词典定义文件的修改,将不会影响到数据库中的词典。如果需要在数据库中使用这些修改,需使用ALTER语句更新对应词典的定义文件。 + +## 语法格式 + +``` +CREATE TEXT SEARCH DICTIONARY name ( + TEMPLATE = template + [, option = value [, ... ]] +); +``` + +## 参数说明 + +- **name** + + 要创建的词典的名称(可指定模式名,否则在当前模式下创建)。 + + 取值范围:符合标识符命名规范的字符串,且最大长度不超过63个字符。 + +- **template** + + 模板名。 + + 取值范围:系统表[PG\_TS\_TEMPLATE](PG_TS_TEMPLATE.md#ZH-CN_TOPIC_0242385854)中定义的模板:Simple/Synonym/Thesaurus/Ispell/Snowball。 + +- **option** + + 参数名。与template值对应,不同的词典模板具有不同的参数列表,且与指定顺序无关。 + + - Simple词典对应的option + - **STOPWORDS** + + 停用词表文件名,默认后缀名为stop。停用词文件格式为一组word列表,每行定义一个停用词。词典处理时,文件中的空行和空格会被忽略,并将stopword词组转换为小写形式。 + + - **ACCEPT** + + 是否将非停用词设置为已识别。默认值为true。 + + 当Simple词典设置参数ACCEPT=true时,将不会传递任何token给后继词典,此时建议将其放置在词典列表的最后。反之,当ACCEPT=false时,建议将该Simple词典放置在列表中的至少一个词典之前。 + + - **FILEPATH** + + 词典文件所在目录。目录可以指定为本地目录和OBS目录。其中,本地目录格式为"file://absolute\_path",OBS目录格式为"obs://bucket\_name/path accesskey=ak secretkey=sk region=rg"。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPWORDS参数同时指定,不允许单独指定。 + + - Synonym词典对应的option + - **SYNONYM** + + 同义词词典的定义文件名,默认后缀名为syn。 + + 文件格式为一组同义词列表,每行格式为"token synonym",即token和其对应的synonym,中间以空格相连。 + + - **CASESENSITIVE** + + 设置是否大小写敏感,默认值为false,此时词典文件中的token和synonym均会转为小写形式处理。如果设置为true,则不会进行小写转换。 + + - **FILEPATH** + + 同义词词典文件所在目录。目录可以指定为本地目录和OBS目录两种形式。其中,本地目录格式为"file://absolute\_path",OBS目录格式为"obs://bucket\_name/path accesskey=ak secretkey=sk region=rg"。默认值为预定义词典文件所在目录。 + + - Thesaurus词典对应的option + - **DICTFILE** + + 词典定义文件名,默认后缀名为ths。 + + 文件格式为一组同义词列表,每行格式为"sample words : indexed words",中间冒号(:)作为短语和其替换词间的分隔符。TZ词典处理时,如果有多个匹配的sample words,将选择最长匹配输出。 + + - **DICTIONARY** + + 用于词规范化的子词典名,必须且仅能定义一个。该词典必须是已经存在的,在检查短语匹配之前使用,用于识别和规范输入文本。 + + 如果子词典无法识别输入词,将会报错。此时,需要移除该词或者更新子词典使其识别。此外,可在indexed words的开头放上一个星号(\*)来跳过在其上应用子词典,但是所有sample words必须可以被子词典识别。 + + 如果词典文件定义的sample words中,含有子词典中定义的停用词,需要用问号(?)替代停用词。假设a和the是子词典中所定义的停用词,如下: + + ``` + ? one ? two : swsw + ``` + + 上述同义词组定义会匹配"a one the two"以及"the one a two",这两个短语均会被swsw替代输出。 + + - **FILEPATH** + + 词典定义文件所在目录。目录可以指定为本地目录和OBS目录两种形式。其中,本地目录格式为"file://absolute\_path",OBS目录格式为"obs://bucket\_name/path accesskey=ak secretkey=sk region=rg"。默认值为预定义词典文件所在目录。 + + - Ispell词典 + - **DICTFILE** + + 词典定义文件名,默认后缀名为dict。 + + - **AFFFILE** + + 词缀文件名,默认后缀名为affix。 + + - **STOPWORDS** + + 停用词文件名,默认后缀名为stop,文件格式要求与Simple类型词典的停用词文件相同。 + + - **FILEPATH** + + 词典文件所在目录。可以指定为本地目录和OBS目录两种形式。其中,本地目录格式为"file://absolute\_path",OBS目录格式为"obs://bucket\_name/path accesskey=ak secretkey=sk region=rg"。默认值为预定义词典文件所在目录。 + + - Snowball词典 + - **LANGUAGE** + + 语言名,标识使用哪种语言的词干分析算法。算法按照对应语言中的拼写规则,缩减输入词的常见变体形式为一个基础词或词干。 + + - **STOPWORDS** + + 停用词表文件名,默认后缀名为stop,文件格式要求与Simple类型词典的停用词文件相同。 + + - **FILEPATH** + + 词典定义文件所在目录。可以指定为本地目录或者OBS目录。其中,本地目录格式为"file://absolute\_path",OBS目录格式为"obs://bucket\_name/path accesskey=ak secretkey=sk region=rg"。默认值为预定义词典文件所在目录。FILEPATH参数必须和STOPWORDS参数同时指定,不允许单独指定。 + + + >![](public_sys-resources/icon-note.gif) **说明:** + >词典定义文件的文件名仅支持小写字母、数据、下划线混合。 + +- **value** + + 参数值。如果不是简单的标识符或数字,则参数值必须加单引号(标示符和数字同样可以加上单引号)。 + + +## 示例 + +请参见[配置示例](配置示例.md#ZH-CN_TOPIC_0242370505)一节的示例。 + +## 相关链接 + +[ALTER TEXT SEARCH DICTIONARY](ALTER-TEXT-SEARCH-DICTIONARY.md#ZH-CN_TOPIC_0242370544),[CREATE TEXT SEARCH DICTIONARY](CREATE-TEXT-SEARCH-DICTIONARY.md#ZH-CN_TOPIC_0242370586) + diff --git a/content/zh/docs/Developerguide/CREATE TRIGGER.md b/content/zh/docs/Developerguide/CREATE TRIGGER.md new file mode 100644 index 000000000..3c605ccfb --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE TRIGGER.md @@ -0,0 +1,352 @@ +# CREATE TRIGGER + +## 功能描述 + +创建一个触发器。 触发器将与指定的表或视图关联,并在特定条件下执行指定的函数。 + +## 注意事项 + +- 当前仅支持在普通行存表上创建触发器,不支持在列存表、临时表、unlogged表等类型表上创建触发器。 +- 如果为同一事件定义了多个相同类型的触发器,则按触发器的名称字母顺序触发它们。 +- 触发器常用于多表间数据关联同步场景,对SQL执行性能影响较大,不建议在大数据量同步及对性能要求高的场景中使用。 + +## 语法格式 + +``` +CREATE [ CONSTRAINT ] TRIGGER trigger_name { BEFORE | AFTER | INSTEAD OF } { event [ OR ... ] } + ON table_name + [ FROM referenced_table_name ] + { NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } } + [ FOR [ EACH ] { ROW | STATEMENT } ] + [ WHEN ( condition ) ] + EXECUTE PROCEDURE function_name ( arguments ); +``` + +其中event包含以下几种: + +``` + INSERT + UPDATE [ OF column_name [, ... ] ] + DELETE + TRUNCATE +``` + +## 参数说明 + +- **CONSTRAINT** + + 可选项,指定此参数将创建约束触发器,即触发器作为约束来使用。除了可以使用SET CONSTRAINTS调整触发器触发的时间之外,这与常规触发器相同。 约束触发器必须是AFTER ROW触发器。 + +- **trigger\_name** + + 触发器名称,该名称不能限定模式,因为触发器自动继承其所在表的模式,且同一个表的触发器不能重名。 对于约束触发器,使用[SET CONSTRAINTS](SET-CONSTRAINTS.md)修改触发器行为时也使用此名称。 + + 取值范围:符合标识符命名规范的字符串,且最大长度不超过63个字符。 + +- **BEFORE** + + 触发器函数是在触发事件发生前执行。 + +- **AFTER** + + 触发器函数是在触发事件发生后执行,约束触发器只能指定为AFTER。 + +- **INSTEAD OF** + + 触发器函数直接替代触发事件。 + +- **event** + + 启动触发器的事件,取值范围包括:INSERT、UPDATE、DELETE或TRUNCATE,也可以通过OR同时指定多个触发事件。 + + 对于UPDATE事件类型,可以使用下面语法指定列: + + ``` + UPDATE OF column_name1 [, column_name2 ... ] + ``` + + 表示只有这些列作为UPDATE语句的目标列时,才会启动触发器,但是INSTEAD OF UPDATE类型不支持指定列信息。 + +- **table\_name** + + 需要创建触发器的表名称。 + + 取值范围:数据库中已经存在的表名称。 + +- **referenced\_table\_name** + + 约束引用的另一个表的名称。 只能为约束触发器指定,常见于外键约束。由于当前不支持外键,因此不建议使用。 + + 取值范围:数据库中已经存在的表名称。 + +- **DEFERRABLE | NOT DEFERRABLE** + + 约束触发器的启动时机,仅作用于约束触发器。这两个关键字设置该约束是否可推迟。 + + 详细介绍请参见[CREATE TABLE](CREATE-TABLE.md)。 + +- **INITIALLY IMMEDIATE** **| INITIALLY DEFERRED** + + 如果约束是可推迟的,则这个子句声明检查约束的缺省时间,仅作用于约束触发器。 + + 详细介绍请参见[CREATE TABLE](CREATE-TABLE.md)。 + +- **FOR EACH ROW | FOR EACH STATEMENT** + + 触发器的触发频率。 + + - FOR EACH ROW是指该触发器是受触发事件影响的每一行触发一次。 + - FOR EACH STATEMENT是指该触发器是每个SQL语句只触发一次。 + + 未指定时默认值为FOR EACH STATEMENT。约束触发器只能指定为FOR EACH ROW。 + +- **condition** + + 决定是否实际执行触发器函数的条件表达式。当指定WHEN时,只有在条件返回true时才会调用该函数。 + + 在FOR EACH ROW触发器中,WHEN条件可以通过分别写入OLD.column\_name或NEW.column\_name来引用旧行或新行值的列。 当然,INSERT触发器不能引用OLD和DELETE触发器不能引用NEW。 + + INSTEAD OF触发器不支持WHEN条件。 + + WHEN表达式不能包含子查询。 + + 对于约束触发器,WHEN条件的评估不会延迟,而是在执行更新操作后立即发生。 如果条件返回值不为true,则触发器不会排队等待延迟执行。 + +- **function\_name** + + 用户定义的函数,必须声明为不带参数并返回类型为触发器,在触发器触发时执行。 + +- **arguments** + + 执行触发器时要提供给函数的可选的以逗号分隔的参数列表。参数是文字字符串常量,简单的名称和数字常量也可以写在这里,但它们都将被转换为字符串。 请检查触发器函数的实现语言的描述,以了解如何在函数内访问这些参数。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >关于触发器种类: + >- INSTEAD OF的触发器必须标记为FOR EACH ROW,并且只能在视图上定义。 + >- BEFORE和AFTER触发器作用在视图上时,只能标记为FOR EACH STATEMENT。 + >- TRUNCATE类型触发器仅限FOR EACH STATEMENT。 + + **表 1** 表和视图上支持的触发器种类: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

触发时机

+

触发事件

+

行级

+

语句级

+

BEFORE

+

INSERT/UPDATE/DELETE

+

+

表和视图

+

TRUNCATE

+

不支持

+

+

AFTER

+

INSERT/UPDATE/DELETE

+

+

表和视图

+

TRUNCATE

+

不支持

+

+

INSTEAD OF

+

INSERT/UPDATE/DELETE

+

视图

+

不支持

+

TRUNCATE

+

不支持

+

不支持

+
+ + **表 2** PLPGSQL类型触发器函数特殊变量: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

变量名

+

变量含义

+

NEW

+

INSERT及UPDATE操作涉及tuple信息中的新值,对DELETE为空。

+

OLD

+

UPDATE及DELETE操作涉及tuple信息中的旧值,对INSERT为空。

+

TG_NAME

+

触发器名称。

+

TG_WHEN

+

触发器触发时机(BEFORE/AFTER/INSTEAD OF)。

+

TG_LEVEL

+

触发频率(ROW/STATEMENT)。

+

TG_OP

+

触发操作(INSERT/UPDATE/DELETE/TRUNCATE)。

+

TG_RELID

+

触发器所在表OID。

+

TG_RELNAME

+

触发器所在表名(已废弃,现用TG_TABLE_NAME替代)。

+

TG_TABLE_NAME

+

触发器所在表名。

+

TG_TABLE_SCHEMA

+

触发器所在表的SCHEMA信息。

+

TG_NARGS

+

触发器函数参数个数。

+

TG_ARGV[]

+

触发器函数参数列表。

+
+ + +## 示例 + +``` +--创建源表及触发表 +postgres=# CREATE TABLE test_trigger_src_tbl(id1 INT, id2 INT, id3 INT); +postgres=# CREATE TABLE test_trigger_des_tbl(id1 INT, id2 INT, id3 INT); + +--创建触发器函数 +postgres=# CREATE OR REPLACE FUNCTION tri_insert_func() RETURNS TRIGGER AS + $$ + DECLARE + BEGIN + INSERT INTO test_trigger_des_tbl VALUES(NEW.id1, NEW.id2, NEW.id3); + RETURN NEW; + END + $$ LANGUAGE PLPGSQL; + +postgres=# CREATE OR REPLACE FUNCTION tri_update_func() RETURNS TRIGGER AS + $$ + DECLARE + BEGIN + UPDATE test_trigger_des_tbl SET id3 = NEW.id3 WHERE id1=OLD.id1; + RETURN OLD; + END + $$ LANGUAGE PLPGSQL; + +postgres=# CREATE OR REPLACE FUNCTION TRI_DELETE_FUNC() RETURNS TRIGGER AS + $$ + DECLARE + BEGIN + DELETE FROM test_trigger_des_tbl WHERE id1=OLD.id1; + RETURN OLD; + END + $$ LANGUAGE PLPGSQL; + +--创建INSERT触发器 +postgres=# CREATE TRIGGER insert_trigger + BEFORE INSERT ON test_trigger_src_tbl + FOR EACH ROW + EXECUTE PROCEDURE tri_insert_func(); + +--创建UPDATE触发器 +postgres=# CREATE TRIGGER update_trigger + AFTER UPDATE ON test_trigger_src_tbl + FOR EACH ROW + EXECUTE PROCEDURE tri_update_func(); + +--创建DELETE触发器 +postgres=# CREATE TRIGGER delete_trigger + BEFORE DELETE ON test_trigger_src_tbl + FOR EACH ROW + EXECUTE PROCEDURE tri_delete_func(); + +--执行INSERT触发事件并检查触发结果 +postgres=# INSERT INTO test_trigger_src_tbl VALUES(100,200,300); +postgres=# SELECT * FROM test_trigger_src_tbl; +postgres=# SELECT * FROM test_trigger_des_tbl; //查看触发操作是否生效。 + +--执行UPDATE触发事件并检查触发结果 +postgres=# UPDATE test_trigger_src_tbl SET id3=400 WHERE id1=100; +postgres=# SELECT * FROM test_trigger_src_tbl; +postgres=# SELECT * FROM test_trigger_des_tbl; //查看触发操作是否生效 + +--执行DELETE触发事件并检查触发结果 +postgres=# DELETE FROM test_trigger_src_tbl WHERE id1=100; +postgres=# SELECT * FROM test_trigger_src_tbl; +postgres=# SELECT * FROM test_trigger_des_tbl; //查看触发操作是否生效 + +--修改触发器 +postgres=# ALTER TRIGGER delete_trigger ON test_trigger_src_tbl RENAME TO delete_trigger_renamed; + +--禁用insert_trigger触发器 +postgres=# ALTER TABLE test_trigger_src_tbl DISABLE TRIGGER insert_trigger; + +--禁用当前表上所有触发器 +postgres=# ALTER TABLE test_trigger_src_tbl DISABLE TRIGGER ALL; + +--删除触发器 +postgres=# DROP TRIGGER insert_trigger ON test_trigger_src_tbl; +postgres=# DROP TRIGGER update_trigger ON test_trigger_src_tbl; +postgres=# DROP TRIGGER delete_trigger_renamed ON test_trigger_src_tbl; +``` + +## 相关链接 + +[ALTER TRIGGER](ALTER-TRIGGER.md),[DROP TRIGGER](DROP-TRIGGER.md),[ALTER TABLE](ALTER-TABLE.md) + diff --git a/content/zh/docs/Developerguide/CREATE TYPE.md b/content/zh/docs/Developerguide/CREATE TYPE.md new file mode 100644 index 000000000..2fe0244a3 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE TYPE.md @@ -0,0 +1,399 @@ +# CREATE TYPE + +## 功能描述 + +在当前数据库中定义一种新的数据类型。定义数据类型的用户将成为该数据类型的拥有者。类型只适用于行存表 + +有四种形式的CREATE TYPE,分别为:复合类型、基本类型、shell类型和枚举类型。 + +- 复合类型 + + 复合类型由一个属性名和数据类型的列表指定。如果属性的数据类型是可排序的,也可以指定该属性的排序规则。复合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用CREATE TYPE避免了创建一个实际的表。单独的复合类型也是很有用的,例如可以作为函数的参数或者返回类型。 + + 为了能够创建复合类型,必须拥有在其所有属性类型上的USAGE特权。 + +- 基本类型 + + 用户可以自定义一种新的基本类型(标量类型)。通常来说这些函数必须是用C或者另外一种低层语言所编写。 + +- shell类型 + + shell类型是一种用于后面要定义的类型的占位符,通过发出一个不带除类型名之外其他参数的CREATE TYPE命令可以创建这种类型。在创建基本类型时,需要shell类型作为一种向前引用。 + +- 枚举类型 + + 由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度必须不超过64个字节。 + + +## 注意事项 + +如果给定一个模式名,那么该类型将被创建在指定的模式中。否则它会被创建在当前模式中。类型名称必须与同一个模式中任何现有的类型或者域相区别(因为表具有相关的数据类型,类型名称也必须与同一个模式中任何现有表的名称不同)。 + +## 语法格式 + +``` +CREATE TYPE name AS + ( [ attribute_name data_type [ COLLATE collation ] [, ... ] ] ) + +CREATE TYPE name ( + INPUT = input_function, + OUTPUT = output_function + [ , RECEIVE = receive_function ] + [ , SEND = send_function ] + [ , TYPMOD_IN = +type_modifier_input_function ] + [ , TYPMOD_OUT = +type_modifier_output_function ] + [ , ANALYZE = analyze_function ] + [ , INTERNALLENGTH = { internallength | +VARIABLE } ] + [ , PASSEDBYVALUE ] + [ , ALIGNMENT = alignment ] + [ , STORAGE = storage ] + [ , LIKE = like_type ] + [ , CATEGORY = category ] + [ , PREFERRED = preferred ] + [ , DEFAULT = default ] + [ , ELEMENT = element ] + [ , DELIMITER = delimiter ] + [ , COLLATABLE = collatable ] +) + +CREATE TYPE name + +CREATE TYPE name AS ENUM + ( [ 'label' [, ... ] ] ) +``` + +## 参数说明 + +复合类型 + +- **name** + + 要创建的类型的名称(可以被模式限定)。 + +- **attribute\_name** + + 复合类型的一个属性(列)的名称。 + +- **data\_type** + + 要成为复合类型的一个列的现有数据类型的名称。 + +- **collation** + + 要关联到复合类型的一列的现有排序规则的名称。 + + +基本类型 + +自定义基本类型时,参数可以以任意顺序出现,input\_function和output\_function为必选参数,其它为可选参数。 + +- **input\_function** + + 将数据从类型的外部文本形式转换为内部形式的函数名。 + + 输入函数可以被声明为有一个cstring类型的参数,或者有三个类型分别为cstring、 oid、integer的参数。 + + - cstring参数是以C字符串存在的输入文本。 + - oid参数是该类型自身的OID(对于数组类型则是其元素类型的OID)。 + - integer参数是目标列的typmod(如果知道,不知道则将传递 -1)。 + + 输入函数必须返回一个该数据类型本身的值。通常,一个输入函数应该被声明为STRICT。 如果不是这样,在读到一个NULL输入值时,调用输入函数时第一个参数会是NULL。在这种情况下,该函数必须仍然返回NULL,除非调用函数发生了错误(这种情况主要是想支持域输入函数,域输入函数可能需要拒绝NULL输入)。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >输入和输出函数能被声明为具有新类型的结果或参数是因为:必须在创建新类型之前创建这两个函数。而新类型应该首先被定义为一种shell type,它是一种占位符类型,除了名称和拥有者之外它没有其他属性。这可以通过不带额外参数的命令CREATE TYPE name做到。然后用C写的I/O函数可以被定义为引用这种shell type。最后,用带有完整定义的CREATE TYPE把该shell type替换为一个完全的、合法的类型定义,之后新类型就可以正常使用了。 + +- **output\_function** + + 将数据从类型的内部形式转换为外部文本形式的函数名。 + + 输出函数必须被声明为有一个新数据类型的参数。输出函数必须返回类型cstring。对于NULL值不会调用输出函数。 + +- **receive\_function** + + 可选参数。将数据从类型的外部二进制形式转换成内部形式的函数名。 + + 如果没有该函数,该类型不能参与到二进制输入中。二进制表达转换成内部形式代价更低,然而却更容易移植(例如,标准的整数数据类型使用网络字节序作为外部二进制表达,而内部表达是机器本地的字节序)。receive\_function应该执行足够的检查以确保该值是有效的。 + + 接收函数可以被声明为有一个internal类型的参数,或者有三个类型分别为internal、oid、integer的参数。 + + - internal参数是一个指向StringInfo缓冲区的指针,其中保存着接收到的字节串。 + - oid和integer参数和文本输入函数的相同。 + + 接收函数必须返回一个该数据类型本身的值。通常,一个接收函数应该被声明为STRICT。如果不是这样,在读到一个NULL输入值时调用接收函数时第一个参数会是NULL。在这种情况下,该函数必须仍然返回NULL,除非接收函数发生了错误(这种情况主要是想支持域接收函数,域接收函数可能需要拒绝NULL输入)。 + +- **send\_function** + + 可选参数。将数据从类型的内部形式转换为外部二进制形式的函数名。 + + 如果没有该函数,该类型将不能参与到二进制输出中。发送函数必须被声明为有一个新数据类型的参数。发送函数必须返回类型bytea。对于NULL值不会调用发送函数。 + +- **type\_modifier\_input\_function** + + 可选参数。将类型的修饰符数组转换为内部形式的函数名。 + +- **type\_modifier\_output\_function** + + 可选参数。将类型的修饰符的内部形式转换为外部文本形式的函数名。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >如果该类型支持修饰符(附加在类型声明上的可选约束,例如,char\(5\)或numeric\(30,2\)),则需要可选的type\_modifier\_input\_function以及type\_modifier\_output\_function。openGauss允许用户定义的类型有一个或者多个简单常量或者标识符作为修饰符。不过,为了存储在系统目录中,该信息必须能被打包到一个非负整数值中。所声明的修饰符会被以cstring数组的形式传递给type\_modifier\_input\_function。 type\_modifier\_input\_function必须检查该值的合法性(如果值错误就抛出一个错误),如果值正确,要返回一个非负integer值,该值将被存储在“typmod”列中。如果类型没有 type\_modifier\_input\_function则类型修饰符将被拒绝。type\_modifier\_output\_function把内部的整数typmod值转换回正确的形式用于用户显示。type\_modifier\_output\_function必须返回一个cstring值,该值就是追加到类型名称后的字符串。例如,numeric的函数可能会返回\(30,2\)。如果默认的显示格式就是只把存储的typmod整数值放在圆括号内,则允许省略type\_modifier\_output\_function。 + +- **analyze\_function** + + 可选参数。为该数据类型执行统计分析的函数名的可选参数。 + + 默认情况下,如果该类型有一个默认的B-tree操作符类,ANALYZE将尝试用类型的“equals”和“less-than”操作符来收集统计信息。这种行为对于非标量类型并不合适,因此可以通过指定一个自定义分析函数来覆盖这种行为。分析函数必须被声明为有一个类型为internal的参数,并且返回一个boolean结果。 + +- **internallength** + + 可选参数。一个数字常量,用于指定新类型的内部表达的字节长度。默认为变长。 + + 虽然只有I/O函数和其他为该类型创建的函数才知道新类型的内部表达的细节, 但是内部表达的一些属性必须被向openGauss声明。其中最重要的是internallength。基本数据类型可以是定长的(这种情况下internallength是一个正整数)或者是变长的(把internallength设置为VARIABLE,在内部通过把typlen设置为-1表示)。所有变长类型的内部表达都必须以一个4字节整数开始,internallength定义了总长度。 + +- **PASSEDBYVALUE** + + 可选参数。表示这种数据类型的值需要被传值而不是传引用。传值的类型必须是定长的,并且它们的内部表达不能超过Datum类型(某些机器上是4字节,其他机器上是8字节)的尺寸。 + +- **alignment** + + 可选参数。该参数指定数据类型的存储对齐需求。如果被指定,必须是char、int2、int4或者double。默认是int4。 + + 允许的值等同于以1、2、4或8字节边界对齐。要注意变长类型的alignment参数必须至少为4,因为它们需要包含一个int4作为它们的第一个组成部分。 + +- **storage** + + 可选参数。该数据类型的存储策略。 + + 如果被指定,必须是plain、external、extended或者main。 默认是plain。 + + - plain指定该类型的数据将总是被存储在线内并且不会被压缩。(对定长类型只允许plain) + - extended 指定系统将首先尝试压缩一个长的数据值,并且将在数据仍然太长的情况下把值移出主表行。 + - external允许值被移出主表, 但是系统将不会尝试对它进行压缩。 + - main允许压缩,但是不鼓励把值移出主表(如果没有其他办法让行的大小变得合适,具有这种存储策略的数据项仍将被移出主表,但比起extended以及external项来,这种存储策略的数据项会被优先考虑保留在主表中)。 + + 除plain之外所有的storage值都暗示该数据类型的函数能处理被TOAST过的值。指定的值仅仅是决定一种可TOAST数据类型的列的默认TOAST存储策略,用户可以使用ALTER TABLE SET STORAGE为列选取其他策略。 + + +- **like\_type** + + 可选参数。与新类型具有相同表达的现有数据类型的名称。会从这个类型中复制internallength、 passedbyvalue、 alignment以及storage的值( 除非在这个CREATE TYPE命令的其他地方用显式说明覆盖)。 + + 当新类型的低层实现是以一种现有的类型为参考时,用这种方式指定表达特别有用。 + +- **category** + + 可选参数。这种类型的分类码(一个ASCII 字符)。 默认是“用户定义类型”的'U'。为了创建自定义分类, 也可以选择其他 ASCII字符。 + +- **preferred** + + 可选参数。如果这种类型是其类型分类中的优先类型则为TRUE,否则为FALSE。默认为假。在一个现有类型分类中创建一种新的优先类型要非常谨慎, 因为这可能会导致很大的改变。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >category和preferred参数可以被用来帮助控制在混淆的情况下应用哪一种隐式造型。每一种数据类型都属于一个用单个ASCII 字符命名的分类,并且每一种类型可以是其所属分类中的“首选”。当有助于解决重载函数或操作符时,解析器将优先造型到首选类型(但是只能从同类的其他类型造型)。对于没有隐式转换到或来自任意其他类型的类型,让这些设置保持默认即可。不过,对于有隐式转换的相关类型的组,把它们都标记为属于同一个类别并且选择一种或两种“最常用”的类型作为该类别的首选通常是很有用的。在把一种用户定义的类型增加到一个现有的内建类别(例如,数字或者字符串类型)中时,category参数特别有用。不过,也可以创建新的全部是用户定义类型的类别。对这样的类别,可选择除大写字母之外的任何ASCII 字符。 + +- **default** + + 可选参数。数据类型的默认值。如果被省略,默认值是空。 + + 如果用户希望该数据类型的列被默认为某种非空值,可以指定一个默认值。默认值可以用DEFAULT关键词指定(这样一个默认值可以被附加到一个特定列的显式DEFAULT子句覆盖)。 + +- **element** + + 可选参数。被创建的类型是一个数组,element指定了数组元素的类型。例如,要定义一个4字节整数的数组(int4), 应指定ELEMENT = int4。 + +- **delimiter** + + 可选参数。指定这种类型组成的数组中分隔值的定界符。 + + 可以把delimiter设置为一个特定字符,默认的定界符是逗号(,)。注意定界符是与数组元素类型相关的,而不是数组类型本身相关。 + +- **collatable** + + 可选参数。如果这个类型的操作可以使用排序规则信息,则为TRUE。默认为FALSE。 + + 如果collatable为TRUE,这种类型的列定义和表达式可能通过使用COLLATE子句携带有排序规则信息。在该类型上操作的函数的实现负责真正利用这些信息,仅把类型标记为可排序的并不会让它们自动地去使用这类信息。 + +- **lable** + + 可选参数。与枚举类型的一个值相关的文本标签,其值为长度不超过64个字符的非空字符串。 + + +>![](public_sys-resources/icon-note.gif) **说明:** +>在创建用户定义类型的时候, openGauss会自动创建一个与之关联的数组类型,其名称由该元素类型的名称前缀一个下划线组成。 + +## 示例 + +``` +--创建一种复合类型,建表并插入数据以及查询: +postgres=# CREATE TYPE compfoo AS (f1 int, f2 text); +postgres=# CREATE TABLE t1_compfoo(a int, b compfoo); +postgres=# CREATE TABLE t2_compfoo(a int, b compfoo); +postgres=# INSERT INTO t1_compfoo values(1,(1,'demo')); +postgres=# INSERT INTO t2_compfoo select * from t1_typ5; +postgres=# SELECT (b).f1 FROM t1_compfoo; +postgres=# SELECT * FROM t1_compfoo t1 join t2_compfoo t2 on (t1.b).f1=(t1.b).f1; + +--重命名数据类型: +postgres=# ALTER TYPE compfoo RENAME TO compfoo1; + +--要改变一个用户定义类型compfoo1的所有者为usr1: +CREATE USER usr1 PASSWORD 'Bigdata@123'; +postgres=# ALTER TYPE compfoo1 OWNER TO usr1; + +--把用户定义类型compfoo1的模式改变为usr1: +postgres=# ALTER TYPE compfoo1 SET SCHEMA usr1; + +给一个数据类型增加一个新的属性: +postgres=# ALTER TYPE usr1.compfoo1 ADD ATTRIBUTE f3 int; + +删除compfoo1类型: +postgres=# DROP TYPE usr1.compfoo1 cascade; + +删除相关表和用户: +postgres=# DROP TABLE t1_compfoo; +postgres=# DROP TABLE t2_compfoo; +postgres=# DROP SCHEMA usr1; +postgres=# DROP USER usr1; + +--创建一个枚举类型 +postgres=# CREATE TYPE bugstatus AS ENUM ('create', 'modify', 'closed'); + +--添加一个标签值 +postgres=# ALTER TYPE bugstatus ADD VALUE IF NOT EXISTS 'regress' BEFORE 'closed'; + +--重命名一个标签值 +postgres=# ALTER TYPE bugstatus RENAME VALUE 'create' BEFORE 'new'; + +--编译.so文件,并创建shell类型: +postgres=# CREATE TYPE complex; +--这个语句的作用是为要定义的类型创建了一个占位符,这样允许我们在定义其I/O函数时引用该类型。现在可以定义 I/O函数,需要注意的是在创建函数时function必须声明为NOT FENCED模式: +postgres=# CREATE FUNCTION +complex_in(cstring) + RETURNS complex + AS 'filename' + LANGUAGE C IMMUTABLE STRICT not fenced; + +postgres=# CREATE FUNCTION +complex_out(complex) + RETURNS cstring + AS 'filename' + LANGUAGE C IMMUTABLE STRICT not fenced; + +postgres=# CREATE FUNCTION +complex_recv(internal) + +RETURNS complex + +AS 'filename' + +LANGUAGE C IMMUTABLE STRICT not fenced; + +postgres=# CREATE FUNCTION +complex_send(complex) + +RETURNS bytea + +AS 'filename' + +LANGUAGE C IMMUTABLE STRICT not fenced; +--最后,提供该数据类型的完整定义: +postgres=# CREATE TYPE complex ( + +internallength = 16, + +input = complex_in, + +output = complex_out, + +receive = complex_recv, + +send = complex_send, + +alignment = double +); +``` + +input、output、receive及send函数对应的C函数定义如下: + +``` +--定义结构体Complex如下: +typedef struct Complex { + double x; + double y; +} Complex; + +--定义input函数: +PG_FUNCTION_INFO_V1(complex_in); + +Datum +complex_in(PG_FUNCTION_ARGS) +{ + char *str = PG_GETARG_CSTRING(0); + double x, + y; + Complex *result; + + if (sscanf(str, " ( %lf , %lf )", &x, &y) != 2) + ereport(ERROR, + (errcode(ERRCODE_INVALID_TEXT_REPRESENTATION), + errmsg("invalid input syntax for complex: \"%s\"", + str))); + + result = (Complex *) palloc(sizeof(Complex)); + result->x = x; + result->y = y; + PG_RETURN_POINTER(result); +} + +--定义output函数: +PG_FUNCTION_INFO_V1(complex_out); + +Datum +complex_out(PG_FUNCTION_ARGS) +{ + Complex *complex = (Complex *) PG_GETARG_POINTER(0); + char *result; + + result = (char *) palloc(100); + snprintf(result, 100, "(%g,%g)", complex->x, complex->y); + PG_RETURN_CSTRING(result); +} + +--定义receive函数: +PG_FUNCTION_INFO_V1(complex_recv); + +Datum +complex_recv(PG_FUNCTION_ARGS) +{ + StringInfo buf = (StringInfo) PG_GETARG_POINTER(0); + Complex *result; + + result = (Complex *) palloc(sizeof(Complex)); + result->x = pq_getmsgfloat8(buf); + result->y = pq_getmsgfloat8(buf); + PG_RETURN_POINTER(result); +} + +--定义send函数: +PG_FUNCTION_INFO_V1(complex_send); + +Datum +complex_send(PG_FUNCTION_ARGS) +{ + Complex *complex = (Complex *) PG_GETARG_POINTER(0); + StringInfoData buf; + + pq_begintypsend(&buf); + pq_sendfloat8(&buf, complex->x); + pq_sendfloat8(&buf, complex->y); + PG_RETURN_BYTEA_P(pq_endtypsend(&buf)); +} +``` + +## 相关链接 + +[ALTER TYPE](ALTER-TYPE.md#ZH-CN_TOPIC_0242370546),[DROP TYPE](DROP-TYPE.md#ZH-CN_TOPIC_0242370621) + diff --git a/content/zh/docs/Developerguide/CREATE USER.md b/content/zh/docs/Developerguide/CREATE USER.md new file mode 100644 index 000000000..d30c34c2a --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE USER.md @@ -0,0 +1,116 @@ +# CREATE USER + +## 功能描述 + +创建一个用户。 + +## 注意事项 + +- 通过CREATE USER创建的用户,默认具有LOGIN权限; +- 通过CREATE USER创建用户的同时系统会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA;其他数据库中,则不自动创建同名的SCHEMA;用户可使用CREATE SCHEMA命令,分别在其他数据库中,为该用户创建同名SCHEMA。 +- 系统管理员在普通用户同名schema下创建的对象,所有者为schema的同名用户(非系统管理员)。 + +## 语法格式 + +``` +CREATE USER user_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' | DISABLE }; +``` + +其中option子句用于设置权限及属性等信息。 + +``` +{SYSADMIN | NOSYSADMIN} + | {MONADMIN | NOMONADMIN} + | {OPRADMIN | NOOPRADMIN} + | {POLADMIN | NOPOLADMIN} + | {AUDITADMIN | NOAUDITADMIN} + | {CREATEDB | NOCREATEDB} + | {USEFT | NOUSEFT} + | {CREATEROLE | NOCREATEROLE} + | {INHERIT | NOINHERIT} + | {LOGIN | NOLOGIN} + | {REPLICATION | NOREPLICATION} + | {INDEPENDENT | NOINDEPENDENT} + | {VCADMIN | NOVCADMIN} + | CONNECTION LIMIT connlimit + | VALID BEGIN 'timestamp' + | VALID UNTIL 'timestamp' + | RESOURCE POOL 'respool' + | USER GROUP 'groupuser' + | PERM SPACE 'spacelimit' + | TEMP SPACE 'tmpspacelimit' + | SPILL SPACE 'spillspacelimit' + | NODE GROUP logic_cluster_name + | IN ROLE role_name [, ...] + | IN GROUP role_name [, ...] + | ROLE role_name [, ...] + | ADMIN role_name [, ...] + | USER role_name [, ...] + | SYSID uid + | DEFAULT TABLESPACE tablespace_name + | PROFILE DEFAULT + | PROFILE profile_name + | PGUSER +``` + +## 参数说明 + +- **user\_name** + + 用户名称。 + + 取值范围:字符串,要符合标识符的命名规范。且最大长度不超过63个字符。 + +- **password** + + 登录密码。 + + 密码规则如下: + + - 密码默认不少于8个字符。 + - 不能与用户名及用户名倒序相同。 + - 至少包含大写字母(A-Z),小写字母(a-z),数字(0-9),非字母数字字符(限定为\~!@\#$%^&\*\(\)-\_=+\\|\[\{\}\];:,<.\>/?)四类字符中的三类字符。 + - 创建用户时,应当使用双引号或单引号将用户密码括起来。 + + 取值范围:字符串。 + + +CREATE USER的其他参数值请参考[CREATE ROLE参数说明](CREATE-ROLE.md)。 + +## 示例 + +``` +--创建用户jim,登录密码为Bigdata@123。 +postgres=# CREATE USER jim PASSWORD 'Bigdata@123'; + +--下面语句与上面的等价。 +postgres=# CREATE USER kim IDENTIFIED BY 'Bigdata@123'; + +--如果创建有“创建数据库”权限的用户,则需要加CREATEDB关键字。 +postgres=# CREATE USER dim CREATEDB PASSWORD 'Bigdata@123'; + +--将用户jim的登录密码由Bigdata@123修改为Abcd@123。 +postgres=# ALTER USER jim IDENTIFIED BY 'Abcd@123' REPLACE 'Bigdata@123'; + +--为用户jim追加CREATEROLE权限。 +postgres=# ALTER USER jim CREATEROLE; + +--将enable_seqscan的值设置为on, 设置成功后,在下一会话中生效。 +postgres=# ALTER USER jim SET enable_seqscan TO on; + +--重置jim的enable_seqscan参数。 +postgres=# ALTER USER jim RESET enable_seqscan; + +--锁定jim帐户。 +postgres=# ALTER USER jim ACCOUNT LOCK; + +--删除用户。 +postgres=# DROP USER kim CASCADE; +postgres=# DROP USER jim CASCADE; +postgres=# DROP USER dim CASCADE; +``` + +## 相关链接 + +[ALTER USER](ALTER-USER.md#ZH-CN_TOPIC_0242370547),[CREATE ROLE](CREATE-ROLE.md),[DROP USER](DROP-USER.md) + diff --git a/content/zh/docs/Developerguide/CREATE VIEW.md b/content/zh/docs/Developerguide/CREATE VIEW.md new file mode 100644 index 000000000..e762093c0 --- /dev/null +++ b/content/zh/docs/Developerguide/CREATE VIEW.md @@ -0,0 +1,74 @@ +# CREATE VIEW + +## 功能描述 + +创建一个视图。视图与基本表不同,是一个虚拟的表。数据库中仅存放视图的定义,而不存放视图对应的数据,这些数据仍存放在原来的基本表中。若基本表中的数据发生变化,从视图中查询出的数据也随之改变。从这个意义上讲,视图就像一个窗口,透过它可以看到数据库中用户感兴趣的数据及变化。 + +## 注意事项 + +无。 + +## 语法格式 + +``` +CREATE [ OR REPLACE ] [ TEMP | TEMPORARY ] VIEW view_name [ ( column_name [, ...] ) ] + [ WITH ( {view_option_name [= view_option_value]} [, ... ] ) ] + AS query; +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>创建视图时使用WITH\(security\_barriers\)可以创建一个相对安全的视图,避免攻击者利用低成本函数的RAISE语句打印出隐藏的基表数据。 + +## 参数说明 + +- **OR REPLACE** + + 如果视图已存在,则重新定义。 + +- **TEMP | TEMPORARY** + + 创建临时视图。 + +- **view\_name** + + 要创建的视图名称。可以用模式修饰。 + + 取值范围:字符串,符合标识符命名规范。 + +- **column\_name** + + 可选的名称列表,用作视图的字段名。如果没有给出,字段名取自查询中的字段名。 + + 取值范围:字符串,符合标识符命名规范。 + +- **view\_option\_name \[= view\_option\_value\]** + + 该子句为视图指定一个可选的参数。 + + 目前view\_option\_name支持的参数仅有security\_barrier,当VIEW试图提供行级安全时,应使用该参数。 + + 取值范围:Boolean类型,TRUE、FALSE + +- **query** + + 为视图提供行和列的SELECT或VALUES语句。 + + +## 示例 + +``` +--创建字段spcname为pg_default组成的视图。 +postgres=# CREATE VIEW myView AS + SELECT * FROM pg_tablespace WHERE spcname = 'pg_default'; + +--查看视图。 +postgres=# SELECT * FROM myView ; + +--删除视图myView。 +postgres=# DROP VIEW myView; +``` + +## 相关链接 + +[ALTER VIEW](ALTER-VIEW.md#ZH-CN_TOPIC_0242370548),[DROP VIEW](DROP-VIEW.md#ZH-CN_TOPIC_0242370623) + diff --git a/content/zh/docs/Developerguide/DROP DATA SOURCE.md b/content/zh/docs/Developerguide/DROP DATA SOURCE.md new file mode 100644 index 000000000..24e55812a --- /dev/null +++ b/content/zh/docs/Developerguide/DROP DATA SOURCE.md @@ -0,0 +1,51 @@ +# DROP DATA SOURCE + +## **功能描述** + +删除一个Data Source对象。 + +## **注意事项** + +只有属主/系统管理员/初始用户才可以删除一个Data Source对象。 + +## **语法格式** + +``` +DROP DATA SOURCE [IF EXISTS] src_name [CASCADE | RESTRICT]; +``` + +## **参数说明** + +- **src\_name** + + 待删除的Data Source对象名称。 + + 取值范围:字符串,符合标识符命名规范。 + +- **IF EXISTS** + + 如果指定的Data Source不存在,则发出一个notice而不是报错。 + +- **CASCADE | RESTRICT** + - **CASCADE**:表示允许级联删除依赖于Data Source的对象 + - **RESTRICT**(缺省值):表示有依赖于该Data Source的对象存在,则该Data Source无法删除。 + + 目前Data Source对象没有被依赖的对象,CASCADE和RESTRICT效果一样,保留此选项是为了向后兼容性。 + + + +## **示例** + +``` +--创建Data Source对象。 +postgres=# CREATE DATA SOURCE ds_tst1; + +--删除Data Source对象。 +postgres=# DROP DATA SOURCE ds_tst1 CASCADE; +postgres=# DROP DATA SOURCE IF EXISTS ds_tst1 RESTRICT; +``` + +## **相关链接** + +**[CREATE DATA SOURCE](CREATE-DATA-SOURCE.md#ZH-CN_TOPIC_0242370564)**,[ALTER DATA SOURCE](ALTER-DATA-SOURCE.md#ZH-CN_TOPIC_0242370520) + diff --git a/content/zh/docs/Developerguide/DROP DATABASE.md b/content/zh/docs/Developerguide/DROP DATABASE.md new file mode 100644 index 000000000..5465771c7 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP DATABASE.md @@ -0,0 +1,52 @@ +# DROP DATABASE + +## 功能描述 + +删除一个数据库。 + +## 注意事项 + +- 只有数据库所有者有权限执行DROP DATABASE命令,系统管理员默认拥有此权限。 +- 不能对系统默认安装的三个数据库(POSTGRES、TEMPLATE0和TEMPLATE1)执行删除操作,系统做了保护。如果想查看当前服务中有哪几个数据库,可以用gsql的\\l命令查看。 +- 如果有用户正在与要删除的数据库连接,则删除操作失败。如果要查看当前存在哪些数据库连接,可以通过视图v$session查看。 +- 不能在事务块中执行DROP DATABASE命令。 +- 确定删除数据库前需要执行“CLEAN CONNECTION TO ALL FORCE FOR DATABASE XXXX;”命令,用于强制停止当前已有的用户连接及后台线程,防止因为有后台线程未完全退出而导致的删库失败问题。此处需要注意,强制停止后台线程可能导致当前数据库数据一致性问题,此命令仅在确定删库阶段执行。 +- 如果执行DROP DATABASE失败,事务回滚,需要再次执行一次DROP DATABASE IF EXISTS。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>DROP DATABASE一旦执行将无法撤销,请谨慎使用。 + +## 语法格式 + +``` +DROP DATABASE [ IF EXISTS ] database_name ; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的数据库不存在,则发出一个notice而不是抛出一个错误。 + +- **database\_name** + + 要删除的数据库名称。 + + 取值范围:字符串,已存在的数据库名称。 + + +## 示例 + +请参见CREATE DATABASE的[示例](CREATE-DATABASE.md#zh-cn_topic_0237122099_zh-cn_topic_0059778277_s6be7b8abbb4b4aceb9dae686434d672c)。 + +## 相关链接 + +[CREATE DATABASE](CREATE-DATABASE.md) + +## 优化建议 + +- drop database + + 不支持在事务中删除database。 + + diff --git a/content/zh/docs/Developerguide/DROP DIRECTORY.md b/content/zh/docs/Developerguide/DROP DIRECTORY.md new file mode 100644 index 000000000..498d82f84 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP DIRECTORY.md @@ -0,0 +1,39 @@ +# DROP DIRECTORY + +## 功能描述 + +删除指定的directory表项。 + +## 注意事项 + +默认只有初始化用户可以执行drop操作,当enable\_access\_server\_directory开启时(可参考[enable\_access\_server\_directory](操作审计.md#zh-cn_topic_0237124747_section4279164545515)),sysadmin权限的用户也可以执行drop操作。 + +## 语法格式 + +``` +DROP DIRECTORY [ IF EXISTS ] directory_name; +``` + +## 参数说明 + +- **directory\_name** + + 目录名称。 + + 取值范围:已经存在的目录名。 + + +## 示例 + +``` +--创建目录。 +postgres=# CREATE OR REPLACE DIRECTORY dir as '/tmp/'; + +--删除外部表。 +postgres=# DROP DIRECTORY dir; +``` + +## 相关链接 + +[CREATE DIRECTORY](CREATE-DIRECTORY.md#ZH-CN_TOPIC_0242370565),[ALTER DIRECTORY](ALTER-DIRECTORY.md#ZH-CN_TOPIC_0242370522) + diff --git a/content/zh/docs/Developerguide/DROP FUNCTION.md b/content/zh/docs/Developerguide/DROP FUNCTION.md new file mode 100644 index 000000000..4bdd02032 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP FUNCTION.md @@ -0,0 +1,54 @@ +# DROP FUNCTION + +## 功能描述 + +删除一个已存在的函数。 + +## 注意事项 + +如果函数中涉及对临时表相关操作,则无法使用DROP FUNCTION删除函数。 + +## 语法格式 + +``` +DROP FUNCTION [ IF EXISTS ] function_name +[ ( [ {[ argmode ] [ argname ] argtype} [, ...] ] ) [ CASCADE | RESTRICT ] ]; +``` + +## 参数说明 + +- **IF EXISTS** + + IF EXISTS表示,如果函数存在则执行删除操作,函数不存在也不会报错,只是发出一个notice。 + +- **function\_name** + + 要删除的函数名称。 + + 取值范围:已存在的函数名。 + +- **argmode** + + 函数参数的模式。 + +- **argname** + + 函数参数的名称。 + +- **argtype** + + 函数参数的类型 + +- **CASCADE | RESTRICT** + - CASCADE:级联删除依赖于函数的对象(比如操作符) 。 + - RESTRICT:如果有任何依赖对象存在,则拒绝删除该函数(缺省行为)。 + + +## 示例 + +请参见CREATE FUNCTION的[SQL参考](SQL参考.md)。 + +## 相关链接 + +[ALTER FUNCTION](ALTER-FUNCTION.md),[CREATE FUNCTION](CREATE-FUNCTION.md) + diff --git a/content/zh/docs/Developerguide/DROP GROUP.md b/content/zh/docs/Developerguide/DROP GROUP.md new file mode 100644 index 000000000..97d02cf9a --- /dev/null +++ b/content/zh/docs/Developerguide/DROP GROUP.md @@ -0,0 +1,26 @@ +# DROP GROUP + +## 功能描述 + +删除用户组。 + +DROP GROUP是DROP ROLE的别名。 + +## 注意事项 + +DROP GROUP是openGauss管理工具封装的内部接口,用来实现openGauss管理。该接口不建议用户直接使用,以免对openGauss状态造成影响。 + +## 语法格式 + +``` +DROP GROUP [ IF EXISTS ] group_name [, ...]; +``` + +## 参数说明 + +请参见DROP ROLE的[参数说明](DROP-ROLE.md#zh-cn_topic_0237122147_zh-cn_topic_0059778848_sabe550f7ed48409b8ffd1d88ca9f0725)。 + +## 相关链接 + +[CREATE GROUP](CREATE-GROUP.md#ZH-CN_TOPIC_0242370569),[ALTER GROUP](ALTER-GROUP.md#ZH-CN_TOPIC_0242370526),[DROP ROLE](DROP-ROLE.md#ZH-CN_TOPIC_0242370611) + diff --git a/content/zh/docs/Developerguide/DROP INDEX.md b/content/zh/docs/Developerguide/DROP INDEX.md new file mode 100644 index 000000000..978df4b09 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP INDEX.md @@ -0,0 +1,50 @@ +# DROP INDEX + +## 功能描述 + +删除索引。 + +## 注意事项 + +只有索引的所有者有权限执行DROP INDEX命令,系统管理员默认拥有此权限。 + +## 语法格式 + +``` +DROP INDEX [ CONCURRENTLY ] [ IF EXISTS ] + index_name [, ...] [ CASCADE | RESTRICT ]; +``` + +## 参数说明 + +- **CONCURRENTLY** + + 以不加锁的方式删除索引。删除索引时,一般会阻塞其他语句对该索引所依赖表的访问。加此关键字,可实现删除过程中不做阻塞。 + + 此选项只能指定一个索引的名称, 并且CASCADE选项不支持。 + + 普通DROP INDEX命令可以在事务内执行,但是DROP INDEX CONCURRENTLY不可以在事务内执行。 + +- **IF EXISTS** + + 如果指定的索引不存在,则发出一个notice而不是抛出一个错误。 + +- **index\_name** + + 要删除的索引名。 + + 取值范围:已存在的索引。 + +- **CASCADE | RESTRICT** + - CASCADE:表示允许级联删除依赖于该索引的对象。 + - RESTRICT(缺省值):表示有依赖与此索引的对象存在,则该索引无法被删除。 + + +## 示例 + +请参见CREATE INDEX的[示例](CREATE-INDEX.md#zh-cn_topic_0237122106_zh-cn_topic_0059777455_s985289833081489e9d77c485755bd362)。 + +## 相关链接 + +[ALTER INDEX](ALTER-INDEX.md#ZH-CN_TOPIC_0242370527),[CREATE INDEX](CREATE-INDEX.md) + diff --git a/content/zh/docs/Developerguide/DROP OWNED.md b/content/zh/docs/Developerguide/DROP OWNED.md new file mode 100644 index 000000000..a60d4f92f --- /dev/null +++ b/content/zh/docs/Developerguide/DROP OWNED.md @@ -0,0 +1,34 @@ +# DROP OWNED + +## 功能描述 + +删除一个数据库角色所拥有的数据库对象。 + +## 注意事项 + +- 所有该角色在当前数据库里和共享对象(数据库,表空间) 上的所有对象上的权限都将被撤销。 +- DROP OWNED常常被用来为移除一个或者多个角色做准备。因为DROP OWNED只影响当前数据库中的对象,通常需要在包含将被移除角色所拥有的对象的每一个数据库中都执行这个命令。 +- 使用CASCADE选项可能导致这个命令递归去删除由其他用户所拥有的对象。 +- 角色所拥有的数据库、表空间将不会被移除。 + +## 语法格式 + +``` +DROP OWNED BY name [, ...] [ CASCADE | RESTRICT ]; +``` + +## 参数说明 + +- **name** + + 角色名。 + +- **CASCADE | RESTRICT** + - CASCADE:级联删除所有依赖于被删除对象的对象。 + - RESTRICT(缺省值):拒绝删除那些有任何依赖对象存在的对象。 + + +## 相关链接 + +[REASSIGN OWNED](REASSIGN-OWNED.md#ZH-CN_TOPIC_0242370637) , [DROP ROLE](DROP-ROLE.md#ZH-CN_TOPIC_0242370611) + diff --git a/content/zh/docs/Developerguide/DROP PROCEDURE.md b/content/zh/docs/Developerguide/DROP PROCEDURE.md new file mode 100644 index 000000000..39f610116 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP PROCEDURE.md @@ -0,0 +1,33 @@ +# DROP PROCEDURE + +## 功能描述 + +删除已存在的存储过程。 + +## 注意事项 + +无。 + +## 语法格式 + +``` +DROP PROCEDURE [ IF EXISTS ] procedure_name ; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的存储过程不存在,发出一个notice而不是抛出一个错误。 + +- **procedure\_name** + + 要删除的存储过程名称。 + + 取值范围:已存在的存储过程名。 + + +## 相关链接 + +[CREATE PROCEDURE](CREATE-PROCEDURE.md) + diff --git a/content/zh/docs/Developerguide/DROP ROLE.md b/content/zh/docs/Developerguide/DROP ROLE.md new file mode 100644 index 000000000..7d92f25bc --- /dev/null +++ b/content/zh/docs/Developerguide/DROP ROLE.md @@ -0,0 +1,37 @@ +# DROP ROLE + +## 功能描述 + +删除指定的角色。 + +## 注意事项 + +无。 + +## 语法格式 + +``` +DROP ROLE [ IF EXISTS ] role_name [, ...]; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的角色不存在,则发出一个notice而不是抛出一个错误。 + +- **role\_name** + + 要删除的角色名称。 + + 取值范围:已存在的角色。 + + +## 示例 + +请参见CREATE ROLE的[示例](CREATE-ROLE.md#zh-cn_topic_0237122112_zh-cn_topic_0059778189_s0dea2f90b8474387aff0ab3f366a611e)。 + +## 相关链接 + +[CREATE ROLE](CREATE-ROLE.md),[ALTER ROLE](ALTER-ROLE.md#ZH-CN_TOPIC_0242370532),[SET ROLE](SET-ROLE.md#ZH-CN_TOPIC_0242370652) + diff --git a/content/zh/docs/Developerguide/DROP ROW LEVEL SECURITY POLICY.md b/content/zh/docs/Developerguide/DROP ROW LEVEL SECURITY POLICY.md new file mode 100644 index 000000000..5bcd44c5a --- /dev/null +++ b/content/zh/docs/Developerguide/DROP ROW LEVEL SECURITY POLICY.md @@ -0,0 +1,53 @@ +# DROP ROW LEVEL SECURITY POLICY + +## 功能描述 + +删除表上某个行访问控制策略。 + +## 注意事项 + +仅表的所有者或者管理员用户才能删除表的行访问控制策略。 + +## 语法格式 + +``` +DROP [ ROW LEVEL SECURITY ] POLICY [ IF EXISTS ] policy_name ON table_name [ CASCADE | RESTRICT ] +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的行访问控制策略不存在,发出一个notice而不是抛出一个错误。 + +- **policy\_name** + + 要删除的行访问控制策略的名称。 + + - table\_name + + 行访问控制策略所在的数据表名。 + + - CASCADE/RESTRICT + + 仅适配此语法,无对象依赖于该行访问控制策略,CASCADE和RESTRICT效果相同。 + + + +## 示例 + +``` +--创建数据表all_data +postgres=# CREATE TABLE all_data(id int, role varchar(100), data varchar(100)); + +--创建行访问控制策略 +postgres=# CREATE ROW LEVEL SECURITY POLICY all_data_rls ON all_data USING(role = CURRENT_USER); + +--删除行访问控制策略 +postgres=# DROP ROW LEVEL SECURITY POLICY all_data_rls ON all_data; +``` + +## 相关链接 + +[ALTER ROW LEVEL SECURITY POLICY](ALTER-ROW-LEVEL-SECURITY-POLICY.md),[CREATE ROW LEVLEL SECURITY POLICY](CREATE-ROW-LEVLEL-SECURITY-POLICY.md) + diff --git a/content/zh/docs/Developerguide/DROP SCHEMA.md b/content/zh/docs/Developerguide/DROP SCHEMA.md new file mode 100644 index 000000000..3d4549f00 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP SCHEMA.md @@ -0,0 +1,47 @@ +# DROP SCHEMA + +## 功能描述 + +从数据库中删除模式。 + +## 注意事项 + +只有模式的所有者有权限执行DROP SCHEMA命令,系统管理员默认拥有此权限。 + +## 语法格式 + +``` +DROP SCHEMA [ IF EXISTS ] schema_name [, ...] [ CASCADE | RESTRICT ]; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的模式不存在,发出一个notice而不是抛出一个错误。 + +- **schema\_name** + + 模式的名称。 + + 取值范围:已存在模式名。 + +- **CASCADE | RESTRICT** + - CASCADE:自动删除包含在模式中的对象。 + - RESTRICT:如果模式包含任何对象,则删除失败(缺省行为)。 + + +>![](public_sys-resources/icon-notice.gif) **须知:** +>不要随意删除pg\_temp或pg\_toast\_temp开头的模式,这些模式是系统内部使用的,如果删除,可能导致无法预知的结果。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>无法删除当前模式。如果要删除当前模式,须切换到其他模式下。 + +## 示例 + +请参见CREATE SCHEMA的[示例](CREATE-SCHEMA.md#zh-cn_topic_0237122113_zh-cn_topic_0059777945_s05e72232af5e4507aad1511c025d7617)。 + +## 相关链接 + +[ALTER SCHEMA](ALTER-SCHEMA.md#ZH-CN_TOPIC_0242370534),[CREATE SCHEMA](CREATE-SCHEMA.md#ZH-CN_TOPIC_0242370577)。 + diff --git a/content/zh/docs/Developerguide/DROP SEQUENCE.md b/content/zh/docs/Developerguide/DROP SEQUENCE.md new file mode 100644 index 000000000..2e8beb3ae --- /dev/null +++ b/content/zh/docs/Developerguide/DROP SEQUENCE.md @@ -0,0 +1,49 @@ +# DROP SEQUENCE + +## 功能描述 + +从当前数据库里删除序列。 + +## 注意事项 + +只有序列的所有者或者系统管理员才能删除。 + +## 语法格式 + +``` +DROP SEQUENCE [ IF EXISTS ] {[schema.]sequence_name} [ , ... ] [ CASCADE | RESTRICT ]; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的序列不存在,则发出一个notice而不是抛出一个错误。 + +- **name** + + 序列名称。 + +- **CASCADE** + + 级联删除依赖序列的对象。 + +- **RESTRICT** + + 如果存在任何依赖的对象,则拒绝删除序列。此项是缺省值。 + + +## 示例 + +``` +--创建一个名为serial的递增序列,从101开始。 +postgres=# CREATE SEQUENCE serial START 101; + +--删除序列。 +postgres=# DROP SEQUENCE serial; +``` + +## 相关链接 + +[ALTER SEQUENCE](ALTER-SEQUENCE.md#ZH-CN_TOPIC_0242370535), [DROP SEQUENCE](DROP-SEQUENCE.md#ZH-CN_TOPIC_0242370613) + diff --git a/content/zh/docs/Developerguide/DROP TABLE.md b/content/zh/docs/Developerguide/DROP TABLE.md new file mode 100644 index 000000000..b2979d014 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP TABLE.md @@ -0,0 +1,44 @@ +# DROP TABLE + +## 功能描述 + +删除指定的表。 + +## 注意事项 + +DROP TABLE会强制删除指定的表,删除表后,依赖该表的索引会被删除,而使用到该表的函数和存储过程将无法执行。删除分区表,会同时删除分区表中的所有分区。 + +## 语法格式 + +``` +DROP TABLE [ IF EXISTS ] + { [schema.]table_name } [, ...] [ CASCADE | RESTRICT ]; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的表不存在,则发出一个notice而不是抛出一个错误。 + +- **schema** + + 模式名称。 + +- **table\_name** + + 表名称。 + +- **CASCADE | RESTRICT** + - CASCADE:级联删除依赖于表的对象(比如视图)。 + - RESTRICT(缺省项):如果存在依赖对象,则拒绝删除该表。这个是缺省。 + + +## 示例 + +请参考CREATE TABLE的[示例](CREATE-TABLE.md#zh-cn_topic_0237122117_zh-cn_topic_0059778169_s86758dcf05d442d2a9ebd272e76ed1b8)。 + +## 相关链接 + +[ALTER TABLE](ALTER-TABLE.md),[CREATE TABLE](CREATE-TABLE.md) + diff --git a/content/zh/docs/Developerguide/DROP TABLESPACE.md b/content/zh/docs/Developerguide/DROP TABLESPACE.md new file mode 100644 index 000000000..3e10c736a --- /dev/null +++ b/content/zh/docs/Developerguide/DROP TABLESPACE.md @@ -0,0 +1,48 @@ +# DROP TABLESPACE + +## 功能描述 + +删除一个表空间。 + +## 注意事项 + +- 只有表空间所有者有权限执行DROP TABLESPACE命令,系统管理员默认拥有此权限。 +- 在删除一个表空间之前,表空间里面不能有任何数据库对象,否则会报错。 +- DROP TABLESPACE不支持回滚,因此,不能出现在事务块内部。 +- 执行DROP TABLESPACE操作时,如果有另外的会话执行\\db查询操作,可能会由于tablespace事务的原因导致查询失败,请重新执行\\db查询操作。 +- 如果执行DROP TABLESPACE失败,需要再次执行一次DROP TABLESPACE IF EXISTS。 + +## 语法格式 + +``` +DROP TABLESPACE [ IF EXISTS ] tablespace_name; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的表空间不存在,则发出一个notice而不是抛出一个错误。 + +- **tablespace\_name** + + 表空间的名称。 + + 取值范围:已存在的表空间的名称。 + + +## 示例 + +请参见CREATE TABLESPACE的[示例](CREATE-TABLESPACE.md#zh-cn_topic_0237122120_zh-cn_topic_0059777670_s4e5e97caa377440d87fad0d49b56323e)。 + +## 相关链接 + +[ALTER TABLESPACE](ALTER-TABLESPACE.md#ZH-CN_TOPIC_0242370542), [CREATE TABLESPACE](CREATE-TABLESPACE.md) + +## 优化建议 + +- drop database + + 不支持在事务中删除database。 + + diff --git a/content/zh/docs/Developerguide/DROP TEXT SEARCH CONFIGURATION.md b/content/zh/docs/Developerguide/DROP TEXT SEARCH CONFIGURATION.md new file mode 100644 index 000000000..bbf486636 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP TEXT SEARCH CONFIGURATION.md @@ -0,0 +1,43 @@ +# DROP TEXT SEARCH CONFIGURATION + +## 功能描述 + +删除已有文本搜索配置。 + +## 注意事项 + +要执行这个命令,用户必须是该配置的所有者。 + +## 语法格式 + +``` +DROP TEXT SEARCH CONFIGURATION [ IF EXISTS ] name [ CASCADE | RESTRICT ]; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的文本搜索配置不存在,那么发出一个notice而不是抛出一个错误。 + +- **name** + + 要删除的文本搜索配置名称(可有模式修饰)。 + +- **CASCADE** + + 级联删除依赖文本搜索配置的对象。 + +- **RESTRICT** + + 若有任何对象依赖文本搜索配置则拒绝删除它。这是默认情况。 + + +## 示例 + +请参见CREATE TEXT SEARCH CONFIGURATION的[示例](CREATE-TEXT-SEARCH-CONFIGURATION.md#zh-cn_topic_0237122121_zh-cn_topic_0059777835_sc3a4aef5c0c0420eaf5a2e67097004a2)。 + +## 相关链接 + +[ALTER TEXT SEARCH CONFIGURATION](ALTER-TEXT-SEARCH-CONFIGURATION.md#ZH-CN_TOPIC_0242370543), [CREATE TEXT SEARCH CONFIGURATION](CREATE-TEXT-SEARCH-CONFIGURATION.md#ZH-CN_TOPIC_0242370585) + diff --git a/content/zh/docs/Developerguide/DROP TEXT SEARCH DICTIONARY.md b/content/zh/docs/Developerguide/DROP TEXT SEARCH DICTIONARY.md new file mode 100644 index 000000000..504a568b3 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP TEXT SEARCH DICTIONARY.md @@ -0,0 +1,52 @@ +# DROP TEXT SEARCH DICTIONARY + +## 功能描述 + +删除全文检索词典。 + +## 注意事项 + +- 预定义词典不支持DROP操作。 +- 只有词典的所有者可以执行DROP操作,系统管理员默认拥有此权限。 +- 谨慎执行DROP...CASCADE操作,该操作将级联删除使用该词典的文本搜索配置(TEXT SEARCH CONFIGURATION)。 + +## 语法格式 + +``` +DROP TEXT SEARCH DICTIONARY [ IF EXISTS ] name [ CASCADE | RESTRICT ] +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的全文检索词典不存在,那么发出一个Notice而不是报错。 + +- **name** + + 要删除的词典名称(可指定模式名,否则默认在当前模式下)。 + + 取值范围:已存在的词典名。 + +- **CASCADE** + + 自动删除依赖于该词典的对象,并依次删除依赖于这些对象的所有对象。 + + 如果存在任何一个使用该词典的文本搜索配置,此DROP命令将不会成功。可添加CASCADE以删除引用该词典的所有文本搜索配置以及词典。 + +- **RESTRICT** + + 如果任何对象依赖词典,则拒绝删除该词典。这是缺省值。 + + +## 示例 + +``` +--删除词典english +DROP TEXT SEARCH DICTIONARY english; +``` + +## 相关链接 + +[ALTER TEXT SEARCH DICTIONARY](ALTER-TEXT-SEARCH-DICTIONARY.md#ZH-CN_TOPIC_0242370544),[CREATE TEXT SEARCH DICTIONARY](CREATE-TEXT-SEARCH-DICTIONARY.md#ZH-CN_TOPIC_0242370586) + diff --git a/content/zh/docs/Developerguide/DROP TRIGGER.md b/content/zh/docs/Developerguide/DROP TRIGGER.md new file mode 100644 index 000000000..770b536e4 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP TRIGGER.md @@ -0,0 +1,47 @@ +# DROP TRIGGER + +## 功能描述 + +删除触发器。 + +## 注意事项 + +只有触发器的所有者可以执行DROP TRIGGER操作,系统管理员默认拥有此权限。 + +## 语法格式 + +``` +DROP TRIGGER [ IF EXISTS ] trigger_name ON table_name [ CASCADE | RESTRICT ]; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的触发器不存在,则发出一个notice而不是抛出一个错误。 + +- **trigger\_name** + + 要删除的触发器名称。 + + 取值范围:已存在的触发器。 + +- **table\_name** + + 要删除的触发器所在的表名称。 + + 取值范围:已存在的含触发器的表。 + +- **CASCADE | RESTRICT** + - CASCADE:级联删除依赖此触发器的对象。 + - RESTRICT:如果有依赖对象存在,则拒绝删除此触发器。此选项为缺省值。 + + +## 示例 + +请参见[CREATE TRIGGER](CREATE-TRIGGER.md)的示例。 + +## 相关链接 + +[CREATE TRIGGER](CREATE-TRIGGER.md),[ALTER TRIGGER](ALTER-TRIGGER.md#ZH-CN_TOPIC_0242370545),[ALTER TABLE](ALTER-TABLE.md) + diff --git a/content/zh/docs/Developerguide/DROP TYPE.md b/content/zh/docs/Developerguide/DROP TYPE.md new file mode 100644 index 000000000..3942fe79e --- /dev/null +++ b/content/zh/docs/Developerguide/DROP TYPE.md @@ -0,0 +1,39 @@ +# DROP TYPE + +## 功能描述 + +删除一个用户定义的数据类型。只有类型所有者才有删除权限。 + +## 语法格式 + +``` +DROP TYPE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ] +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的类型不存在,那么发出一个notice而不是抛出一个错误。 + +- **name** + + 要删除的类型名\(可以有模式修饰\)。 + +- **CASCADE** + + 级联删除依赖该类型的对象\(比如字段、函数、操作符等\) + + **RESTRICT** + + 如果有依赖对象,则拒绝删除该类型(缺省行为)。 + + +## 示例 + +请参考CREATE TYPE的[示例](CREATE-TYPE.md#zh-cn_topic_0237122124_zh-cn_topic_0059779377_s66a0b4a6a1df4ba4a116c6c565a0fe9d)。 + +## 相关链接 + +[CREATE TYPE](CREATE-TYPE.md#ZH-CN_TOPIC_0242370588),[CREATE TYPE](CREATE-TYPE.md#ZH-CN_TOPIC_0242370588) + diff --git a/content/zh/docs/Developerguide/DROP USER.md b/content/zh/docs/Developerguide/DROP USER.md new file mode 100644 index 000000000..2be27d000 --- /dev/null +++ b/content/zh/docs/Developerguide/DROP USER.md @@ -0,0 +1,54 @@ +# DROP USER + +## 功能描述 + +删除用户,同时会删除同名的schema。 + +## 注意事项 + +- 须使用CASCADE级联删除依赖用户的对象(除数据库外)。当删除用户的级联对象时,如果级联对象处于锁定状态,则此级联对象无法被删除,直到对象被解锁或锁定级联对象的进程被杀死。 +- 在openGauss中,存在一个配置参数enable\_kill\_query,此参数在配置文件postgresql.conf中。此参数影响级联删除用户对象的行为: + - 当参数enable\_kill\_query为on ,且使用CASCADE模式删除用户时,会自动kill锁定用户级联对象的进程,并删除用户。 + - 当参数enable\_kill\_query为off,且使用CASCADE模式删除用户时,会等待锁定级联对象的进程结束之后再删除用户。 + +- 在数据库中删除用户时,如果依赖用户的对象在其他数据库中或者依赖用户的对象是其他数据库,请用户先手动删除其他数据库中的依赖对象或直接删除依赖数据库,再删除用户。即drop user不支持跨数据库进行级联删除。 +- 在多租户场景下,删除组用户时,业务用户也会同时被删除,如果指定CASCADE级联删除,那么删除业务用户时同时也指定CASCADE。如果在删除某个用户失败时,会报错,同时其他用户也无法成功删除。 +- 如果该用户被DATA SOURCE对象依赖时,无法直接级联删除该用户,需要手动删除对应的DATA SOURCE对象之后再删除该用户。 + +## 语法格式 + +``` +DROP USER [ IF EXISTS ] user_name [, ...] [ CASCADE | RESTRICT ]; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的用户不存在,发出一个notice而不是抛出一个错误。 + +- **user\_name** + + 待删除的用户名。 + + 取值范围:已存在的用户名。 + +- **CASCADE | RESTRICT** + - CASCADE:级联删除依赖用户的对象。 + - RESTRICT:如果用户还有任何依赖的对象,则拒绝删除该用户(缺省行为)。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >在openGauss中,存在一个配置参数enable\_kill\_query,此参数在配置文件postgresql.conf中。此参数影响级联删除用户对象的行为: + >- 当参数enable\_kill\_query为on ,且使用CASCADE模式删除用户时,会自动kill锁定用户级联对象的进程,并删除用户。 + >- 当参数enable\_kill\_query为off,且使用CASCADE模式删除用户时,会等待锁定级联对象的进程结束之后再删除用户。 + + + +## 示例 + +请参考CREATE USER的[示例](CREATE-USER.md#zh-cn_topic_0237122125_zh-cn_topic_0059778166_sfbca773f5bcd4799b3ea668b3eb074fa)。 + +## 相关链接 + +[ALTER USER](ALTER-USER.md),[CREATE USER](CREATE-USER.md) + diff --git a/content/zh/docs/Developerguide/DROP VIEW.md b/content/zh/docs/Developerguide/DROP VIEW.md new file mode 100644 index 000000000..868ef177c --- /dev/null +++ b/content/zh/docs/Developerguide/DROP VIEW.md @@ -0,0 +1,41 @@ +# DROP VIEW + +## 功能描述 + +数据库中强制删除已有的视图。 + +## 注意事项 + +只有视图的所有者有权限执行DROP VIEW的命令,系统管理员默认拥有此权限。 + +## 语法格式 + +``` +DROP VIEW [ IF EXISTS ] view_name [, ...] [ CASCADE | RESTRICT ]; +``` + +## 参数说明 + +- **IF EXISTS** + + 如果指定的视图不存在,则发出一个notice而不是抛出一个错误。 + +- **view\_name** + + 要删除的视图名称。 + + 取值范围:已存在的视图。 + +- **CASCADE | RESTRICT** + - CASCADE:级联删除依赖此视图的对象(比如其他视图)。 + - RESTRICT:如果有依赖对象存在,则拒绝删除此视图。此选项为缺省值。 + + +## 示例 + +请参见CREATE VIEW的[示例](CREATE-VIEW.md#zh-cn_topic_0237122126_zh-cn_topic_0059779377_s66a0b4a6a1df4ba4a116c6c565a0fe9d)。 + +## 相关链接 + +[ALTER VIEW](ALTER-VIEW.md#ZH-CN_TOPIC_0242370548),[CREATE VIEW](CREATE-VIEW.md#ZH-CN_TOPIC_0242370590) + diff --git a/content/zh/docs/Developerguide/EXPLAIN PLAN.md b/content/zh/docs/Developerguide/EXPLAIN PLAN.md new file mode 100644 index 000000000..e0cd1b3af --- /dev/null +++ b/content/zh/docs/Developerguide/EXPLAIN PLAN.md @@ -0,0 +1,79 @@ +# EXPLAIN PLAN + +## 功能描述 + +通过EXPLAIN PLAN命令可以将查询执行的计划信息存储于PLAN\_TABLE表中。与EXPLAIN命令不同的是,EXPLAIN PLAN仅将计划信息进行存储,而不会打印到屏幕。 + +## 语法格式 + +``` +EXPLAIN PLAN +[ SET STATEMENT_ID = string ] +FOR statement ; +``` + +## 参数说明 + +- EXPLAIN中的PLAN选项表示需要将计划信息存储于PLAN\_TABLE中,存储成功将返回“EXPLAIN SUCCESS”。 +- STATEMENT\_ID用户可以对查询设置标签,输入的标签信息也将存储于PLAN\_TABLE中。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >用户在执行EXPLAIN PLAN时,如果没有进行SET STATEMENT\_ID,则默认为空值。同时,用户可输入的STATEMENT\_ID最大长度为30个字节,超过长度将会产生报错。 + + +## 注意事项 + +- EXPLAIN PLAN不支持在数据库节点上执行。 +- 对于执行错误的SQL无法进行计划信息的收集。 +- PLAN\_TABLE中的数据是session级生命周期并且session隔离和用户隔离,用户只能看到当前session、当前用户的数据。 + +## 示例 1 + +使用EXPLAIN PLAN收集SQL语句的执行计划,通常包括以下步骤: + +1. 执行EXPLAN PLAN。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >执行EXPLAIN PLAN 后会将计划信息自动存储于PLAN\_TABLE中,不支持对PLAN\_TABLE进行INSERT、UPDATE、ANALYZE等操作。 + >PLAN\_TABLE详细介绍见[PLAN\_TABLE](PLAN_TABLE.md)。 + + ``` + explain plan set statement_id='TPCH-Q4' for + select + o_orderpriority, + count(*) as order_count + from + orders + where + o_orderdate >= '1993-07-01'::date + and o_orderdate < '1993-07-01'::date + interval '3 month' + and exists ( + select + * + from + lineitem + where + l_orderkey = o_orderkey + and l_commitdate < l_receiptdate + ) + group by + o_orderpriority + order by + o_orderpriority; + ``` + +2. 查询PLAN\_TABLE。 + + ``` + SELECT * FROM PLAN_TABLE; + ``` + + ![](figures/文档.png) + +3. 清理PLAN\_TABLE表中的数据。 + + ``` + DELETE FROM PLAN_TABLE WHERE xxx; + ``` + + diff --git a/content/zh/docs/Developerguide/MERGE INTO.md b/content/zh/docs/Developerguide/MERGE INTO.md new file mode 100644 index 000000000..5ab5278bd --- /dev/null +++ b/content/zh/docs/Developerguide/MERGE INTO.md @@ -0,0 +1,136 @@ +# MERGE INTO + +## 功能描述 + +通过MERGE INTO语句,将目标表和源表中数据针对关联条件进行匹配,若关联条件匹配时对目标表进行UPDATE,无法匹配时对目标表执行INSERT。此语法可以很方便地用来合并执行UPDATE和INSERT,避免多次执行。 + +## 注意事项 + +- 进行MERGE INTO操作的用户需要同时拥有目标表的UPDATE和INSERT权限,以及源表的SELECT权限。 +- 不支持重分布过程中MERGE INTO。 + +## 语法格式 + +``` +MERGE INTO table_name [ [ AS ] alias ] +USING { { table_name | view_name } | subquery } [ [ AS ] alias ] +ON ( condition ) +[ + WHEN MATCHED THEN + UPDATE SET { column_name = { expression | DEFAULT } | + ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] + [ WHERE condition ] +] +[ + WHEN NOT MATCHED THEN + INSERT { DEFAULT VALUES | + [ ( column_name [, ...] ) ] VALUES ( { expression | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] } +]; +``` + +## 参数说明 + +- **INTO子句** + + 指定正在更新或插入的目标表。目标表为复制表时,暂不支持目标表中某列默认值为volatile函数(如自增列)。 + + - **talbe\_name** + + 目标表的表名。 + + - **alias** + + 目标表的别名。 + + 取值范围:字符串,符合标识符命名规范。 + + +- **USING子句** + + 指定源表,源表可以为表、视图或子查询。目标表为复制表时,暂不支持USING子句中包含非复制表。 + +- **ON子句** + + 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。 + +- **WHEN MATCHED子句** + + 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。 + + 不支持更新分布列。不支持更新系统表、系统列。 + +- **WHEN NOT MATCHED子句** + + 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。 + + 不支持INSERT子句中包含多个VALUES。 + + WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省,不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。 + +- **DEFAULT** + + 用对应字段的缺省值填充该字段。 + + 如果没有缺省值,则为NULL。 + +- **WHERE condition** + + UPDATE子句和INSERT子句的条件,只有在条件满足时才进行更新操作,可缺省。不支持WHERE条件中引用系统列。 + + +## 示例 + +``` +-- 创建目标表products和源表newproducts,并插入数据 +postgres=# CREATE TABLE products +( +product_id INTEGER, +product_name VARCHAR2(60), +category VARCHAR2(60) +); + +postgres=# INSERT INTO products VALUES (1501, 'vivitar 35mm', 'electrncs'); +postgres=# INSERT INTO products VALUES (1502, 'olympus is50', 'electrncs'); +postgres=# INSERT INTO products VALUES (1600, 'play gym', 'toys'); +postgres=# INSERT INTO products VALUES (1601, 'lamaze', 'toys'); +postgres=# INSERT INTO products VALUES (1666, 'harry potter', 'dvd'); + +postgres=# CREATE TABLE newproducts +( +product_id INTEGER, +product_name VARCHAR2(60), +category VARCHAR2(60) +); + +postgres=# INSERT INTO newproducts VALUES (1502, 'olympus camera', 'electrncs'); +postgres=# INSERT INTO newproducts VALUES (1601, 'lamaze', 'toys'); +postgres=# INSERT INTO newproducts VALUES (1666, 'harry potter', 'toys'); +postgres=# INSERT INTO newproducts VALUES (1700, 'wait interface', 'books'); + +-- 进行MERGE INTO操作 +postgres=# MERGE INTO products p +USING newproducts np +ON (p.product_id = np.product_id) +WHEN MATCHED THEN + UPDATE SET p.product_name = np.product_name, p.category = np.category WHERE p.product_name != 'play gym' +WHEN NOT MATCHED THEN + INSERT VALUES (np.product_id, np.product_name, np.category) WHERE np.category = 'books'; +MERGE 4 + +-- 查询更新后的结果 +postgres=# SELECT * FROM products ORDER BY product_id; + product_id | product_name | category +------------+----------------+----------- + 1501 | vivitar 35mm | electrncs + 1502 | olympus camera | electrncs + 1600 | play gym | toys + 1601 | lamaze | toys + 1666 | harry potter | toys + 1700 | wait interface | books +(6 rows) + +-- 删除表 +postgres=# DROP TABLE products; +postgres=# DROP TABLE newproducts; +``` + diff --git a/content/zh/docs/Developerguide/PREPARE TRANSACTION.md b/content/zh/docs/Developerguide/PREPARE TRANSACTION.md new file mode 100644 index 000000000..4e3d538bd --- /dev/null +++ b/content/zh/docs/Developerguide/PREPARE TRANSACTION.md @@ -0,0 +1,37 @@ +# PREPARE TRANSACTION + +## 功能描述 + +为当前事务做两阶段提交的准备。 + +在命令之后,事务就不再和当前会话关联了;它的状态完全保存在磁盘上,它被提交成功的可能性非常高,即使是在请求提交之前数据库发生了崩溃也如此。 + +一旦准备好了,一个事务就可以在稍后用[COMMIT PREPARED](COMMIT-PREPARED.md#ZH-CN_TOPIC_0242370559)或 [ROLLBACK PREPARED](ROLLBACK-PREPARED.md#ZH-CN_TOPIC_0242370645)命令分别进行提交或者回滚。这些命令可以从任何会话中发出,而不光是最初执行事务的那个会话。 + +从发出命令的会话的角度来看,PREPARE TRANSACTION不同于ROLLBACK:在执行它之后,就不再有活跃的当前事务了,并且预备事务的效果无法见到 \(在事务提交的时候其效果会再次可见\)。 + +如果PREPARE TRANSACTION因为某些原因失败,那么它就会变成一个ROLLBACK,当前事务被取消。 + +## 注意事项 + +- 事务功能由数据库自动维护,不应显式使用事务功能。 +- 在运行PREPARE TRANSACTION命令时,必须在postgresql.conf配置文件中增大max\_prepared\_transactions的数值。建议至少将其设置为等于max\_connections,这样每个会话都可以有一个等待中的预备事务。 + +## 语法格式 + +``` +PREPARE TRANSACTION transaction_id; +``` + +## 参数说明 + +**transaction\_id** + +待提交事务的标识符,用于后面在COMMIT PREPARED或ROLLBACK PREPARED的时候标识这个事务。它不能和任何当前预备事务已经使用了的标识符同名。 + +取值范围:标识符必须以字符串文本的方式书写,并且必须小于200字节长。 + +## 相关链接 + +[COMMIT PREPARED](COMMIT-PREPARED.md#ZH-CN_TOPIC_0242370559),[ROLLBACK PREPARED](ROLLBACK-PREPARED.md#ZH-CN_TOPIC_0242370645) + diff --git a/content/zh/docs/Developerguide/REASSIGN OWNED.md b/content/zh/docs/Developerguide/REASSIGN OWNED.md new file mode 100644 index 000000000..65638f2e1 --- /dev/null +++ b/content/zh/docs/Developerguide/REASSIGN OWNED.md @@ -0,0 +1,34 @@ +# REASSIGN OWNED + +## 功能描述 + +修改数据库对象的属主。 + +REASSIGN OWNED要求系统将所有old\_roles拥有的数据库对象的属主更改为new\_role。 + +## 注意事项 + +- REASSIGN OWNED常用于在删除角色之前的准备工作。 +- 执行REASSIGN OWNED需要有原角色和目标角色上的权限。 + +## 语法格式 + +``` +REASSIGN OWNED BY old_role [, ...] TO new_role; +``` + +## 参数说明 + +- **old\_role** + + 旧属主的角色名。 + +- **new\_role** + + 将要成为这些对象属主的新角色的名称。 + + +## 示例 + +无。 + diff --git a/content/zh/docs/Developerguide/RELEASE SAVEPOINT.md b/content/zh/docs/Developerguide/RELEASE SAVEPOINT.md new file mode 100644 index 000000000..55f60f3a2 --- /dev/null +++ b/content/zh/docs/Developerguide/RELEASE SAVEPOINT.md @@ -0,0 +1,63 @@ +# RELEASE SAVEPOINT + +## 功能描述 + +RELEASE SAVEPOINT删除一个当前事务先前定义的保存点。 + +把一个保存点删除就令其无法作为回滚点使用,除此之外它没有其它用户可见的行为。它并不能撤销在保存点建立起来之后执行的命令的影响。要撤销那些命令可以使用ROLLBACK TO SAVEPOINT 。在不再需要的时候删除一个保存点可以令系统在事务结束之前提前回收一些资源。 + +RELEASE SAVEPOINT也删除所有在指定的保存点建立之后的所有保存点。 + +## 注意事项 + +- 不能RELEASE一个没有定义的保存点,语法上会报错。 +- 如果事务在回滚状态,则不能释放保存点。 +- 如果多个保存点拥有同样的名称,只有最近定义的那个才被释放。 + +## 语法格式 + +``` +RELEASE [ SAVEPOINT ] savepoint_name; +``` + +## 参数说明 + +**savepoint\_name** + +要删除的保存点的名称 + +## 示例 + +``` +--创建一个新表。 +postgres=# CREATE TABLE tpcds.table1(a int); + +--开启事务。 +postgres=# START TRANSACTION; + +--插入数据。 +postgres=# INSERT INTO tpcds.table1 VALUES (3); + +--建立保存点。 +postgres=# SAVEPOINT my_savepoint; + +--插入数据。 +postgres=# INSERT INTO tpcds.table1 VALUES (4); + +--删除保存点。 +postgres=# RELEASE SAVEPOINT my_savepoint; + +--提交事务。 +postgres=# COMMIT; + +--查询表的内容,会同时看到3和4。 +postgres=# SELECT * FROM tpcds.table1; + +--删除表。 +postgres=# DROP TABLE tpcds.table1; +``` + +## 相关链接 + +[SAVEPOINT](SAVEPOINT.md#ZH-CN_TOPIC_0242370647),[ROLLBACK TO SAVEPOINT](ROLLBACK-TO-SAVEPOINT.md#ZH-CN_TOPIC_0242370646) + diff --git a/content/zh/docs/Developerguide/ROLLBACK PREPARED.md b/content/zh/docs/Developerguide/ROLLBACK PREPARED.md new file mode 100644 index 000000000..afaceb70e --- /dev/null +++ b/content/zh/docs/Developerguide/ROLLBACK PREPARED.md @@ -0,0 +1,28 @@ +# ROLLBACK PREPARED + +## 功能描述 + +取消一个先前为两阶段提交准备好的事务。 + +## 注意事项 + +- 该功能仅在维护模式\(GUC参数xc\_maintenance\_mode为on时\)下可用。该模式谨慎打开,一般供维护人员排查问题使用,一般用户不应使用该模式。 +- 要想回滚一个预备事务,必须是最初发起事务的用户,或者是系统管理员。 +- 事务功能由数据库自动维护,不应显式使用事务功能。 + +## 语法格式 + +``` +ROLLBACK PREPARED transaction_id ; +``` + +## 参数说明 + +**transaction\_id** + +待提交事务的标识符。它不能和任何当前预备事务已经使用了的标识符同名。 + +## 相关链接 + +[COMMIT PREPARED](COMMIT-PREPARED.md#ZH-CN_TOPIC_0242370559),[PREPARE TRANSACTION](PREPARE-TRANSACTION.md#ZH-CN_TOPIC_0242370636)。 + diff --git a/content/zh/docs/Developerguide/ROLLBACK TO SAVEPOINT.md b/content/zh/docs/Developerguide/ROLLBACK TO SAVEPOINT.md new file mode 100644 index 000000000..bef789e31 --- /dev/null +++ b/content/zh/docs/Developerguide/ROLLBACK TO SAVEPOINT.md @@ -0,0 +1,53 @@ +# ROLLBACK TO SAVEPOINT + +## 功能描述 + +ROLLBACK TO SAVEPOINT用于回滚到一个保存点,隐含地删除所有在该保存点之后建立的保存点。 + +回滚所有指定保存点建立之后执行的命令。保存点仍然有效,并且需要时可以再次回滚到该点。 + +## 注意事项 + +- 不能回滚到一个未定义的保存点,语法上会报错。 +- 在保存点方面,游标有一些非事务性的行为。任何在保存点里打开的游标都会在回滚掉这个保存点之后关闭。如果一个前面打开了的游标在保存点里面,并且游标被一个FETCH命令影响,而这个保存点稍后回滚了,那么这个游标的位置仍然在FETCH让它指向的位置\(也就是FETCH不会被回滚\)。关闭一个游标的行为也不会被回滚给撤消掉。如果一个游标的操作导致事务回滚,那么这个游标就会置于不可执行状态,所以,尽管一个事务可以用ROLLBACK TO SAVEPOINT重新恢复,但是游标不能再使用了。 +- 使用ROLLBACK TO SAVEPOINT回滚到一个保存点。使用RELEASE SAVEPOINT删除一个保存点,但是保留该保存点建立后执行的命令的效果。 + +## 语法格式 + +``` +ROLLBACK [ WORK | TRANSACTION ] TO [ SAVEPOINT ] savepoint_name; +``` + +## 参数说明 + +savepoint\_name + +回滚截至的保存点 + +## 示例 + +``` +--撤销 my_savepoint 建立之后执行的命令的影响。 +postgres=# START TRANSACTION; +postgres=# SAVEPOINT my_savepoint; +postgres=# ROLLBACK TO SAVEPOINT my_savepoint; +--游标位置不受保存点回滚的影响。 +postgres=# DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2; +postgres=# SAVEPOINT foo; +postgres=# FETCH 1 FROM foo; + ?column? +---------- + 1 +postgres=# ROLLBACK TO SAVEPOINT foo; +postgres=# FETCH 1 FROM foo; + ?column? +---------- + 2 +postgres=# RELEASE SAVEPOINT my_savepoint; +postgres=# COMMIT; +``` + +## 相关链接 + +[SAVEPOINT](SAVEPOINT.md#ZH-CN_TOPIC_0242370647),[RELEASE SAVEPOINT](RELEASE-SAVEPOINT.md#ZH-CN_TOPIC_0242370641) + diff --git a/content/zh/docs/Developerguide/SELECT INTO.md b/content/zh/docs/Developerguide/SELECT INTO.md new file mode 100644 index 000000000..5aa73250e --- /dev/null +++ b/content/zh/docs/Developerguide/SELECT INTO.md @@ -0,0 +1,69 @@ +# SELECT INTO + +## 功能描述 + +SELECT INTO用于根据查询结果创建一个新表,并且将查询到的数据插入到新表中。 + +数据并不返回给客户端,这一点和普通的SELECT不同。新表的字段具有和SELECT的输出字段相同的名称和数据类型。 + +## 注意事项 + +CREATE TABLE AS的作用和SELECT INTO类似,且提供了SELECT INTO所提供功能的超集。建议使用CREATE TABLE AS语法替代SELECT INTO,因为SELECT INTO不能在存储过程中使用。 + +## 语法格式 + +``` +[ WITH [ RECURSIVE ] with_query [, ...] ] +SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ] + { * | {expression [ [ AS ] output_name ]} [, ...] } + INTO [ UNLOGGED ] [ TABLE ] new_table + [ FROM from_item [, ...] ] + [ WHERE condition ] + [ GROUP BY expression [, ...] ] + [ HAVING condition [, ...] ] + [ WINDOW {window_name AS ( window_definition )} [, ...] ] + [ { UNION | INTERSECT | EXCEPT | MINUS } [ ALL | DISTINCT ] select ] + [ ORDER BY {expression [ [ ASC | DESC | USING operator ] | nlssort_expression_clause ] [ NULLS { FIRST | LAST } ]} [, ...] ] + [ LIMIT { count | ALL } ] + [ OFFSET start [ ROW | ROWS ] ] + [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ] + [ {FOR { UPDATE | SHARE } [ OF table_name [, ...] ] [ NOWAIT ]} [...] ]; +``` + +## 参数说明 + +**INTO \[ UNLOGGED \] \[ TABLE \] new\_table** + +UNLOGGED指定表为非日志表。在非日志表中写入的数据不会被写入到预写日志中,这样就会比普通表快很多。但是,它也是不安全的,非日志表在冲突或异常关机后会被自动删截。非日志表中的内容也不会被复制到备用服务器中。在该类表中创建的索引也不会被自动记录。 + +new\_table指定新建表的名称。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>SELECT INTO的其它参数可参考SELECT的[参数说明](SELECT.md#zh-cn_topic_0237122184_zh-cn_topic_0059777449_sa812f65b8e8c4c638ec7840697222ddc)。 + +## 示例 + +``` +--将tpcds.reason表中r_reason_sk小于5的值加入到新建表中。 +postgres=# SELECT * INTO tpcds.reason_t1 FROM tpcds.reason WHERE r_reason_sk < 5; +INSERT 0 6 + +--删除tpcds.reason_t1表。 +postgres=# DROP TABLE tpcds.reason_t1; +``` + +## 相关链接 + +[SELECT](SELECT.md) + +## 优化建议 + +- **DATABASE** + + 不建议在事务中reindex database。 + +- **SYSTEM** + + 不建议在事务中reindex系统表。 + + diff --git a/content/zh/docs/Developerguide/SET CONSTRAINTS.md b/content/zh/docs/Developerguide/SET CONSTRAINTS.md new file mode 100644 index 000000000..9e8b1c29c --- /dev/null +++ b/content/zh/docs/Developerguide/SET CONSTRAINTS.md @@ -0,0 +1,54 @@ +# SET CONSTRAINTS + +## 功能描述 + +SET CONSTRAINTS设置当前事务检查行为的约束条件。 + +IMMEDIATE约束是在每条语句后面进行检查。DEFERRED约束一直到事务提交时才检查。每个约束都有自己的模式。 + +从创建约束条件开始,一个约束总是设定为DEFERRABLE INITIALLY DEFERRED,DEFERRABLE INITIALLY IMMEDIATE,NOT DEFERRABLE三个特性之一。第三种总是IMMEDIATE,并且不会受SET CONSTRAINTS影响。前两种以指定的方式启动每个事务,但是其行为可以在事务里用SET CONSTRAINTS改变。 + +带着一个约束名列表的SET CONSTRAINTS改变这些约束的模式(都必须是可推迟的)。如果有多个约束匹配某个名称,则所有都会被影响。SET CONSTRAINTS ALL改变所有可推迟约束的模式。 + +当SET CONSTRAINTS把一个约束从DEFERRED改成IMMEDIATE的时候,新模式反作用式地起作用:任何将在事务结束准备进行的数据修改都将在SET CONSTRAINTS的时候执行检查。如果违反了任何约束,SET CONSTRAINTS都会失败(并且不会修改约束模式)。因此,SET CONSTRAINTS可以用于强制在事务中某一点进行约束检查。 + +目前,只有外键约束被该设置影响。检查和唯一约束总是不可推迟的。 + +## 注意事项 + +SET CONSTRAINTS只在当前事务里设置约束的行为。因此,如果用户在事务块之外(START TRANSACTION/COMMIT对)执行这个命令,它将没有任何作用。 + +## 语法格式 + +``` +SET CONSTRAINTS { ALL | { name } [, ...] } { DEFERRED | IMMEDIATE } ; +``` + +## 参数说明 + +- **name** + + 约束名。 + + 取值范围:已存在的约束名。可以在系统表pg\_constraint中查到。 + +- **ALL** + + 所有约束。 + +- **DEFERRED** + + 约束一直到事务提交时才检查。 + +- **IMMEDIATE** + + 约束在每条语句后进行检查。 + + +## 示例 + +``` +--设置所有约束在事务提交时检查。 +postgres=# SET CONSTRAINTS ALL DEFERRED; +``` + diff --git a/content/zh/docs/Developerguide/SET ROLE.md b/content/zh/docs/Developerguide/SET ROLE.md new file mode 100644 index 000000000..3a1f69c85 --- /dev/null +++ b/content/zh/docs/Developerguide/SET ROLE.md @@ -0,0 +1,72 @@ +# SET ROLE + +## 功能描述 + +设置当前会话的当前用户标识符。 + +## 注意事项 + +- 当前会话的用户必须是指定的rolename角色的成员,但系统管理员可以选择任何角色。 +- 使用这条命令,它可能会增加一个用户的权限,也可能会限制一个用户的权限。如果会话用户的角色有INHERITS属性,则它自动拥有它能SET ROLE变成的角色的所有权限;在这种情况下,SET ROLE实际上是删除了所有直接赋予会话用户的权限,以及它的所属角色的权限,只剩下指定角色的权限。另一方面,如果会话用户的角色有NOINHERITS属性,SET ROLE删除直接赋予会话用户的权限,而获取指定角色的权限。 + +## 语法格式 + +- 设置当前会话的当前用户标识符。 + + ``` + SET [ SESSION | LOCAL ] ROLE role_name PASSWORD 'password'; + ``` + +- 重置当前用户标识为当前会话用户标识符。 + + ``` + RESET ROLE; + ``` + + +## 参数说明 + +- **SESSION** + + 声明这个命令只对当前会话起作用,此参数为缺省值。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **LOCALE** + + 声明该命令只在当前事务中有效。 + +- **role\_name** + + 角色名。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **password** + + 角色的密码。要求符合密码的命名规则。 + +- **RESET ROLE** + + 用于重置当前用户标识。 + + +## 示例 + +``` +--创建角色paul。 +postgres=# CREATE ROLE paul IDENTIFIED BY 'Bigdata@123'; + +--设置当前用户为paul。 +postgres=# SET ROLE paul PASSWORD 'Bigdata@123'; + +--查看当前会话用户,当前用户。 +postgres=# SELECT SESSION_USER, CURRENT_USER; + +--重置当前用户。 +postgres=# RESET role; + +--删除用户。 +postgres=# DROP USER paul; +``` + diff --git a/content/zh/docs/Developerguide/SET SESSION AUTHORIZATION.md b/content/zh/docs/Developerguide/SET SESSION AUTHORIZATION.md new file mode 100644 index 000000000..782582dd9 --- /dev/null +++ b/content/zh/docs/Developerguide/SET SESSION AUTHORIZATION.md @@ -0,0 +1,76 @@ +# SET SESSION AUTHORIZATION + +## 功能描述 + +把当前会话里的会话用户标识和当前用户标识都设置为指定的用户。 + +## 注意事项 + +只有在初始会话用户有系统管理员权限的时候,会话用户标识符才能改变。否则,只有在指定了被认证的用户名的情况下,系统才接受该命令。 + +## 语法格式 + +- 为当前会话设置会话用户标识符和当前用户标识符。 + + ``` + SET [ SESSION | LOCAL ] SESSION AUTHORIZATION role_name PASSWORD 'password'; + ``` + +- 重置会话和当前用户标识符为初始认证的用户名。 + + ``` + {SET [ SESSION | LOCAL ] SESSION AUTHORIZATION DEFAULT + | RESET SESSION AUTHORIZATION}; + ``` + + +## 参数说明 + +- **SESSION** + + 声明这个命令只对当前会话起作用。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **LOCALE** + + 声明该命令只在当前事务中有效。 + +- **role\_name** + + 用户名。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **password** + + 角色的密码。要求符合密码的命名规则。 + +- **DEFAULT** + + 重置会话和当前用户标识符为初始认证的用户名。 + + +## 示例 + +``` +--创建角色paul。 +postgres=# CREATE ROLE paul IDENTIFIED BY 'Bigdata@123'; + +--设置当前用户为paul。 +postgres=# SET SESSION AUTHORIZATION paul password 'Bigdata@123'; + +--查看当前会话用户,当前用户。 +postgres=# SELECT SESSION_USER, CURRENT_USER; + +--重置当前用户。 +postgres=# RESET SESSION AUTHORIZATION; + +--删除用户。 +postgres=# DROP USER paul; +``` + +## 相关参考 + +[SET ROLE](SET-ROLE.md#ZH-CN_TOPIC_0242370652) + diff --git a/content/zh/docs/Developerguide/SET TRANSACTION.md b/content/zh/docs/Developerguide/SET TRANSACTION.md new file mode 100644 index 000000000..0cb5566c2 --- /dev/null +++ b/content/zh/docs/Developerguide/SET TRANSACTION.md @@ -0,0 +1,60 @@ +# SET TRANSACTION + +## 功能描述 + +为当前事务设置特性。它对后面的事务没有影响。事务特性包括事务隔离级别、事务访问模式\(读/写或者只读\)。 + +## 注意事项 + +无。 + +## 语法格式 + +设置事务的隔离级别、读写模式。 + +``` +{ SET [ LOCAL ] TRANSACTION|SET SESSION CHARACTERISTICS AS TRANSACTION } + { ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ } + | { READ WRITE | READ ONLY } } [, ...] +``` + +## 参数说明 + +- **LOCAL** + + 声明该命令只在当前事务中有效。 + +- **SESSION** + + 声明这个命令只对当前会话起作用。 + + 取值范围:字符串,要符合标识符的命名规范。 + +- **ISOLATION\_LEVEL\_CLAUSE** + + 指定事务隔离级别,该参数决定当一个事务中存在其他并发运行事务时能够看到什么数据。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >- 在事务中第一个数据修改语句(INSERT,DELETE,UPDATE,FETCH,COPY)执行之后,事务隔离级别就不能再次设置。 + + 取值范围: + + - READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 + - READ UNCOMMITTED:读未提交隔离级别,可能会读到未提交的数据。建议这种隔离级别下仅作只读操作,避免造成数据不一致。 + - REPEATABLE READ:可重复读隔离级别,仅仅能看到事务开始之前提交的数据,不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 + - SERIALIZABLE:openGauss目前功能上不支持此隔离级别,等价于REPEATABLE READ。 + +- **READ WRITE | READ ONLY** + + 指定事务访问模式(读/写或者只读)。 + + +## 示例 + +``` +--开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY。 +postgres=# START TRANSACTION; +postgres=# SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY; +postgres=# COMMIT; +``` + diff --git "a/content/zh/docs/Developerguide/SSL\350\257\201\344\271\246\347\256\241\347\220\206 6.md" "b/content/zh/docs/Developerguide/SSL\350\257\201\344\271\246\347\256\241\347\220\206 6.md" new file mode 100644 index 000000000..18cafffc9 --- /dev/null +++ "b/content/zh/docs/Developerguide/SSL\350\257\201\344\271\246\347\256\241\347\220\206 6.md" @@ -0,0 +1,9 @@ +# SSL证书管理 + +openGauss默认配置了通过openssl生成的安全证书、私钥。并且提供证书替换的接口,方便用户进行证书的替换。 + +- **[证书生成](证书生成-7.md)** + +- **[证书替换](证书替换-8.md)** + + diff --git a/content/zh/docs/Developerguide/START TRANSACTION.md b/content/zh/docs/Developerguide/START TRANSACTION.md new file mode 100644 index 000000000..cab33dd78 --- /dev/null +++ b/content/zh/docs/Developerguide/START TRANSACTION.md @@ -0,0 +1,84 @@ +# START TRANSACTION + +## 功能描述 + +通过START TRANSACTION启动事务。如果声明了隔离级别、读写模式,那么新事务就使用这些特性,类似执行了[SET TRANSACTION](SET-TRANSACTION.md)。 + +## 注意事项 + +无。 + +## 语法格式 + +格式一:START TRANSACTION格式 + +``` +START TRANSACTION + [ + { + ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ } + | { READ WRITE | READ ONLY } + } [, ...] + ]; +``` + +格式二:BEGIN格式 + +``` +BEGIN [ WORK | TRANSACTION ] + [ + { + ISOLATION LEVEL { READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE | REPEATABLE READ } + | { READ WRITE | READ ONLY } + } [, ...] + ]; +``` + +## 参数说明 + +- **WORK | TRANSACTION** + + BEGIN格式中的可选关键字,没有实际作用。 + +- **ISOLATION LEVEL** + + 指定事务隔离级别,它决定当一个事务中存在其他并发运行事务时它能够看到什么数据。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >在事务中第一个数据修改语句(INSERT,DELETE,UPDATE,FETCH,COPY)执行之后,事务隔离级别就不能再次设置。 + + 取值范围: + + - READ COMMITTED:读已提交隔离级别,只能读到已经提交的数据,而不会读到未提交的数据。这是缺省值。 + - READ UNCOMMITTED:读未提交隔离级别,可能会读到未提交的数据。建议这种隔离级别下仅作只读操作,避免造成数据不一致。 + - REPEATABLE READ: 可重复读隔离级别,仅仅看到事务开始之前提交的数据,它不能看到未提交的数据,以及在事务执行期间由其它并发事务提交的修改。 + - SERIALIZABLE:openGauss目前功能上不支持此隔离级别,等价于REPEATABLE READ。 + +- **READ WRITE | READ ONLY** + + 指定事务访问模式(读/写或者只读)。 + + +## 示例 + +``` +--以默认方式启动事务。 +postgres=# START TRANSACTION; +postgres=# SELECT * FROM tpcds.reason; +postgres=# END; + +--以默认方式启动事务。 +postgres=# BEGIN; +postgres=# SELECT * FROM tpcds.reason; +postgres=# END; + +--以隔离级别为READ COMMITTED,读/写方式启动事务。 +postgres=# START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE; +postgres=# SELECT * FROM tpcds.reason; +postgres=# COMMIT; +``` + +## 相关链接 + +[COMMIT | END](COMMIT-END.md),[ROLLBACK](ROLLBACK.md),[SET TRANSACTION](SET-TRANSACTION.md) + diff --git "a/content/zh/docs/Developerguide/UNION CASE\345\222\214\347\233\270\345\205\263\346\236\204\351\200\240.md" "b/content/zh/docs/Developerguide/UNION CASE\345\222\214\347\233\270\345\205\263\346\236\204\351\200\240.md" new file mode 100644 index 000000000..8355b05a3 --- /dev/null +++ "b/content/zh/docs/Developerguide/UNION CASE\345\222\214\347\233\270\345\205\263\346\236\204\351\200\240.md" @@ -0,0 +1,115 @@ +# UNION,CASE和相关构造 + +SQL UNION构造必须把那些可能不太相似的类型匹配起来成为一个结果集。解析算法分别应用于联合查询的每个输出字段。INTERSECT和EXCEPT构造对不相同的类型使用和UNION相同的算法进行解析。CASE、ARRAY、VALUES、GREATEST和LEAST构造也使用同样的算法匹配它的部件表达式并且选择一个结果数据类型。 + +## UNION,CASE和相关构造解析 + +- 如果所有输入都是相同的类型,并且不是unknown类型,那么解析成这种类型。 +- 如果所有输入都是unknown类型则解析成text类型(字符串类型范畴的首选类型)。否则,忽略unknown输入。 +- 如果输入不属于同一个类型范畴,失败。(unknown类型除外) +- 如果输入类型是同一个类型范畴,则选择该类型范畴的首选类型。(例外:union操作会选择第一个分支的类型作为所选类型。) + + >![](public_sys-resources/icon-note.gif) **说明:** + >系统表pg\_type中typcategory表示数据类型范畴, typispreferred表示是否是typcategory分类中的首选类型。 + +- 把所有输入转换为所选的类型(对于字符串保持原有长度)。如果从给定的输入到所选的类型没有隐式转换则失败。 +- 若输入中含json、txid\_snapshot、sys\_refcursor或几何类型,则不能进行union。 + +## 对于case和coalesce,在TD兼容模式下的处理 + +- 如果所有输入都是相同的类型,并且不是unknown类型,那么解析成这种类型。 +- 如果所有输入都是unknown类型则解析成text类型。 +- 如果输入字符串(包括unknown,unknown当text来处理)和数字类型,那么解析成字符串类型,如果是其他不同的类型范畴,则报错。 +- 如果输入类型是同一个类型范畴,则选择该类型的优先级较高的类型。 +- 把所有输入转换为所选的类型。如果从给定的输入到所选的类型没有隐式转换则失败。 + +## 示例 + +示例1:Union中的待定类型解析。这里,unknown类型文本'b'将被解析成text类型。 + +``` +postgres=# SELECT text 'a' AS "text" UNION SELECT 'b'; + text +------ + a + b +(2 rows) +``` + +示例2:简单Union中的类型解析。文本1.2的类型为numeric,而且integer类型的1可以隐含地转换为numeric,因此使用这个类型。 + +``` +postgres=# SELECT 1.2 AS "numeric" UNION SELECT 1; + numeric +--------- + 1 + 1.2 +(2 rows) +``` + +示例3:转置Union中的类型解析。这里,因为类型real不能被隐含转换成integer,但是integer可以隐含转换成real,那么联合的结果类型将是real。 + +``` +postgres=# SELECT 1 AS "real" UNION SELECT CAST('2.2' AS REAL); + real +------ + 1 + 2.2 +(2 rows) +``` + +示例4:TD模式下,coalesce参数输入int和varchar类型,那么解析成varchar类型。ORA模式下会报错。 + +``` +--在A模式下,创建A兼容模式的数据库a_1。 +postgres=# CREATE DATABASE a_1 dbcompatibility = 'A'; + +--切换数据库为a_1。 +postgres=# \c a_1 + +--创建表t1。 +a_1=# CREATE TABLE t1(a int, b varchar(10)); + +--查看coalesce参数输入int和varchar类型的查询语句的执行计划。 +a_1=# EXPLAIN SELECT coalesce(a, b) FROM t1; +ERROR: COALESCE types integer and character varying cannot be matched +LINE 1: EXPLAIN SELECT coalesce(a, b) FROM t1; + ^ +CONTEXT: referenced column: coalesce + +--删除表。 +a_1=# DROP TABLE t1; + +--切换数据库为postgres。 +a_1=# \c postgres + +--在TD模式下,创建TD兼容模式的数据库td_1。 +postgres=# CREATE DATABASE td_1 dbcompatibility = 'C'; + +--切换数据库为td_1。 +postgres=# \c td_1 + +--创建表t2。 +td_1=# CREATE TABLE t2(a int, b varchar(10)); + +--查看coalesce参数输入int和varchar类型的查询语句的执行计划。 +td_1=# EXPLAIN VERBOSE select coalesce(a, b) from t2; + QUERY PLAN +--------------------------------------------------------------------------------------- + Data Node Scan (cost=0.00..0.00 rows=0 width=0) + Output: (COALESCE((t2.a)::character varying, t2.b)) + Node/s: All dbnodes + Remote query: SELECT COALESCE(a::character varying, b) AS "coalesce" FROM public.t2 +(4 rows) + +--删除表。 +td_1=# DROP TABLE t2; + +--切换数据库为postgres。 +td_1=# \c postgres + +--删除A和TD模式的数据库。 +postgres=# DROP DATABASE a_1; +postgres=# DROP DATABASE td_1; +``` + diff --git a/content/zh/docs/Developerguide/java sql CallableStatement.md b/content/zh/docs/Developerguide/java sql CallableStatement.md new file mode 100644 index 000000000..f86e69f92 --- /dev/null +++ b/content/zh/docs/Developerguide/java sql CallableStatement.md @@ -0,0 +1,135 @@ +# java.sql.CallableStatement + +java.sql.CallableStatement是存储过程执行接口。 + +**表 1** 对java.sql.CallableStatement的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

registerOutParameter(int parameterIndex, int type)

+

void

+

Yes

+

wasNull()

+

Boolean

+

Yes

+

getString(int parameterIndex)

+

String

+

Yes

+

getBoolean(int parameterIndex)

+

Boolean

+

Yes

+

getByte(int parameterIndex)

+

byte

+

Yes

+

getShort(int parameterIndex)

+

short

+

Yes

+

getInt(int parameterIndex)

+

int

+

Yes

+

getLong(int parameterIndex)

+

long

+

Yes

+

getFloat(int parameterIndex)

+

float

+

Yes

+

getDouble(int parameterIndex)

+

double

+

Yes

+

getBigDecimal(int parameterIndex)

+

BigDecimal

+

Yes

+

getBytes(int parameterIndex)

+

byte[]

+

Yes

+

getDate(int parameterIndex)

+

Date

+

Yes

+

getTime(int parameterIndex)

+

Time

+

Yes

+

getTimestamp(int parameterIndex)

+

Timestamp

+

Yes

+

getObject(int parameterIndex)

+

Object

+

Yes

+
+ +>![](public_sys-resources/icon-note.gif) **说明:** +>- 不允许含有OUT参数的语句执行批量操作。 +>- 以下方法是从java.sql.Statement继承而来:close,execute,executeQuery,executeUpdate,getConnection,getResultSet,getUpdateCount,isClosed,setMaxRows , setFetchSize。 +>- 以下方法是从java.sql.PreparedStatement继承而来:addBatch,clearParameters,execute,executeQuery,executeUpdate,getMetaData,setBigDecimal,setBoolean,setByte,setBytes,setDate,setDouble,setFloat,setInt,setLong,setNull,setObject,setString,setTime,setTimestamp 。 + diff --git a/content/zh/docs/Developerguide/java sql Connection.md b/content/zh/docs/Developerguide/java sql Connection.md new file mode 100644 index 000000000..a06ca6dd1 --- /dev/null +++ b/content/zh/docs/Developerguide/java sql Connection.md @@ -0,0 +1,119 @@ +# java.sql.Connection + +java.sql.Connection是数据库连接接口。 + +**表 1** 对java.sql.Connection接口的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

close()

+

void

+

Yes

+

commit()

+

void

+

Yes

+

createStatement()

+

Statement

+

Yes

+

getAutoCommit()

+

Boolean

+

Yes

+

getClientInfo()

+

Properties

+

Yes

+

getClientInfo(String name)

+

String

+

Yes

+

getTransactionIsolation()

+

int

+

Yes

+

isClosed()

+

Boolean

+

Yes

+

isReadOnly()

+

Boolean

+

Yes

+

prepareStatement(String sql)

+

PreparedStatement

+

Yes

+

rollback()

+

void

+

Yes

+

setAutoCommit(boolean autoCommit)

+

void

+

Yes

+

setClientInfo(Properties properties)

+

void

+

Yes

+

setClientInfo(String name,String value)

+

void

+

Yes

+
+ +>![](public_sys-resources/icon-notice.gif) **须知:** +>接口内部默认使用自动提交模式,若通过setAutoCommit\(false\)关闭自动提交,将会导致后面执行的语句都受到显式事务包裹,数据库中不支持事务中执行的语句不能在此模式下执行。 + diff --git a/content/zh/docs/Developerguide/java sql DatabaseMetaData.md b/content/zh/docs/Developerguide/java sql DatabaseMetaData.md new file mode 100644 index 000000000..1af274860 --- /dev/null +++ b/content/zh/docs/Developerguide/java sql DatabaseMetaData.md @@ -0,0 +1,438 @@ +# java.sql.DatabaseMetaData + +java.sql.DatabaseMetaData是数据库对象定义接口。 + +**表 1** 对java.sql.DatabaseMetaData的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types)

+

ResultSet

+

Yes

+

getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern)

+

ResultSet

+

Yes

+

getTableTypes()

+

ResultSet

+

Yes

+

getUserName()

+

String

+

Yes

+

isReadOnly()

+

boolean

+

Yes

+

nullsAreSortedHigh()

+

boolean

+

Yes

+

nullsAreSortedLow()

+

boolean

+

Yes

+

nullsAreSortedAtStart()

+

boolean

+

Yes

+

nullsAreSortedAtEnd()

+

boolean

+

Yes

+

getDatabaseProductName()

+

String

+

Yes

+

getDatabaseProductVersion()

+

String

+

Yes

+

getDriverName()

+

String

+

Yes

+

getDriverVersion()

+

String

+

Yes

+

getDriverMajorVersion()

+

int

+

Yes

+

getDriverMinorVersion()

+

int

+

Yes

+

usesLocalFiles()

+

boolean

+

Yes

+

usesLocalFilePerTable()

+

boolean

+

Yes

+

supportsMixedCaseIdentifiers()

+

boolean

+

Yes

+

storesUpperCaseIdentifiers()

+

boolean

+

Yes

+

storesLowerCaseIdentifiers()

+

boolean

+

Yes

+

supportsMixedCaseQuotedIdentifiers()

+

boolean

+

Yes

+

storesUpperCaseQuotedIdentifiers()

+

boolean

+

Yes

+

storesLowerCaseQuotedIdentifiers()

+

boolean

+

Yes

+

storesMixedCaseQuotedIdentifiers()

+

boolean

+

Yes

+

supportsAlterTableWithAddColumn()

+

boolean

+

Yes

+

supportsAlterTableWithDropColumn()

+

boolean

+

Yes

+

supportsColumnAliasing()

+

boolean

+

Yes

+

nullPlusNonNullIsNull()

+

boolean

+

Yes

+

supportsConvert()

+

boolean

+

Yes

+

supportsConvert(int fromType, int toType)

+

boolean

+

Yes

+

supportsTableCorrelationNames()

+

boolean

+

Yes

+

supportsDifferentTableCorrelationNames()

+

boolean

+

Yes

+

supportsExpressionsInOrderBy()

+

boolean

+

Yes

+

supportsOrderByUnrelated()

+

boolean

+

Yes

+

supportsGroupBy()

+

boolean

+

Yes

+

supportsGroupByUnrelated()

+

boolean

+

Yes

+

supportsGroupByBeyondSelect()

+

boolean

+

Yes

+

supportsLikeEscapeClause()

+

boolean

+

Yes

+

supportsMultipleResultSets()

+

boolean

+

Yes

+

supportsMultipleTransactions()

+

boolean

+

Yes

+

supportsNonNullableColumns()

+

boolean

+

Yes

+

supportsMinimumSQLGrammar()

+

boolean

+

Yes

+

supportsCoreSQLGrammar()

+

boolean

+

Yes

+

supportsExtendedSQLGrammar()

+

boolean

+

Yes

+

supportsANSI92EntryLevelSQL()

+

boolean

+

Yes

+

supportsANSI92IntermediateSQL()

+

boolean

+

Yes

+

supportsANSI92FullSQL()

+

boolean

+

Yes

+

supportsIntegrityEnhancementFacility()

+

boolean

+

Yes

+

supportsOuterJoins()

+

boolean

+

Yes

+

supportsFullOuterJoins()

+

boolean

+

Yes

+

supportsLimitedOuterJoins()

+

boolean

+

Yes

+

isCatalogAtStart()

+

boolean

+

Yes

+

supportsSchemasInDataManipulation()

+

boolean

+

Yes

+

supportsSavepoints()

+

boolean

+

Yes

+

supportsResultSetHoldability(int holdability)

+

boolean

+

Yes

+

getResultSetHoldability()

+

int

+

Yes

+

getDatabaseMajorVersion()

+

int

+

Yes

+

getDatabaseMinorVersion()

+

int

+

Yes

+

getJDBCMajorVersion()

+

int

+

Yes

+

getJDBCMinorVersion()

+

int

+

Yes

+
+ diff --git a/content/zh/docs/Developerguide/java sql Driver.md b/content/zh/docs/Developerguide/java sql Driver.md new file mode 100644 index 000000000..1c6bfbd02 --- /dev/null +++ b/content/zh/docs/Developerguide/java sql Driver.md @@ -0,0 +1,53 @@ +# java.sql.Driver + +java.sql.Driver是数据库驱动接口。 + +**表 1** 对java.sql.Driver的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

acceptsURL(String url)

+

Boolean

+

Yes

+

connect(String url, Properties info)

+

Connection

+

Yes

+

jdbcCompliant()

+

Boolean

+

Yes

+

getMajorVersion()

+

int

+

Yes

+

getMinorVersion()

+

int

+

Yes

+
+ diff --git a/content/zh/docs/Developerguide/java sql PreparedStatement.md b/content/zh/docs/Developerguide/java sql PreparedStatement.md new file mode 100644 index 000000000..305eddf9b --- /dev/null +++ b/content/zh/docs/Developerguide/java sql PreparedStatement.md @@ -0,0 +1,164 @@ +# java.sql.PreparedStatement + +java.sql.PreparedStatement是预处理语句接口。 + +**表 1** 对java.sql.PreparedStatement的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

clearParameters()

+

void

+

Yes

+

execute()

+

Boolean

+

Yes

+

executeQuery()

+

ResultSet

+

Yes

+

excuteUpdate()

+

int

+

Yes

+

getMetaData()

+

ResultSetMetaData

+

Yes

+

setBoolean(int parameterIndex, boolean x)

+

void

+

Yes

+

setBigDecimal(int parameterIndex, BigDecimal x)

+

void

+

Yes

+

setByte(int parameterIndex, byte x)

+

void

+

Yes

+

setBytes(int parameterIndex, byte[] x)

+

void

+

Yes

+

setDate(int parameterIndex, Date x)

+

void

+

Yes

+

setDouble(int parameterIndex, double x)

+

void

+

Yes

+

setFloat(int parameterIndex, float x)

+

void

+

Yes

+

setInt(int parameterIndex, int x)

+

void

+

Yes

+

setLong(int parameterIndex, long x)

+

void

+

Yes

+

setNString(int parameterIndex, String value)

+

void

+

Yes

+

setShort(int parameterIndex, short x)

+

void

+

Yes

+

setString(int parameterIndex, String x)

+

void

+

Yes

+

addBatch()

+

void

+

Yes

+

executeBatch()

+

int[]

+

Yes

+

clearBatch()

+

void

+

Yes

+
+ +>![](public_sys-resources/icon-note.gif) **说明:** +>- addBatch\(\)、execute\(\)必须在clearBatch\(\)之后才能执行。 +>- 调用executeBatch\(\)方法并不会清除batch。用户必须显式使用clearBatch\(\)清除 。 +>- 在添加了一个batch的绑定变量后,用户若想重用这些值\(再次添加一个batch\),无需再次使用set\*\(\)方法 。 +>- 以下方法是从java.sql.Statement继承而来:close,execute,executeQuery,executeUpdate,getConnection,getResultSet,getUpdateCount,isClosed,setMaxRows, setFetchSize。 + diff --git a/content/zh/docs/Developerguide/java sql ResultSet.md b/content/zh/docs/Developerguide/java sql ResultSet.md new file mode 100644 index 000000000..6742712a2 --- /dev/null +++ b/content/zh/docs/Developerguide/java sql ResultSet.md @@ -0,0 +1,239 @@ +# java.sql.ResultSet + +java.sql.ResultSet是执行结果集接口。 + +**表 1** 对java.sql.ResultSet的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

findColumn(String columnLabel)

+

int

+

Yes

+

getBigDecimal(int columnIndex)

+

BigDecimal

+

Yes

+

getBigDecimal(String columnLabel)

+

BigDecimal

+

Yes

+

getBoolean(int columnIndex)

+

Boolean

+

Yes

+

getBoolean(String columnLabel)

+

Boolean

+

Yes

+

getByte(int columnIndex)

+

byte

+

Yes

+

getBytes(int columnIndex)

+

byte[]

+

Yes

+

getByte(String columnLabel)

+

byte

+

Yes

+

getBytes(String columnLabel)

+

byte[]

+

Yes

+

getDate(int columnIndex)

+

Date

+

Yes

+

getDate(String columnLabel)

+

Date

+

Yes

+

getDouble(int columnIndex)

+

double

+

Yes

+

getDouble(String columnLabel)

+

double

+

Yes

+

getFloat(int columnIndex)

+

float

+

Yes

+

getFloat(String columnLabel)

+

float

+

Yes

+

getInt(int columnIndex)

+

int

+

Yes

+

getInt(String columnLabel)

+

int

+

Yes

+

getLong(int columnIndex)

+

long

+

Yes

+

getLong(String columnLabel)

+

long

+

Yes

+

getShort(int columnIndex)

+

short

+

Yes

+

getShort(String columnLabel)

+

short

+

Yes

+

getString(int columnIndex)

+

String

+

Yes

+

getString(String columnLabel)

+

String

+

Yes

+

getTime(int columnIndex)

+

Time

+

Yes

+

getTime(String columnLabel)

+

Time

+

Yes

+

getTimestamp(int columnIndex)

+

Timestamp

+

Yes

+

getTimestamp(String columnLabel)

+

Timestamp

+

Yes

+

isAfterLast()

+

Boolean

+

Yes

+

isBeforeFirst()

+

Boolean

+

Yes

+

isFirst()

+

Boolean

+

Yes

+

next()

+

Boolean

+

Yes

+
+ +>![](public_sys-resources/icon-note.gif) **说明:** +>- 一个Statement不能有多个处于“open”状态的ResultSet。 +>- 用于遍历结果集\(ResultSet\)的游标\(Cursor\)在被提交后不能保持“open”的状态。 + diff --git a/content/zh/docs/Developerguide/java sql ResultSetMetaData.md b/content/zh/docs/Developerguide/java sql ResultSetMetaData.md new file mode 100644 index 000000000..96fb6de1e --- /dev/null +++ b/content/zh/docs/Developerguide/java sql ResultSetMetaData.md @@ -0,0 +1,46 @@ +# java.sql.ResultSetMetaData + +java.sql.ResultSetMetaData是对ResultSet对象相关信息的具体描述。 + +**表 1** 对java.sql.ResultSetMetaData的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

getColumnCount()

+

int

+

Yes

+

getColumnName(int column)

+

String

+

Yes

+

getColumnType(int column)

+

int

+

Yes

+

getColumnTypeName(int column)

+

String

+

Yes

+
+ diff --git a/content/zh/docs/Developerguide/java sql Statement.md b/content/zh/docs/Developerguide/java sql Statement.md new file mode 100644 index 000000000..64387af72 --- /dev/null +++ b/content/zh/docs/Developerguide/java sql Statement.md @@ -0,0 +1,106 @@ +# java.sql.Statement + +java.sql.Statement是SQL语句接口。 + +**表 1** 对java.sql.Statement的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

close()

+

void

+

Yes

+

execute(String sql)

+

Boolean

+

Yes

+

executeQuery(String sql)

+

ResultSet

+

Yes

+

executeUpdate(String sql)

+

int

+

Yes

+

getConnection()

+

Connection

+

Yes

+

getResultSet()

+

ResultSet

+

Yes

+

getQueryTimeout()

+

int

+

Yes

+

getUpdateCount()

+

int

+

Yes

+

isClosed()

+

Boolean

+

Yes

+

setQueryTimeout(int seconds)

+

void

+

Yes

+

setFetchSize(int rows)

+

void

+

Yes

+

cancel()

+

void

+

Yes

+
+ +>![](public_sys-resources/icon-note.gif) **说明:** +>- 通过setFetchSize可以减少结果集在客户端的内存占用情况。它的原理是通过将结果集打包成游标,然后分段处理,所以会加大数据库与客户端的通信量,会有性能损耗。 +>- 由于数据库游标是事务内有效,所以,在设置setFetchSize的同时,需要将连接设置为非自动提交模式,setAutoCommit\(false\)。同时在业务数据需要持久化到数据库中时,在连接上执行提交操作。 + diff --git a/content/zh/docs/Developerguide/javax naming Context.md b/content/zh/docs/Developerguide/javax naming Context.md new file mode 100644 index 000000000..9ea547612 --- /dev/null +++ b/content/zh/docs/Developerguide/javax naming Context.md @@ -0,0 +1,88 @@ +# javax.naming.Context + +javax.naming.Context是连接配置的上下文接口。 + +**表 1** 对javax.naming.Context的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

bind(Name name, Object obj)

+

void

+

Yes

+

bind(String name, Object obj)

+

void

+

Yes

+

lookup(Name name)

+

Object

+

Yes

+

lookup(String name)

+

Object

+

Yes

+

rebind(Name name, Object obj)

+

void

+

Yes

+

rebind(String name, Object obj)

+

void

+

Yes

+

rename(Name oldName, Name newName)

+

void

+

Yes

+

rename(String oldName, String newName)

+

void

+

Yes

+

unbind(Name name)

+

void

+

Yes

+

unbind(String name)

+

void

+

Yes

+
+ diff --git a/content/zh/docs/Developerguide/javax naming spi InitialContextFactory.md b/content/zh/docs/Developerguide/javax naming spi InitialContextFactory.md new file mode 100644 index 000000000..52482b871 --- /dev/null +++ b/content/zh/docs/Developerguide/javax naming spi InitialContextFactory.md @@ -0,0 +1,25 @@ +# javax.naming.spi.InitialContextFactory + +javax.naming.spi.InitialContextFactory是初始连接上下文工厂接口。 + +**表 1** 对javax.naming.spi.InitialContextFactory的支持情况 + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

getInitialContext(Hashtable<?,?> environment)

+

Context

+

Yes

+
+ diff --git a/content/zh/docs/Developerguide/javax sql ConnectionPoolDataSource.md b/content/zh/docs/Developerguide/javax sql ConnectionPoolDataSource.md new file mode 100644 index 000000000..b9dbe6591 --- /dev/null +++ b/content/zh/docs/Developerguide/javax sql ConnectionPoolDataSource.md @@ -0,0 +1,60 @@ +# javax.sql.ConnectionPoolDataSource + +javax.sql.ConnectionPoolDataSource是数据源连接池接口。 + +**表 1** 对javax.sql.ConnectionPoolDataSource的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

getLoginTimeout()

+

int

+

Yes

+

getLogWriter()

+

PrintWriter

+

Yes

+

getPooledConnection()

+

PooledConnection

+

Yes

+

getPooledConnection(String user,String password)

+

PooledConnection

+

Yes

+

setLoginTimeout(int seconds)

+

void

+

Yes

+

setLogWriter(PrintWriter out)

+

void

+

Yes

+
+ diff --git a/content/zh/docs/Developerguide/javax sql DataSource.md b/content/zh/docs/Developerguide/javax sql DataSource.md new file mode 100644 index 000000000..b5d224d01 --- /dev/null +++ b/content/zh/docs/Developerguide/javax sql DataSource.md @@ -0,0 +1,60 @@ +# javax.sql.DataSource + +javax.sql.DataSource是数据源接口。 + +**表 1** 对javax.sql.DataSource接口的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

getConneciton()

+

Connection

+

Yes

+

getConnection(String username,String password)

+

Connection

+

Yes

+

getLoginTimeout()

+

int

+

Yes

+

getLogWriter()

+

PrintWriter

+

Yes

+

setLoginTimeout(int seconds)

+

void

+

Yes

+

setLogWriter(PrintWriter out)

+

void

+

Yes

+
+ diff --git a/content/zh/docs/Developerguide/javax sql PooledConnection.md b/content/zh/docs/Developerguide/javax sql PooledConnection.md new file mode 100644 index 000000000..abe6c78f8 --- /dev/null +++ b/content/zh/docs/Developerguide/javax sql PooledConnection.md @@ -0,0 +1,60 @@ +# javax.sql.PooledConnection + +javax.sql.PooledConnection是由连接池创建的连接接口。 + +**表 1** 对javax.sql.PooledConnection的支持情况 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

方法名

+

返回值类型

+

支持JDBC 4

+

addConnectionEventListener (ConnectionEventListener listener)

+

void

+

Yes

+

close()

+

void

+

Yes

+

getConnection()

+

Connection

+

Yes

+

removeConnectionEventListener (ConnectionEventListener listener)

+

void

+

Yes

+

addStatementEventListener (StatementEventListener listener)

+

void

+

Yes

+

removeStatementEventListener (StatementEventListener listener)

+

void

+

Yes

+
+ diff --git a/content/zh/docs/Developerguide/openGauss SQL.md b/content/zh/docs/Developerguide/openGauss SQL.md new file mode 100644 index 000000000..6ba055fbe --- /dev/null +++ b/content/zh/docs/Developerguide/openGauss SQL.md @@ -0,0 +1,31 @@ +# openGauss SQL + +## 什么是SQL + +SQL是用于访问和处理数据库的标准计算机语言。 + +SQL提供了各种任务的语句,包括: + +- 查询数据。 +- 在表中插入,更新和删除行。 +- 创建,替换,更改和删除对象。 +- 控制对数据库及其对象的访问。 +- 保证数据库的一致性和完整性。 + +SQL语言由用于处理数据库和数据库对象的命令和函数组成。该语言还会强制实施有关数据类型、表达式和文本使用的规则。因此在[SQL参考](SQL参考.md)章节,除了SQL语法参考外,还会看到有关数据类型、表达式、函数和操作符等信息。 + +## SQL发展简史 + +SQL发展简史如下: + +- 1986年,ANSI X3.135-1986,ISO/IEC 9075:1986,SQL-86 +- 1989年,ANSI X3.135-1989,ISO/IEC 9075:1989,SQL-89 +- 1992年,ANSI X3.135-1992,ISO/IEC 9075:1992,SQL-92(SQL2) +- 1999年,ISO/IEC 9075:1999,SQL:1999(SQL3) +- 2003年,ISO/IEC 9075:2003,SQL:2003(SQL4) +- 2011年,ISO/IEC 9075:200N,SQL:2011(SQL5) + +## openGauss支持的SQL标准 + +openGauss默认支持SQL2、SQL3和SQL4的主要特性。 + diff --git "a/content/zh/docs/Developerguide/\344\273\213\347\273\215 17.md" "b/content/zh/docs/Developerguide/\344\273\213\347\273\215 17.md" new file mode 100644 index 000000000..098e514ea --- /dev/null +++ "b/content/zh/docs/Developerguide/\344\273\213\347\273\215 17.md" @@ -0,0 +1,10 @@ +# 介绍 + +GIN(Generalized Inverted Index)通用倒排索引。设计为处理索引项为组合值的情况,查询时需要通过索引搜索出出现在组合值中的特定元素值。例如,文档是由多个单词组成,需要查询出文档中包含的特定单词。 + +使用item表示索引的组合值,key表示一个元素值。GIN用来存储和搜索key,而不是item。 + +GIN索引存储一系列(key,posting list)键值对,这里的posting list是一组出现key的行ID。由于每个item都可能包含多个key,同一个行ID可能会出现在多个posting list中,而每个key值只被存储一次,所以在相同的key在item中出现多次的情况下,GIN索引是非常简洁的。 + +因为GIN索引的访问方式不需要了解他的运行方式,所以GIN索引是通用的。GIN索引使用为特殊数据类型定义的策略。策略定义了如何从索引选项和查询条件中抽出key,以及如何确定在查询中包含某些key值的行是否实际满足查询条件。 + diff --git "a/content/zh/docs/Developerguide/\344\275\277\347\224\250COPY FROM STDIN\345\257\274\345\205\245\346\225\260\346\215\256.md" "b/content/zh/docs/Developerguide/\344\275\277\347\224\250COPY FROM STDIN\345\257\274\345\205\245\346\225\260\346\215\256.md" new file mode 100644 index 000000000..8223c25d5 --- /dev/null +++ "b/content/zh/docs/Developerguide/\344\275\277\347\224\250COPY FROM STDIN\345\257\274\345\205\245\346\225\260\346\215\256.md" @@ -0,0 +1,11 @@ +# 使用COPY FROM STDIN导入数据 + +- **[关于COPY FROM STDIN导入数据](关于COPY-FROM-STDIN导入数据.md)** + +- **[CopyManager类简介](CopyManager类简介.md)** + +- **[示例1:通过本地文件导入导出数据](示例1-通过本地文件导入导出数据.md)** + +- **[示例2:从MySQL向openGauss进行数据迁移](示例2-从MySQL向openGauss进行数据迁移.md)** + + diff --git "a/content/zh/docs/Developerguide/\344\275\277\347\224\250CREATE TABLE LIKE\346\211\247\350\241\214\346\267\261\345\261\202\345\244\215\345\210\266.md" "b/content/zh/docs/Developerguide/\344\275\277\347\224\250CREATE TABLE LIKE\346\211\247\350\241\214\346\267\261\345\261\202\345\244\215\345\210\266.md" new file mode 100644 index 000000000..c30c31d0c --- /dev/null +++ "b/content/zh/docs/Developerguide/\344\275\277\347\224\250CREATE TABLE LIKE\346\211\247\350\241\214\346\267\261\345\261\202\345\244\215\345\210\266.md" @@ -0,0 +1,31 @@ +# 使用CREATE TABLE LIKE执行深层复制 + +该方法使用CREATE TABLE LIKE语句创建原始表的副本,将原始表的数据填充至副本并重命名副本,完成原始表的复制。该方法不继承父表的主键和外键属性,您可以使用ALTER TABLE语句来添加它们。 + +## 操作步骤 + +1. 使用CREATE TABLE LIKE语句创建表customer\_t的副本customer\_t\_copy。 + + ``` + postgres=# CREATE TABLE customer_t_copy (LIKE customer_t); + ``` + +2. 使用INSERT INTO…SELECT语句向副本填充原始表中的数据。 + + ``` + postgres=# INSERT INTO customer_t_copy (SELECT * FROM customer_t); + ``` + +3. 删除原始表。 + + ``` + postgres=# DROP TABLE customer_t; + ``` + +4. 使用ALTER TABLE语句将副本重命名为原始表名称。 + + ``` + postgres=# ALTER TABLE customer_t_copy RENAME TO customer_t; + ``` + + diff --git "a/content/zh/docs/Developerguide/\344\275\277\347\224\250CREATE TABLE\346\211\247\350\241\214\346\267\261\345\261\202\345\244\215\345\210\266.md" "b/content/zh/docs/Developerguide/\344\275\277\347\224\250CREATE TABLE\346\211\247\350\241\214\346\267\261\345\261\202\345\244\215\345\210\266.md" new file mode 100644 index 000000000..1ba5075d4 --- /dev/null +++ "b/content/zh/docs/Developerguide/\344\275\277\347\224\250CREATE TABLE\346\211\247\350\241\214\346\267\261\345\261\202\345\244\215\345\210\266.md" @@ -0,0 +1,40 @@ +# 使用CREATE TABLE执行深层复制 + +该方法使用CREATE TABLE语句创建原始表的副本,将原始表的数据填充至副本并重命名副本,完成原始表的复制。 + +在创建新表时,可以指定表以及列属性,包括主键和外键。 + +## 操作步骤 + +执行如下步骤对表customer\_t进行深层复制。 + +1. 使用CREATE TABLE语句创建表customer\_t的副本customer\_t\_copy。 + + ``` + postgres=# CREATE TABLE customer_t_copy + ( c_customer_sk integer, + c_customer_id char(5), + c_first_name char(6), + c_last_name char(8) + ) ; + ``` + +2. 使用INSERT INTO…SELECT语句向副本填充原始表中的数据。 + + ``` + postgres=# INSERT INTO customer_t_copy (SELECT * FROM customer_t); + ``` + +3. 删除原始表。 + + ``` + postgres=# DROP TABLE customer_t; + ``` + +4. 使用ALTER TABLE语句将副本重命名为原始表名称。 + + ``` + postgres=# ALTER TABLE customer_t_copy RENAME TO customer_t; + ``` + + diff --git "a/content/zh/docs/Developerguide/\345\205\263\344\272\216COPY FROM STDIN\345\257\274\345\205\245\346\225\260\346\215\256.md" "b/content/zh/docs/Developerguide/\345\205\263\344\272\216COPY FROM STDIN\345\257\274\345\205\245\346\225\260\346\215\256.md" new file mode 100644 index 000000000..31ca91d1d --- /dev/null +++ "b/content/zh/docs/Developerguide/\345\205\263\344\272\216COPY FROM STDIN\345\257\274\345\205\245\346\225\260\346\215\256.md" @@ -0,0 +1,9 @@ +# 关于COPY FROM STDIN导入数据 + +这种方式适合数据写入量不太大, 并发度不太高的场景。 + +用户可以使用以下方式通过COPY FROM STDIN语句直接向openGauss写入数据。 + +- 通过键盘输入向openGauss写入数据。详细请参见[COPY](COPY.md)。 +- 通过JDBC驱动的CopyManager接口从文件或者数据库向openGauss写入数据。此方法支持COPY语法中copy option的所有参数。 + diff --git "a/content/zh/docs/Developerguide/\345\256\211\345\205\250\345\222\214\350\256\244\350\257\201\357\274\210postgresql conf\357\274\211.md" "b/content/zh/docs/Developerguide/\345\256\211\345\205\250\345\222\214\350\256\244\350\257\201\357\274\210postgresql conf\357\274\211.md" new file mode 100644 index 000000000..c0af033a5 --- /dev/null +++ "b/content/zh/docs/Developerguide/\345\256\211\345\205\250\345\222\214\350\256\244\350\257\201\357\274\210postgresql conf\357\274\211.md" @@ -0,0 +1,381 @@ +# 安全和认证(postgresql.conf) + +介绍设置客户端和服务器的安全认证方式的相关参数。 + +## authentication\_timeout + +**参数说明:**完成客户端认证的最长时间。如果一个客户端没有在这段时间里完成与服务器端的认证,则服务器自动中断与客户端的连接,这样就避免了出问题的客户端无限制地占用连接数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,最小值为1,最大值为600,最小单位为s。 + +**默认值:**1min + +## auth\_iteration\_count + +**参数说明:**认证加密信息生成过程中使用的迭代次数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,2048-134217728。 + +**默认值:**10000 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>迭代次数设置过小会降低口令存储的安全性,设置过大会导致认证、用户创建等涉及口令加密的场景性能劣化,请根据实际硬件条件合理设置迭代次数,推荐采用默认迭代次数。 + +## session\_timeout + +**参数说明:**表明与服务器建立链接后,不进行任何操作的最长时间。 + +该参数属于USERSET类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,0-86400,最小单位为s,0表示关闭超时设置。 + +**默认值:**10min + +>![](public_sys-resources/icon-notice.gif) **须知:** +>openGauss gsql客户端中有自动重连机制,所以针对初始化用户本地连接,超时后gsql表现的现象为断开后重连。 + +## ssl + +**参数说明:**启用SSL连接。请在使用这个选项之前阅读[使用gsql连接](使用gsql连接.md)。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**布尔型 + +- on表示启用SSL连接。 +- off表示不启用SSL连接。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>openGauss目前支持SSL的场景为客户端连接数据库主节点场景,该参数目前建议只在数据库主节点中开启,数据库节点默认值为off。开启此参数需要同时配置ssl\_cert\_file、ssl\_key\_file和ssl\_ca\_file等参数及对应文件,不正确的配置可能会导致openGauss无法正常启动。 + +**默认值:**on + +## require\_ssl + +**参数说明:**设置服务器端是否强制要求SSL连接,该参数只有当参数[ssl](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s8c4647db116f44c4b9ce3dceee3d6ffa)为on时才有效。请在使用这个选项之前阅读[使用gsql连接](使用gsql连接.md)。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**布尔型 + +- on表示服务器端强制要求SSL连接。 +- off表示服务器端对是否通过SSL连接不作强制要求。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>openGauss目前支持SSL的场景为客户端连接数据库主节点场景,该参数目前建议只在数据库主节点中开启。 + +**默认值:**off + +## ssl\_ciphers + +**参数说明:**指定SSL支持的加密算法列表。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串,如果指定多个加密算法,加密算法之间需要以分号分割。详细请参见[表4](用SSL进行安全的TCP-IP连接.md#zh-cn_topic_0237121092_zh-cn_topic_0059778374_t34eea0830ef94be1a866f0410ba3eb07)获取支持的加密算法。 + +**默认值:**ALL + +## ssl\_renegotiation\_limit + +**参数说明:**指定在会话密钥重新协商之前,通过SSL加密通道可以传输的流量。这个重新协商流量限制机制可以减少攻击者针对大量数据使用密码分析法破解密钥的几率,但是也带来较大的性能损失。流量是指发送和接受的流量总和。使用SSL重协商机制可能引入其他风险,因此已禁用SSL重协商机制,为保持版本兼容保留此参数,修改参数配置不再起作用。 + +该参数属于USERSET类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,最小值为0,最大值为2147483647。单位为KB。其中0表示禁用重新协商机制。 + +**默认值:**0 + +## ssl\_cert\_file + +**参数说明:**指定包含SSL服务器证书的文件的名称。必须使用相对路径,相对路径是相对于数据目录的。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串 + +**默认值:**server.crt + +## ssl\_key\_file + +**参数说明:**指定包含SSL私钥的文件名称。必须使用相对路径,相对路径是相对于数据目录的。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串 + +**默认值:**server.key + +## ssl\_ca\_file + +**参数说明:**指定包含CA信息的文件的名称。必须使用相对路径,相对路径是相对于数据目录的。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串 + +**默认值:**cacert.pem + +## ssl\_crl\_file + +**参数说明**:指定包含CRL信息的文件的名称。必须使用相对路径,相对路径是相对于数据目录的。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围**:字符串,其中空表示没有CA文件被加载,不进行客户端证书验证。 + +**默认值**:空 + +## krb\_server\_keyfile + +**参数说明:**指定Kerberos服务主配置文件的位置,详细请参见[客户端接入认证](客户端接入认证.md)。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串 + +**默认值:**空 + +## krb\_srvname + +**参数说明:**设置Kerberos服务名,详细请参见[客户端接入认证](客户端接入认证.md)。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串 + +**默认值:**postgres + +## krb\_caseins\_users + +**参数说明:**设置Kerberos用户名是否大小写敏感。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**布尔型 + +- on表示大小写不敏感 +- off表示大小写敏感 + +**默认值:**off + +## modify\_initial\_password + +**参数说明:**当openGauss安装成功后,数据库中仅存在一个初始用户(UID为10的用户)。客户通过该帐户初次登录数据库进行操作时,该参数决定是否要对该初始帐户的密码进行修改。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**布尔型 + +- on表示openGauss安装成功后初始用户首次登录操作前需要修改初始密码。 +- off表示openGauss安装成功后初始用户无需修改初始密码即可进行操作。 + +**默认值:**off + +## password\_policy + +**参数说明:**在使用CREATE ROLE/USER或者ALTER ROLE/USER命令创建或者修改openGauss帐户时,该参数决定是否进行密码复杂度检查。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>从安全性考虑,请勿关闭密码复杂度策略。 + +**取值范围:**0、1 + +- 0表示不采用任何密码复杂度策略。 +- 1表示采用默认密码复杂度校验策略。 + +**默认值:**1 + +## password\_reuse\_time + +**参数说明:**在使用ALTER USER或者ALTER ROLE修改用户密码时,该参数指定是否对新密码进行可重用天数检查。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>修改密码时会检查配置参数[password\_reuse\_time](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)。 +>- 当[password\_reuse\_time](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)都为正数时,只要满足其中任一个,即可认为密码可以重用。 +>- 当[password\_reuse\_time](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)为0时,表示不限制密码重用天数,仅限制密码重用次数。 +>- 当[password\_reuse\_max](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)为0时,表示不限制密码重用次数,仅限制密码重用天数。 +>- 当[password\_reuse\_time](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)都为0时,表示不对密码重用进行限制。 + +**取值范围:**浮点型(天),最小值为0,最大值为3650。 + +- 0表示不检查密码可重用的天数。 +- 正数表示新密码不能为该值指定的天数内使用过的密码。 + +**默认值:**60 + +## password\_reuse\_max + +**参数说明:**在使用ALTER USER或者ALTER ROLE修改用户密码时,该参数指定是否对新密码进行可重用次数检查。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>修改密码时会检查配置参数[password\_reuse\_time](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)。 +>- 当[password\_reuse\_time](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)都为正数时,只要满足其中任一个,即可认为密码可以重用。 +>- 当[password\_reuse\_time](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)为0时,表示不限制密码重用天数,仅限制密码重用次数。 +>- 当[password\_reuse\_max](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)为0时,表示不限制密码重用次数,仅限制密码重用天数。 +>- 当[password\_reuse\_time](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)都为0时,表示不对密码重用进行限制。 + +**取值范围:**整型,最小值为0,最大值为1000。 + +- 0表示不检查密码可重用次数。 +- 正整数表示新密码不能为该值指定的次数内使用过的密码。 + +**默认值:**0 + +## password\_lock\_time + +**参数说明:**该参数指定帐户被锁定后自动解锁的时间。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>password\_lock\_time和[failed\_login\_attempts](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_sc155ec2258b34e78a2ffcf797e66b959)必须都为正数时锁定和解锁功能才能生效。 + +**取值范围:**浮点型,最小值为0,最大值为365,单位为天。 + +- 0表示密码验证失败时,自动锁定功能不生效。 +- 正数表示帐户被锁定后,当锁定时间超过password\_lock\_time设定的值时,帐户将会被自行解锁。 + +**默认值:**1 + +## failed\_login\_attempts + +**参数说明:**在任意时候,如果输入密码错误的次数达到failed\_login\_attempts则当前帐户被锁定,password\_lock\_time秒后被自动解锁。 例如,登录时输入密码失败,ALTER USER时修改密码失败等。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>failed\_login\_attempts和[password\_lock\_time](#zh-cn_topic_0237124696_zh-cn_topic_0059778664_s5e488e82235e4bd5b470b57a44a38c27)必须都为正数时锁定和解锁功能才能生效。 + +**取值范围:**整型,最小值为0,最大值为1000。 + +- 0表示自动锁定功能不生效。 +- 正整数表示当错误密码次数达到failed\_login\_attempts设定的值时,当前帐户将被锁定。 + +**默认值:**10 + +## password\_encryption\_type + +**参数说明:**该字段决定采用何种加密方式对用户密码进行加密存储。修改此参数的配置不会自动触发已有用户密码加密方式的修改,只会影响新创建用户或修改用户密码操作。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**0、1、2 + +- 0表示采用md5方式对密码加密。 +- 1表示采用sha256和md5两种方式分别对密码加密。 +- 2表示采用sha256方式对密码加密。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>md5为不安全的加密算法,不建议用户使用。 + +**默认值:**2 + +## password\_min\_length + +**参数说明:**该字段决定帐户密码的最小长度。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,6\~999个字符。 + +**默认值:**8 + +## password\_max\_length + +**参数说明:**该字段决定帐户密码的最大长度。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,6\~999个字符。 + +**默认值:**32 + +## password\_min\_uppercase + +**参数说明:**该字段决定帐户密码中至少需要包含大写字母个数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,0\~999 + +- 0表示没有限制。 +- 1\~999表示创建账户所指定的密码中至少需要包含大写字母个数。 + +**默认值:**0 + +## password\_min\_lowercase + +**参数说明:**该字段决定帐户密码中至少需要包含小写字母的个数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,0\~999 + +- 0表示没有限制。 +- 1\~999表示创建帐户所指定的密码中至少需要包含小写字母个数。 + +**默认值:**0 + +## password\_min\_digital + +**参数说明:**该字段决定帐户密码中至少需要包含数字的个数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,0\~999 + +- 0表示没有限制。 +- 1\~999表示创建帐户所指定的密码中至少需要包含数字个数。 + +**默认值:**0 + +## password\_min\_special + +**参数说明:**该字段决定帐户密码中至少需要包含特殊字符个数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,0\~999 + +- 0表示没有限制。 +- 1\~999表示创建帐户所指定的密码中至少需要包含特殊字符个数。 + +**默认值:**0 + +## password\_effect\_time + +**参数说明:**该字段决定帐户密码的有效时间。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**浮点型,最小值为0,最大值为999,单位为天。 + +- 0表示不开启有效期限制功能。 +- 1\~999表示创建帐户所指定的密码有效期,临近或超过有效期系统会提示用户修改密码。 + +**默认值:**90 + +## password\_notify\_time + +**参数说明:**该字段决定帐户密码到期前提醒的天数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,最小值为0,最大值为999,单位为天。 + +- 0表示不开启提醒功能。 +- 1\~999表示帐户密码到期前提醒的天数。 + +**默认值:**7 + diff --git "a/content/zh/docs/Developerguide/\345\256\242\346\210\267\347\253\257\346\216\245\345\205\245\350\256\244\350\257\201 0.md" "b/content/zh/docs/Developerguide/\345\256\242\346\210\267\347\253\257\346\216\245\345\205\245\350\256\244\350\257\201 0.md" new file mode 100644 index 000000000..662972982 --- /dev/null +++ "b/content/zh/docs/Developerguide/\345\256\242\346\210\267\347\253\257\346\216\245\345\205\245\350\256\244\350\257\201 0.md" @@ -0,0 +1,15 @@ +# 客户端接入认证 + +- **[配置客户端接入认证](配置客户端接入认证-1.md)** + +- **[配置文件参考](配置文件参考-2.md)** + +- **[用SSL进行安全的TCP/IP连接](用SSL进行安全的TCP-IP连接-3.md)** + +- **[用SSH隧道进行安全的TCP/IP连接](用SSH隧道进行安全的TCP-IP连接-4.md)** + +- **[查看数据库连接数](查看数据库连接数-5.md)** + +- **[SSL证书管理](SSL证书管理-6.md)** + + diff --git "a/content/zh/docs/Developerguide/\345\257\274\345\207\272\346\211\200\346\234\211\346\225\260\346\215\256\345\272\223 13.md" "b/content/zh/docs/Developerguide/\345\257\274\345\207\272\346\211\200\346\234\211\346\225\260\346\215\256\345\272\223 13.md" new file mode 100644 index 000000000..6efccec95 --- /dev/null +++ "b/content/zh/docs/Developerguide/\345\257\274\345\207\272\346\211\200\346\234\211\346\225\260\346\215\256\345\272\223 13.md" @@ -0,0 +1,95 @@ +# 导出所有数据库 + +openGauss支持使用gs\_dumpall工具导出所有数据库的全量信息,包含openGauss中每个数据库信息和公共的全局对象信息。可根据需要自定义导出如下信息: + +- 导出所有数据库全量信息,包含openGauss中每个数据库信息和公共的全局对象信息(包含角色和表空间信息)。 + + 使用导出的全量信息可以创建与openGauss相同的一个openGauss,拥有相同数据库和公共全局对象,且库中数据也与当前各库相同。 + +- 仅导出数据,即导出每个数据库中的数据,且不包含所有对象定义和公共的全局对象信息。 +- 仅导出所有对象定义,包括:表空间、库定义、函数定义、模式定义、表定义、索引定义和存储过程定义等。 + + 使用导出的对象定义,可以快速创建与openGauss相同的一个openGauss,拥有相同的数据库和表空间,但是库中并无原数据库的数据。 + + +## 操作步骤 + +1. 以操作系统用户omm登录数据库主节点。 +2. 使用gs\_dumpall一次导出所有数据库信息。 + + ``` + gs_dumpall -W Bigdata@123 -U omm -f /home/omm/backup/MPPDB_backup.sql -p 8000 + ``` + + **表 1** 常用参数说明 + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数说明

+

举例

+

-U

+

连接数据库的用户名,需要是openGauss管理员用户。

+

-U omm

+

-W

+

指定用户连接的密码。

+
  • 如果主机的认证策略是trust,则不会对数据库管理员进行密码验证,即无需输入-W选项;
  • 如果没有-W选项,并且不是数据库管理员,会提示用户输入密码。
+

-W Bigdata@123

+

-f

+

将导出文件发送至指定目录文件夹。如果这里省略,则使用标准输出。

+

-f /home/omm/backup/MPPDB_backup.sql

+

-p

+

指定服务器所监听的TCP端口或本地Unix域套接字后缀,以确保连接。

+

-p 8000

+
+ + 其他参数说明请参见《工具参考》中“服务端工具 \> gs\_dumpall”章节。 + + +## 示例 + +示例一:执行gs\_dumpall,导出所有数据库全量信息(omm用户为管理员用户),导出文件为文本格式。执行命令后,会有很长的打印信息,最终出现total time即代表执行成功。示例中将不体现中间的打印信息。 + +``` +gs_dumpall -W Bigdata@123 -U omm -f /home/omm/backup/MPPDB_backup.sql -p 8000 +gs_dumpall[port='8000'][2017-07-21 15:57:31]: dumpall operation successful +gs_dumpall[port='8000'][2017-07-21 15:57:31]: total time: 9627 ms +``` + +示例二:执行gs\_dumpall,仅导出所有数据库定义(omm用户为管理员用户),导出文件为文本格式。执行命令后,会有很长的打印信息,最终出现total time即代表执行成功。示例中将不体现中间的打印信息。 + +``` +gs_dumpall -W Bigdata@123 -U omm -f /home/omm/backup/MPPDB_backup.sql -p 8000 -s +gs_dumpall[port='8000'][2018-11-14 11:28:14]: dumpall operation successful +gs_dumpall[port='8000'][2018-11-14 11:28:14]: total time: 4147 ms +``` + +示例三:执行gs\_dumpall,仅导出所有数据库中数据,并对导出文件进行加密,导出文件为文本格式。执行命令后,会有很长的打印信息,最终出现total time即代表执行成功。示例中将不体现中间的打印信息。 + +``` +gs_dumpall -f /home/omm/backup/MPPDB_backup.sql -p 8000 -a --with-encryption AES128 --with-key 1234567812345678 +gs_dumpall[port='8000'][2018-11-14 11:32:26]: dumpall operation successful +gs_dumpall[port='8000'][2018-11-14 11:23:26]: total time: 4147 ms +``` + diff --git "a/content/zh/docs/Developerguide/\346\227\245\346\234\237 \346\227\266\351\227\264\347\261\273\345\236\213.md" "b/content/zh/docs/Developerguide/\346\227\245\346\234\237 \346\227\266\351\227\264\347\261\273\345\236\213.md" new file mode 100644 index 000000000..0975a590e --- /dev/null +++ "b/content/zh/docs/Developerguide/\346\227\245\346\234\237 \346\227\266\351\227\264\347\261\273\345\236\213.md" @@ -0,0 +1,616 @@ +# 日期/时间类型 + +openGauss支持的日期/时间类型请参见[表1](#zh-cn_topic_0237121952_zh-cn_topic_0059779229_zh-cn_topic_0058965827_table60826369)。该类型的操作符和内置函数请参见[时间和日期处理函数和操作符](时间和日期处理函数和操作符.md)。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>如果其他的数据库时间格式和openGauss的时间格式不一致,可通过修改配置参数DateStyle的值来保持一致。 + +**表 1** 日期/时间类型 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

名称

+

描述

+

存储空间

+

DATE

+

日期和时间。

+

4字节(实际存储空间大小为8字节)

+

TIME [(p)] [WITHOUT TIME ZONE]

+

只用于一日内时间。

+

p表示小数点后的精度,取值范围为0~6。

+

8字节

+

TIME [(p)] [WITH TIME ZONE]

+

只用于一日内时间,带时区。

+

p表示小数点后的精度,取值范围为0~6。

+

12字节

+

TIMESTAMP[(p)] [WITHOUT TIME ZONE]

+

日期和时间。

+

p表示小数点后的精度,取值范围为0~6。

+

8字节

+

TIMESTAMP[(p)][WITH TIME ZONE]

+

日期和时间,带时区。TIMESTAMP的别名为TIMESTAMPTZ。

+

p表示小数点后的精度,取值范围为0~6。

+

8字节

+

SMALLDATETIME

+

日期和时间,不带时区。

+

精确到分钟,秒位大于等于30秒进一位。

+

8字节

+

INTERVAL DAY (l) TO SECOND (p)

+

时间间隔,X天X小时X分X秒。

+
  • l:天数的精度,取值范围为0~6。为适配A语法,未实现具体功能。
  • p:秒数的精度,取值范围为0~6。小数末尾的零不显示。
+

16字节

+

INTERVAL [FIELDS] [ (p) ]

+

时间间隔。

+
  • fields:可以是YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,DAY TO HOUR,DAY TO MINUTE,DAY TO SECOND,HOUR TO MINUTE,HOUR TO SECOND,MINUTE TO SECOND。
+
  • p:秒数的精度,取值范围为0~6,且fields为SECOND,DAY TO SECOND,HOUR TO SECOND或MINUTE TO SECOND时,参数p才有效。小数末尾的零不显示。
+

12字节

+

reltime

+

相对时间间隔。格式为:

+

X years X mons X days XX:XX:XX。

+
  • 采用儒略历计时,规定一年为365.25天,一个月为30天,计算输入值对应的相对时间间隔,输出采用POSTGRES格式。
+

4字节

+
+ +示例: + +``` +--创建表。 +postgres=# CREATE TABLE date_type_tab(coll date); + +--插入数据。 +postgres=# INSERT INTO date_type_tab VALUES (date '12-10-2010'); + +--查看数据。 +postgres=# SELECT * FROM date_type_tab; + coll +--------------------- + 2010-12-10 00:00:00 +(1 row) + +--删除表。 +postgres=# DROP TABLE date_type_tab; + +--创建表。 +postgres=# CREATE TABLE time_type_tab (da time without time zone ,dai time with time zone,dfgh timestamp without time zone,dfga timestamp with time zone, vbg smalldatetime); + +--插入数据。 +postgres=# INSERT INTO time_type_tab VALUES ('21:21:21','21:21:21 pst','2010-12-12','2013-12-11 pst','2003-04-12 04:05:06'); + +--查看数据。 +postgres=# SELECT * FROM time_type_tab; + da | dai | dfgh | dfga | vbg +----------+-------------+---------------------+------------------------+--------------------- + 21:21:21 | 21:21:21-08 | 2010-12-12 00:00:00 | 2013-12-11 16:00:00+08 | 2003-04-12 04:05:00 +(1 row) + +--删除表。 +postgres=# DROP TABLE time_type_tab; + +--创建表。 +postgres=# CREATE TABLE day_type_tab (a int,b INTERVAL DAY(3) TO SECOND (4)); + +--插入数据。 +postgres=# INSERT INTO day_type_tab VALUES (1, INTERVAL '3' DAY); + +--查看数据。 +postgres=# SELECT * FROM day_type_tab; + a | b +---+-------- + 1 | 3 days +(1 row) + +--删除表。 +postgres=# DROP TABLE day_type_tab; + +--创建表。 +postgres=# CREATE TABLE year_type_tab(a int, b interval year (6)); + +--插入数据。 +postgres=# INSERT INTO year_type_tab VALUES(1,interval '2' year); + +--查看数据。 +postgres=# SELECT * FROM year_type_tab; + a | b +---+--------- + 1 | 2 years +(1 row) + +--删除表。 +postgres=# DROP TABLE year_type_tab; +``` + +## 日期输入 + +日期和时间的输入几乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、传统POSTGRES格式或者其它的形式。系统支持按照日、月、年的顺序自定义日期输入。如果把DateStyle参数设置为MDY就按照“月-日-年”解析,设置为DMY就按照“日-月-年”解析,设置为YMD就按照“年-月-日”解析。 + +日期的文本输入需要加单引号包围,语法如下: + +type \[ \( p \) \] 'value' + +可选的精度声明中的p是一个整数,表示在秒域中小数部分的位数。[表2](#zh-cn_topic_0237121952_zh-cn_topic_0059779229_t0606b0d8bec74d34a6440ef1de8d1e67)显示了date类型的输入方式。 + +**表 2** 日期输入方式 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

例子

+

描述

+

1999-01-08

+

ISO 8601格式(建议格式),任何方式下都是1999年1月8号。

+

January 8, 1999

+

在任何datestyle输入模式下都无歧义。

+

1/8/1999

+

有歧义,在MDY模式下是一月八号,在DMY模式下是八月一号。

+

1/18/1999

+

MDY模式下是一月十八日,其它模式下被拒绝。

+

01/02/03

+
  • MDY模式下的2003年1月2日。
  • DMY模式下的2003年2月1日。
  • YMD模式下的2001年2月3日。
+

1999-Jan-08

+

任何模式下都是1月8日。

+

Jan-08-1999

+

任何模式下都是1月8日。

+

08-Jan-1999

+

任何模式下都是1月8日。

+

99-Jan-08

+

YMD模式下是1月8日,否则错误。

+

08-Jan-99

+

一月八日,除了在YMD模式下是错误的之外。

+

Jan-08-99

+

一月八日,除了在YMD模式下是错误的之外。

+

19990108

+

ISO 8601;任何模式下都是1999年1月8日。

+

990108

+

ISO 8601;任何模式下都是1999年1月8日。

+

1999.008

+

年和年里的第几天。

+

J2451187

+

儒略日。

+

January 8, 99 BC

+

公元前99年。

+
+ +示例: + +``` +--创建表。 +postgres=# CREATE TABLE date_type_tab(coll date); + +--插入数据。 +postgres=# INSERT INTO date_type_tab VALUES (date '12-10-2010'); + +--查看数据。 +postgres=# SELECT * FROM date_type_tab; + coll +--------------------- + 2010-12-10 00:00:00 +(1 row) + +--查看日期格式。 +postgres=# SHOW datestyle; + DateStyle +----------- + ISO, MDY +(1 row) + +--设置日期格式。 +postgres=# SET datestyle='YMD'; +SET + +--插入数据。 +postgres=# INSERT INTO date_type_tab VALUES(date '2010-12-11'); + +--查看数据。 +postgres=# SELECT * FROM date_type_tab; + coll +--------------------- + 2010-12-10 00:00:00 + 2010-12-11 00:00:00 +(2 rows) + +--删除表。 +postgres=# DROP TABLE date_type_tab; +``` + +## 时间 + +时间类型包括time \[ \(p\) \] without time zone和time \[ \(p\) \] with time zone。如果只写time等效于time without time zone。 + +如果在time without time zone类型的输入中声明了时区,则会忽略这个时区。 + +时间输入类型的详细信息请参见[表3](#zh-cn_topic_0237121952_zh-cn_topic_0059779229_tc5d1089552ca4fb2a9f5ba27767a26b6),时区输入类型的详细信息请参加[表4](#zh-cn_topic_0237121952_zh-cn_topic_0059779229_te78a582bdc984cd3b5ecac5502f7793e)。 + +**表 3** 时间输入 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

例子

+

描述

+

05:06.8

+

ISO 8601

+

4:05:06

+

ISO 8601

+

4:05

+

ISO 8601

+

40506

+

ISO 8601

+

4:05 AM

+

与04:05一样,AM不影响数值

+

4:05 PM

+

与16:05一样,输入小时数必须<= 12

+

04:05:06.789-8

+

ISO 8601

+

04:05:06-08:00

+

ISO 8601

+

04:05-08:00

+

ISO 8601

+

040506-08

+

ISO 8601

+

04:05:06 PST

+

缩写的时区

+

2003-04-12 04:05:06 America/New_York

+

用名称声明的时区

+
+ +**表 4** 时区输入 + + + + + + + + + + + + + + + + + + + + + + +

例子

+

描述

+

PST

+

太平洋标准时间(Pacific Standard Time)

+

America/New_York

+

完整时区名称

+

-8:00

+

ISO 8601与PST的偏移

+

-800

+

ISO 8601与PST的偏移

+

-8

+

ISO 8601与PST的偏移

+
+ +示例: + +``` +postgres=# SELECT time '04:05:06'; + time +---------- + 04:05:06 +(1 row) + +postgres=# SELECT time '04:05:06 PST'; + time +---------- + 04:05:06 +(1 row) + +postgres=# SELECT time with time zone '04:05:06 PST'; + timetz +------------- + 04:05:06-08 +(1 row) +``` + +## 特殊值 + +openGauss支持几个特殊值,在读取的时候将被转换成普通的日期/时间值,请参考[表5](#zh-cn_topic_0237121952_zh-cn_topic_0059779229_t8366745d681748c28d5a76843c7f0d4b)。 + +**表 5** 特殊值 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

输入字符串

+

适用类型

+

描述

+

epoch

+

date,timestamp

+

1970-01-01 00:00:00+00 (Unix系统零时)

+

infinity

+

timestamp

+

比任何其他时间戳都晚

+

-infinity

+

timestamp

+

比任何其他时间戳都早

+

now

+

date,time,timestamp

+

当前事务的开始时间

+

today

+

date,timestamp

+

今日午夜

+

tomorrow

+

date,timestamp

+

明日午夜

+

yesterday

+

date,timestamp

+

昨日午夜

+

allballs

+

time

+

00:00:00.00 UTC

+
+ +## 时间段输入 + +reltime的输入方式可以采用任何合法的时间段文本格式,包括数字形式(含负数和小数)及时间形式,其中时间形式的输入支持SQL标准格式、ISO-8601格式、POSTGRES格式等。另外,文本输入需要加单引号。 + +时间段输入的详细信息请参考[表6 时间段输入](#zh-cn_topic_0237121952_table1747116463276)。 + +**表 6** 时间段输入 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

输入示例

+

输出结果

+

描述

+

60

+

2 mons

+

采用数字表示时间段,默认单位是day,可以是小数或负数。特别的,负数时间段,在语义上,可以理解为“早于多久”。

+

31.25

+

1 mons 1 days 06:00:00

+

-365

+

-12 mons -5 days

+

1 years 1 mons 8 days 12:00:00

+

1 years 1 mons 8 days 12:00:00

+

采用POSTGRES格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。

+

-13 months -10 hours

+

-1 years -25 days -04:00:00

+

-2 YEARS +5 MONTHS 10 DAYS

+

-1 years -6 mons -25 days -06:00:00

+

P-1.1Y10M

+

-3 mons -5 days -06:00:00

+

采用ISO-8601格式表示时间段,可以正负混用,不区分大小写,输出结果为将输入时间段计算并转换得到的简化POSTGRES格式时间段。

+

+

-12H

+

-12:00:00

+
+ +示例: + +``` +--创建表。 +postgres=# CREATE TABLE reltime_type_tab(col1 character(30), col2 reltime); + +--插入数据。 +postgres=# INSERT INTO reltime_type_tab VALUES ('90', '90'); +postgres=# INSERT INTO reltime_type_tab VALUES ('-366', '-366'); +postgres=# INSERT INTO reltime_type_tab VALUES ('1975.25', '1975.25'); +postgres=# INSERT INTO reltime_type_tab VALUES ('-2 YEARS +5 MONTHS 10 DAYS', '-2 YEARS +5 MONTHS 10 DAYS'); +postgres=# INSERT INTO reltime_type_tab VALUES ('30 DAYS 12:00:00', '30 DAYS 12:00:00'); +postgres=# INSERT INTO reltime_type_tab VALUES ('P-1.1Y10M', 'P-1.1Y10M'); + +--查看数据。 +postgres=# SELECT * FROM reltime_type_tab; + col1 | col2 +--------------------------------+------------------------------------- + 1975.25 | 5 years 4 mons 29 days + -2 YEARS +5 MONTHS 10 DAYS | -1 years -6 mons -25 days -06:00:00 + P-1.1Y10M | -3 mons -5 days -06:00:00 + -366 | -1 years -18:00:00 + 90 | 3 mons + 30 DAYS 12:00:00 | 1 mon 12:00:00 +(6 rows) + +--删除表。 +postgres=# DROP TABLE reltime_type_tab; +``` + diff --git "a/content/zh/docs/Developerguide/\346\233\264\346\226\260\350\241\250\344\270\255\346\225\260\346\215\256 11.md" "b/content/zh/docs/Developerguide/\346\233\264\346\226\260\350\241\250\344\270\255\346\225\260\346\215\256 11.md" new file mode 100644 index 000000000..7f2e853c0 --- /dev/null +++ "b/content/zh/docs/Developerguide/\346\233\264\346\226\260\350\241\250\344\270\255\346\225\260\346\215\256 11.md" @@ -0,0 +1,7 @@ +# 更新表中数据 + +- **[使用DML命令更新表](使用DML命令更新表.md)** + +- **[使用合并方式更新和插入数据](使用合并方式更新和插入数据.md)** + + diff --git "a/content/zh/docs/Developerguide/\346\237\245\347\234\213\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\225\260 5.md" "b/content/zh/docs/Developerguide/\346\237\245\347\234\213\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\225\260 5.md" new file mode 100644 index 000000000..02527318a --- /dev/null +++ "b/content/zh/docs/Developerguide/\346\237\245\347\234\213\346\225\260\346\215\256\345\272\223\350\277\236\346\216\245\346\225\260 5.md" @@ -0,0 +1,116 @@ +# 查看数据库连接数 + +## 背景信息 + +当用户连接数达到上限后,无法建立新的连接。因此,当数据库管理员发现某用户无法连接到数据库时,需要查看是否连接数达到了上限。控制数据库连接的主要以下几种选项。 + +- 全局的最大连接数:由运行参数max\_connections指定,默认值为800。 +- 某用户的连接数:在创建用户时由CREATE ROLE命令的CONNECTION LIMIT connlimit子句直接设定,也可以在设定以后用ALTER ROLE的CONNECTION LIMIT connlimit子句修改。 +- 某数据库的连接数:在创建数据库时,由CREATE DATABASE的CONNECTION LIMIT connlimit参数指定。 +- 预留连接供gs\_clean使用:需要预留连接给gs\_clean工具进行残留事务清理,以免由于残留事务长期阻塞系统正常运行。 + +## 操作步骤 + +1. 以操作系统用户omm登录数据库主节点。 +2. 使用如下命令连接数据库。 + + ``` + gsql -d postgres -p 8000 + ``` + + postgres为需要连接的数据库名称,8000为数据库主节点的端口号。 + + 连接成功后,系统显示类似如下信息: + + ``` + gsql ((openGauss 1.0 build 290d125f) compiled at 2020-05-08 02:59:43 commit 2143 last mr 131 + Non-SSL connection (SSL connection is recommended when requiring high-security) + Type "help" for help. + + postgres=# + ``` + +3. 查看全局会话连接数限制。 + + ``` + postgres=# SHOW max_connections; + max_connections + ----------------- + 800 + (1 row) + ``` + + 其中800是最大会话连接数。 + +4. 查看已使用的会话连接数。 + + 具体命令请参见[表1](#zh-cn_topic_0237121094_zh-cn_topic_0059779140_t608a1965463e41f1b6eacd02f97a65ba)。 + + >![](public_sys-resources/icon-notice.gif) **须知:** + >除了创建的时候用双引号引起的数据库和用户名称外,以下命令中用到的数据库名称和用户名称,其中包含的英文字母必须使用小写。 + + **表 1** 查看会话连接数 + + + + + + + + + + + + + + + + + + + + + + +

描述

+

命令

+

查看指定用户的会话连接数上限。

+

执行如下命令查看连接到指定用户omm的会话连接数上限。其中-1表示没有对用户omm设置连接数的限制。

+
postgres=# SELECT ROLNAME,ROLCONNLIMIT FROM PG_ROLES WHERE ROLNAME='omm';
+     rolname  | rolconnlimit
+    ----------+--------------
+     omm |           -1
+    (1 row)
+

查看指定用户已使用的会话连接数。

+

执行如下命令查看指定用户omm已使用的会话连接数。其中,1表示omm已使用的会话连接数。

+
postgres=# SELECT COUNT(*) FROM V$SESSION WHERE USERNAME='omm';
+    
+     count
+    -------
+         1
+    (1 row)
+

查看指定数据库的会话连接数上限。

+

执行如下命令查看连接到指定数据库postgres的会话连接数上限。其中-1表示没有对数据库postgres设置连接数的限制。

+
postgres=# SELECT DATNAME,DATCONNLIMIT FROM PG_DATABASE WHERE DATNAME='postgres';
+    
+     datname  | datconnlimit
+    ----------+--------------
+     postgres |           -1
+    (1 row)
+

查看指定数据库已使用的会话连接数。

+

执行如下命令查看指定数据库postgres上已使用的会话连接数。其中,1表示数据库postgres上已使用的会话连接数。

+
postgres=# SELECT COUNT(*) FROM PG_STAT_ACTIVITY WHERE DATNAME='postgres';
+     count 
+    -------
+         1
+    (1 row)
+

查看所有用户已使用会话连接数。

+

执行如下命令查看所有用户已使用的会话连接数。

+
postgres=# SELECT COUNT(*) FROM V$SESSION;
+     count
+    -------
+         10
+    (1 row)
+
+ + diff --git "a/content/zh/docs/Developerguide/\346\246\202\350\277\260 12.md" "b/content/zh/docs/Developerguide/\346\246\202\350\277\260 12.md" new file mode 100644 index 000000000..9f3ef6eef --- /dev/null +++ "b/content/zh/docs/Developerguide/\346\246\202\350\277\260 12.md" @@ -0,0 +1,77 @@ +# 概述 + +openGauss提供的gs\_dump和gs\_dumpall工具,能够帮助用户导出需要的数据库对象或其相关信息。通过导入工具将导出的数据信息导入至需要的数据库,可以完成数据库信息的迁移。gs\_dump支持导出单个数据库或其内的对象,而gs\_dumpall支持导出openGauss中所有数据库或各库的公共全局对象。详细的使用场景见[表1](#zh-cn_topic_0237121167_table08278213504)。 + +**表 1** 适用场景 + + + + + + + + + + + + + + + + + + + + + + + + + +

适用场景

+

支持的导出粒度

+

支持的导出格式

+

配套的导入方法

+

导出单个数据库

+

数据库级导出

+
  • 导出全量信息。

    使用导出的全量信息可以创建一个与当前库相同的数据库,且库中数据也与当前库相同。

    +
  • 仅导出库中所有对象的定义,包含库定义、函数定义、模式定义、表定义、索引定义和存储过程定义等。

    使用导出的对象定义,可以快速创建一个相同的数据库,但是库中并无原数据库的数据。

    +
  • 仅导出数据。
+
  • 纯文本格式
  • 自定义归档格式
  • 目录归档格式
  • tar归档格式
+
+

模式级导出

+
  • 导出模式的全量信息。
  • 仅导出模式中数据。
  • 仅导出对象的定义,包含表定义、存储过程定义和索引定义等。
+
表级导出
  • 导出表的全量信息。
  • 仅导出表中数据。
  • 仅导出表的定义。
+
+

导出所有数据库

+

数据库级导出

+
  • 导出全量信息。

    使用导出的全量信息可以创建与openGauss相同的一个openGauss,拥有相同数据库和公共全局对象,且库中数据也与当前各库相同。

    +
  • 仅导出各数据库中的对象定义,包含表空间、库定义、函数定义、模式定义、表定义、索引定义和存储过程定义等。

    使用导出的对象定义,可以快速创建与openGauss相同的一个openGauss,拥有相同的数据库和表空间,但是库中并无原数据库的数据。

    +
  • 仅导出数据。
+

纯文本格式

+

数据文件导入请参见使用gsql元命令导入数据

+
各库公共全局对象导出
  • 仅导出表空间信息。
  • 仅导出角色信息。
  • 导出角色与表空间。
+
+
+ +gs\_dump和gs\_dumpall通过-U指定执行导出的用户帐户。如果当前使用的帐户不具备导出所要求的权限时,会无法导出数据。此时,可在导出命令中设置--role参数来指定具备权限的角色。在执行命令后,gs\_dump和gs\_dumpall会使用--role参数指定的角色,完成导出动作。可使用该功能的场景请参见[表1](#zh-cn_topic_0237121167_table08278213504),详细操作请参见[无权限角色导出数据](无权限角色导出数据.md#ZH-CN_TOPIC_0242370325)。 + +gs\_dump和gs\_dumpall通过对导出的数据文件加密,导入时对加密的数据文件进行解密,可以防止数据信息泄露,为数据库的安全提供保证。 + +gs\_dump和gs\_dumpall工具在进行数据导出时,其他用户可以访问openGauss数据库(读或写)。 + +gs\_dump和gs\_dumpall工具支持导出完整一致的数据。例如,T1时刻启动gs\_dump导出A数据库,或者启动gs\_dumpall导出openGauss数据库,那么导出数据结果将会是T1时刻A数据库或者该openGauss数据库的数据状态,T1时刻之后对A数据库或openGauss数据库的修改不会被导出。 + +## 注意事项 + +- 禁止修改导出的文件和内容,否则可能无法恢复成功。 +- 如果数据库中包含的对象数量(数据表、视图、索引)在50万以上,为了提高性能且避免出现内存问题,建议通过gs\_guc工具设置数据库节点的如下参数(如果参数值大于如下建议值,则无需设置)。 + + ``` + gs_guc set -N all -I all -c 'max_prepared_transactions = 1000' + gs_guc set -N all -I all -c 'max_locks_per_transaction = 512' + ``` + +- 为了保证数据一致性和完整性,导出工具会对需要转储的表设置共享锁。如果表在别的事务中设置了共享锁,gs\_dump和gs\_dumpall会等待锁释放后锁定表。如果无法在指定时间内锁定某个表,转储会失败。用户可以通过指定--lock-wait-timeout选项,自定义等待锁超时时间。 +- 由于gs\_dumpall读取所有数据库中的表,因此必须以openGauss管理员身份进行连接,才能导出完整文件。在使用gsql执行脚本文件导入时,同样需要管理员权限,以便添加用户和组,以及创建数据库。 + diff --git "a/content/zh/docs/Developerguide/\346\246\202\350\277\260 14.md" "b/content/zh/docs/Developerguide/\346\246\202\350\277\260 14.md" new file mode 100644 index 000000000..1fbc471f0 --- /dev/null +++ "b/content/zh/docs/Developerguide/\346\246\202\350\277\260 14.md" @@ -0,0 +1,4 @@ +# 概述 + +SQL执行时间预测特性基于机器学习方法,通过在线学习收集的执行计划算子级信息,实现查询时间预测功能。 + diff --git "a/content/zh/docs/Developerguide/\346\246\202\350\277\260 15.md" "b/content/zh/docs/Developerguide/\346\246\202\350\277\260 15.md" new file mode 100644 index 000000000..62e0f7855 --- /dev/null +++ "b/content/zh/docs/Developerguide/\346\246\202\350\277\260 15.md" @@ -0,0 +1,47 @@ +# 概述 + +## 背景信息 + +在SQL语言中,每个数据都与一个决定其行为和用法的数据类型相关。openGauss提供一个可扩展的数据类型系统,该系统比其它SQL实现更具通用性和灵活性。因而,openGauss中大多数类型转换是由通用规则来管理的,这种做法允许使用混合类型的表达式。 + +openGauss扫描/分析器只将词法元素分解成五个基本种类:整数、浮点数、字符串、标识符和关键字。大多数非数字类型首先表现为字符串。SQL语言的定义允许将常量字符串声明为具体的类型。例,下面查询: + +``` +postgres=# SELECT text 'Origin' AS "label", point '(0,0)' AS "value"; + label | value +--------+------- + Origin | (0,0) +(1 row) +``` + +示例中有两个文本常量,类型分别为text和point。如果没有为字符串文本声明类型,则该文本首先被定义成一个unknown类型。 + +在openGauss分析器里,有四种基本的SQL结构需要独立的类型转换规则: + +- 函数调用 + + 多数SQL类型系统是建筑在一套丰富的函数上的。函数调用可以有一个或多个参数。因为SQL允许函数重载,所以不能通过函数名直接找到要调用的函数,分析器必须根据函数提供的参数类型选择正确的函数。 + +- 操作符 + + SQL允许在表达式上使用前缀或后缀(单目)操作符,也允许表达式内部使用双目操作符(两个参数)。像函数一样,操作符也可以被重载,因此操作符的选择也和函数一样取决于参数类型。 + +- 值存储 + + INSERT和UPDATE语句将表达式结果存入表中。语句中的表达式类型必须和目标字段的类型一致或者可以转换为一致。 + +- UNION,CASE和相关构造 + + 因为联合SELECT语句中的所有查询结果必须在一列里显示出来,所以每个SELECT子句中的元素类型必须相互匹配并转换成一个统一类型。类似地,一个CASE构造的结果表达式必须转换成统一的类型,这样整个case表达式会有一个统一的输出类型。同样的要求也存在于ARRAY构造以及GREATEST和LEAST函数中。 + + +系统表pg\_cast存储了有关数据类型之间的转换关系以及如何执行这些转换的信息。详细信息请参见[PG\_CAST](PG_CAST.md#ZH-CN_TOPIC_0242385803)。 + +语义分析阶段会决定表达式的返回值类型并选择适当的转换行为。数据类型的基本类型分类,包括:Boolean,numeric,string,bitstring,datetime,timespan,geometric和network。每种类型都有一种或多种首选类型用于解决类型选择的问题。根据首选类型和可用的隐含转换,就可能保证有歧义的表达式(那些有多个候选解析方案的)得到有效的方式解决。 + +所有类型转换规则都是建立在下面几个基本原则上的: + +- 隐含转换决不能有奇怪的或不可预见的输出。 +- 如果一个查询不需要隐含的类型转换,分析器和执行器不应该进行更多的额外操作。这就是说,任何一个类型匹配、格式清晰的查询不应该在分析器里耗费更多的时间,也不应该向查询中引入任何不必要的隐含类型转换调用。 +- 另外,如果一个查询在调用某个函数时需要进行隐式转换,当用户定义了一个有正确参数的函数后,解释器应该选择使用新函数。 + diff --git "a/content/zh/docs/Developerguide/\347\224\250SSH\351\232\247\351\201\223\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245 4.md" "b/content/zh/docs/Developerguide/\347\224\250SSH\351\232\247\351\201\223\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245 4.md" new file mode 100644 index 000000000..785d741ca --- /dev/null +++ "b/content/zh/docs/Developerguide/\347\224\250SSH\351\232\247\351\201\223\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245 4.md" @@ -0,0 +1,30 @@ +# 用SSH隧道进行安全的TCP IP连接 + +## 背景信息 + +为了保证服务器和客户端之间的安全通讯,可以在服务器和客户端之间构建安全的SSH隧道。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。 + +从SSH客户端来看,SSH提供了两种级别的安全验证: + +- 基于口令的安全验证:使用帐号和口令登录到远程主机。所有传输的数据都会被加密,但是不能保证正在连接的服务器就是需要连接的服务器。可能会有其他服务器冒充真正的服务器,也就是受到“中间人”方式的攻击。 +- 基于密钥的安全验证:用户必须为自己创建一对密钥,并把公用密钥放在需要访问的服务器上。这种级别的认证不仅加密所有传送的数据,而且避免“中间人”攻击方式。但是整个登录的过程可能需要10秒。 + +## 前提条件 + +SSH服务和数据库运行在同一台服务器上。 + +## 操作步骤 + +以OpenSSH为例介绍配置SSH隧道,对于如何配置基于密钥的安全验证不作赘述,OpenSSH提供了多种配置适应网络的各种限制,更多详细信息请参考OpenSSH的相关文档。 + +从本地主机建立到服务器的SSH隧道。 + +``` +ssh -L 63333:localhost:8000 username@hostIP +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>- -L参数的第一串数字(63333)是通道本端的端口号,可以自由选择。 +>- 第二串数字(8000)是通道远端的端口号,也就是服务器使用的端口号。 +>- localhost是本机IP地址,username是要连接的服务器上的用户名,hostIP是要连接的主机IP地址。 + diff --git "a/content/zh/docs/Developerguide/\347\224\250SSH\351\232\247\351\201\223\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245.md" "b/content/zh/docs/Developerguide/\347\224\250SSH\351\232\247\351\201\223\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245.md" new file mode 100644 index 000000000..104be8873 --- /dev/null +++ "b/content/zh/docs/Developerguide/\347\224\250SSH\351\232\247\351\201\223\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245.md" @@ -0,0 +1,30 @@ +# 用SSH隧道进行安全的TCP/IP连接 + +## 背景信息 + +为了保证服务器和客户端之间的安全通讯,可以在服务器和客户端之间构建安全的SSH隧道。SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。 + +从SSH客户端来看,SSH提供了两种级别的安全验证: + +- 基于口令的安全验证:使用帐号和口令登录到远程主机。所有传输的数据都会被加密,但是不能保证正在连接的服务器就是需要连接的服务器。可能会有其他服务器冒充真正的服务器,也就是受到“中间人”方式的攻击。 +- 基于密钥的安全验证:用户必须为自己创建一对密钥,并把公用密钥放在需要访问的服务器上。这种级别的认证不仅加密所有传送的数据,而且避免“中间人”攻击方式。但是整个登录的过程可能需要10秒。 + +## 前提条件 + +SSH服务和数据库运行在同一台服务器上。 + +## 操作步骤 + +以OpenSSH为例介绍配置SSH隧道,对于如何配置基于密钥的安全验证不作赘述,OpenSSH提供了多种配置适应网络的各种限制,更多详细信息请参考OpenSSH的相关文档。 + +从本地主机建立到服务器的SSH隧道。 + +``` +ssh -L 63333:localhost:8000 username@hostIP +``` + +>![](public_sys-resources/icon-note.gif) **说明:** +>- -L参数的第一串数字(63333)是通道本端的端口号,可以自由选择。 +>- 第二串数字(8000)是通道远端的端口号,也就是服务器使用的端口号。 +>- localhost是本机IP地址,username是要连接的服务器上的用户名,hostIP是要连接的主机IP地址。 + diff --git "a/content/zh/docs/Developerguide/\347\224\250SSL\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245 3.md" "b/content/zh/docs/Developerguide/\347\224\250SSL\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245 3.md" new file mode 100644 index 000000000..662e24fc3 --- /dev/null +++ "b/content/zh/docs/Developerguide/\347\224\250SSL\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245 3.md" @@ -0,0 +1,544 @@ +# 用SSL进行安全的TCP/IP连接 + +## 背景信息 + +openGauss支持SSL标准协议(TLS 1.2),SSL协议是安全性更高的协议标准,它们加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。 + +## 前提条件 + +从CA认证中心申请到正式的服务器、客户端的证书和密钥。(假设服务器的私钥为server.key,证书为server.crt,客户端的私钥为client.key,证书为client.crt,CA根证书名称为cacert.pem。) + +## 注意事项 + +- 当用户远程连接到数据库主节点时,需要使用sha256的认证方式。 +- 当内部服务器之间连接时,需要使用trust的认证方式,支持IP白名单认证。 + +## 操作步骤 + +openGauss在openGauss部署完成后,默认已开启SSL认证模式。服务器端证书,私钥以及根证书已经默认配置完成。用户需要配置客户端的相关参数。 + +配置SSL认证相关的数字证书参数,具体要求请参见[表1](#zh-cn_topic_0237121092_zh-cn_topic_0059778374_table56811076112938)。 + +- 配置客户端参数。 + + 已从CA认证中心申请到客户端默认证书,私钥,根证书以及私钥密码加密文件。假设证书、私钥和根证书都放在“/home/omm”目录。 + + 双向认证需配置如下参数: + + ``` + export PGSSLCERT="/home/omm/client.crt" + export PGSSLKEY="/home/omm/client.key" + export PGSSLMODE="verify-ca" + export PGSSLROOTCERT="/home/omm/cacert.pem" + ``` + + 单向认证需要配置如下参数: + + ``` + export PGSSLMODE="verify-ca" + export PGSSLROOTCERT="/home/omm/cacert.pem" + ``` + +- 修改客户端密钥的权限。 + + 客户端根证书,密钥,证书以及密钥密码加密文件的权限,需保证权限为600。如果权限不满足要求,则客户端无法以SSL连接到openGauss。 + + ``` + chmod 600 client.key + chmod 600 client.crt + chmod 600 client.key.cipher + chmod 600 client.key.rand + chmod 600 cacert.pem + ``` + + +>![](public_sys-resources/icon-notice.gif) **须知:** +>从安全性考虑,建议使用双向认证方式。 +>配置客户端环境变量,必须包含文件的绝对路径。 + +**表 1** 认证方式 + + + + + + + + + + + + + + + + + + + +

认证方式

+

含义

+

配置客户端环境变量

+

维护建议

+

双向认证(推荐)

+

客户端验证服务器证书的有效性,同时服务器端也要验证客户端证书的有效性,只有认证成功,连接才能建立。

+

设置如下环境变量:

+
  • PGSSLCERT
  • PGSSLKEY
  • PGSSLROOTCERT
  • PGSSLMODE
+

该方式应用于安全性要求较高的场景。使用此方式时,建议设置客户端的PGSSLMODE变量为verify-ca。确保了网络数据的安全性。

+

单向认证

+

客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。

+

设置如下环境变量:

+
  • PGSSLROOTCERT
  • PGSSLMODE
+

为防止基于TCP链接的欺骗,建议使用SSL证书认证功能。除配置客户端根证书外,建议客户端使用PGSSLMODE变量为verify-ca方式连接。

+
+ +## 相关参考 + +在服务器端的postgresql.conf文件中配置相关参数,详细信息请参见[表2](#zh-cn_topic_0237121092_zh-cn_topic_0059778374_tccd28484be8c47678b529d6ccd34d1fd)。 + +**表 2** 服务器参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

描述

+

取值范围

+

ssl

+

表示是否启动SSL功能。

+
  • on:开启SSL功能。
  • off:关闭SSL功能。
+

默认值:on

+

require_ssl

+

设置服务器端是否强制要求SSL连接。该参数只有当参数ssl为on时才有效。

+
  • on:服务器端强制要求SSL连接。
  • off:服务器端对是否通过SSL连接不作强制要求。
+

默认值:off

+

ssl_cert_file

+

指定服务器证书文件,包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。

+

请以实际的证书名为准。必须使用相对路径,相对路径是相对于数据目录的。

+

默认值:server.crt

+

ssl_key_file

+

指定服务器私钥文件,用以对公钥加密的数据进行解密。

+

请以实际的服务器私钥名称为准。必须使用相对路径,相对路径是相对于数据目录的。

+

默认值:server.key

+

ssl_ca_file

+

CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。

+

请以实际的CA服务器根证书名称为准。

+

默认值

+

cacert.pem

+

ssl_crl_file

+

证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。

+

请以实际的证书吊销列表名称为准。

+

默认值:空,表示没有吊销列表。

+

ssl_ciphers

+

SSL通讯使用的加密算法。

+

本产品支持的加密算法的详细信息请参见表4

+

默认值:ALL,表示允许对端使用产品支持的所有加密算法,但不包含ADH、LOW、EXP、MD5算法。

+
+ +在客户端配置SSL认证相关的环境变量,详细信息请参见[表3](#zh-cn_topic_0237121092_zh-cn_topic_0059778374_t1a20720af5504dc0ba3c5d0e8d1a028b)。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>客户端环境变量的路径以“_/home/omm_”为例,在实际操作中请使用实际路径进行替换。 + +**表 3** 客户端参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

环境变量

+

描述

+

取值范围

+

PGSSLCERT

+

指定客户端证书文件,包含客户端的公钥。客户端证书用以表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。

+
必须包含文件的绝对路径,如:
export PGSSLCERT='/home/omm/client.crt'
+
+

默认值:空

+

PGSSLKEY

+

指定客户端私钥文件,用以对公钥加密的数据进行解密。

+
必须包含文件的绝对路径,如:
export PGSSLKEY='/home/omm/client.key'
+
+

默认值:空

+

PGSSLMODE

+

设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。

+

取值及含义:

+
  • disable:只尝试非SSL连接。
  • allow:首先尝试非SSL连接,如果连接失败,再尝试SSL连接。
  • prefer:首先尝试SSL连接,如果连接失败,将尝试非SSL连接。
  • require:只尝试SSL连接。如果存在CA文件,则按设置成verify-ca的方式验证。
  • verify-ca:只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书。
  • verify-full:只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书,以及验证服务器主机名是否与证书中的一致。
+

默认值:prefer

+

PGSSLROOTCERT

+

指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。

+
必须包含文件的绝对路径,如:
export PGSSLROOTCERT='/home/omm/certca.pem'
+
+

默认值:

+

PGSSLCRL

+

指定证书吊销列表文件,用于验证服务器证书是否在废弃证书列表中,如果在,则服务器证书将会被视为无效证书。

+
必须包含文件的绝对路径,如:
export PGSSLCRL='/home/omm/sslcrl-file.crl'
+
+

默认值:

+
+ +服务器端参数ssl、require\_ssl与客户端参数sslmode配置组合结果如下: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

ssl(服务器)

+

sslmode(客户端)

+

require_ssl(服务器)

+

结果

+

on

+

disable

+

on

+

由于服务器端要求使用SSL,但客户端针对该连接禁用了SSL,因此无法建立连接。

+

disable

+

off

+

连接未加密。

+

allow

+

on

+

连接经过加密。

+

allow

+

off

+

连接未加密。

+

prefer

+

on

+

连接经过加密。

+

prefer

+

off

+

连接经过加密。

+

require

+

on

+

连接经过加密。

+

require

+

off

+

连接经过加密。

+

verify-ca

+

on

+

连接经过加密,且验证了服务器证书。

+

verify-ca

+

off

+

连接经过加密,且验证了服务器证书。

+

verify-full

+

on

+

连接经过加密,且验证了服务器证书和主机名。

+

verify-full

+

off

+

连接经过加密,且验证了服务器证书和主机名。

+

off

+

disable

+

on

+

连接未加密。

+

disable

+

off

+

连接未加密。

+

allow

+

on

+

连接未加密。

+

allow

+

off

+

连接未加密。

+

prefer

+

on

+

连接未加密。

+

prefer

+

off

+

连接未加密。

+

require

+

on

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+

require

+

off

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+

verify-ca

+

on

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+

verify-ca

+

off

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+

verify-full

+

on

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+

verify-full

+

off

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+
+ +SSL传输支持一系列不同强度的加密和认证算法。用户可以通过修改postgresql.conf中的ssl\_ciphers参数指定数据库服务器使用的加密算法。目前本产品SSL支持的加密算法如[表4](#zh-cn_topic_0237121092_zh-cn_topic_0059778374_t34eea0830ef94be1a866f0410ba3eb07)所示。 + +**表 4** 加密算法 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

加密强度

+

安全程度

+

加密算法描述

+

stronger

+

high

+

DHE-RSA-AES256-GCM-SHA384

+

stronger

+

high

+

DHE-RSA-AES128-GCM-SHA256

+

stronger

+

high

+

DHE-DSS-AES256-GCM-SHA384

+

stronger

+

high

+

DHE-DSS-AES128-GCM-SHA256

+

stronger

+

medium

+

DHE-RSA-AES256-SHA256

+

stronger

+

medium

+

DHE-RSA-AES128-SHA256

+

stronger

+

medium

+

DHE-DSS-AES256-SHA256

+

stronger

+

medium

+

DHE-DSS-AES128-SHA256

+

stronger

+

high

+

DHE-RSA-AES256-CCM

+

stronger

+

high

+

DHE-RSA-AES128-CCM

+

stronger

+

medium

+

DHE-RSA-AES256-SHA

+

stronger

+

medium

+

DHE-RSA-AES128-SHA

+

stronger

+

medium

+

DHE-DSS-AES256-SHA

+

stronger

+

medium

+

DHE-DSS-AES128-SHA

+
+ +>![](public_sys-resources/icon-note.gif) **说明:** +>- SSL目前只支持加密强度在strong以上的加密算法。 +>- 配置参数ssl\_ciphers的默认值为ALL,表示支持上表中的所有加密算法。如果对加密算法没有特殊要求,建议用户使用该默认值。 +>- 如指定以上多种加密,加密算法之间需要使用分号分割。 +> 如在postgresql.conf设置ssl\_ciphers='DHE-RSA-AES256-GCM-SHA384;DHE-RSA-AES256-SHA256;DHE-RSA-AES256-CCM' +>- 如果要使用上表中和DSS相关的加密算法(如DHE-DSS-AES256-GCM-SHA384、DHE-DSS-AES256-SHA256、DHE-DSS-AES256-SHA等)必须加载使用DSA算法签名的证书文件。如何使用openssl产生DSA算法签名的证书文件,请参见openssl官方文档。 +>- SSL连接认证不仅增加了登录(创建SSL环境)及退出过程(清理SSL环境)的时间消耗,同时需要消耗额外的时间用于加解密所需传输的内容,因此对性能有一定影响。特别的,对于频繁的登录登出,短时查询等场景有较大的影响。 +>- 在证书有效期小于7天的时候,连接登录会在日志中产生告警提醒。 + diff --git "a/content/zh/docs/Developerguide/\347\224\250SSL\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245.md" "b/content/zh/docs/Developerguide/\347\224\250SSL\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245.md" new file mode 100644 index 000000000..49daefeae --- /dev/null +++ "b/content/zh/docs/Developerguide/\347\224\250SSL\350\277\233\350\241\214\345\256\211\345\205\250\347\232\204TCP IP\350\277\236\346\216\245.md" @@ -0,0 +1,543 @@ +# 用SSL进行安全的TCP/IP连接 + +## 背景信息 + +openGauss支持SSL标准协议(TLS 1.2),SSL协议是安全性更高的协议标准,它们加入了数字签名和数字证书来实现客户端和服务器的双向身份验证,保证了通信双方更加安全的数据传输。 + +## 前提条件 + +从CA认证中心申请到正式的服务器、客户端的证书和密钥。(假设服务器的私钥为server.key,证书为server.crt,客户端的私钥为client.key,证书为client.crt,CA根证书名称为cacert.pem。) + +## 注意事项 + +- 当用户远程连接到数据库主节点时,需要使用sha256的认证方式。 +- 当内部服务器之间连接时,需要使用trust的认证方式,支持IP白名单认证。 + +## 操作步骤 + +openGauss在openGauss部署完成后,默认已开启SSL认证模式。服务器端证书,私钥以及根证书已经默认配置完成。用户需要配置客户端的相关参数。 + +配置SSL认证相关的数字证书参数,具体要求请参见[表1](#zh-cn_topic_0237121092_zh-cn_topic_0059778374_table56811076112938)。 + +- 配置客户端参数。 + + 已从CA认证中心申请到客户端默认证书,私钥,根证书以及私钥密码加密文件。假设证书、私钥和根证书都放在“/home/omm”目录。 + + 双向认证需配置如下参数: + + ``` + export PGSSLCERT="/home/omm/client.crt" + export PGSSLKEY="/home/omm/client.key" + export PGSSLMODE="verify-ca" + export PGSSLROOTCERT="/home/omm/cacert.pem" + ``` + + 单向认证需要配置如下参数: + + ``` + export PGSSLMODE="verify-ca" + export PGSSLROOTCERT="/home/omm/cacert.pem" + ``` + +- 修改客户端密钥的权限。 + + 客户端根证书,密钥,证书以及密钥密码加密文件的权限,需保证权限为600。如果权限不满足要求,则客户端无法以SSL连接到openGauss。 + + ``` + chmod 600 client.key + chmod 600 client.crt + chmod 600 client.key.cipher + chmod 600 client.key.rand + chmod 600 cacert.pem + ``` + + +>![](public_sys-resources/icon-notice.gif) **须知:** +>从安全性考虑,建议使用双向认证方式。 +>配置客户端环境变量,必须包含文件的绝对路径。 + +**表 1** 认证方式 + + + + + + + + + + + + + + + + + + + +

认证方式

+

含义

+

配置客户端环境变量

+

维护建议

+

双向认证(推荐)

+

客户端验证服务器证书的有效性,同时服务器端也要验证客户端证书的有效性,只有认证成功,连接才能建立。

+

设置如下环境变量:

+
  • PGSSLCERT
  • PGSSLKEY
  • PGSSLROOTCERT
  • PGSSLMODE
+

该方式应用于安全性要求较高的场景。使用此方式时,建议设置客户端的PGSSLMODE变量为verify-ca。确保了网络数据的安全性。

+

单向认证

+

客户端只验证服务器证书的有效性,而服务器端不验证客户端证书的有效性。服务器加载证书信息并发送给客户端,客户端使用根证书来验证服务器端证书的有效性。

+

设置如下环境变量:

+
  • PGSSLROOTCERT
  • PGSSLMODE
+

为防止基于TCP链接的欺骗,建议使用SSL证书认证功能。除配置客户端根证书外,建议客户端使用PGSSLMODE变量为verify-ca方式连接。

+
+ +## 相关参考 + +在服务器端的postgresql.conf文件中配置相关参数,详细信息请参见[表2](#zh-cn_topic_0237121092_zh-cn_topic_0059778374_tccd28484be8c47678b529d6ccd34d1fd)。 + +**表 2** 服务器参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

描述

+

取值范围

+

ssl

+

表示是否启动SSL功能。

+
  • on:开启SSL功能。
  • off:关闭SSL功能。
+

默认值:on

+

require_ssl

+

设置服务器端是否强制要求SSL连接。该参数只有当参数ssl为on时才有效。

+
  • on:服务器端强制要求SSL连接。
  • off:服务器端对是否通过SSL连接不作强制要求。
+

默认值:off

+

ssl_cert_file

+

指定服务器证书文件,包含服务器端的公钥。服务器证书用以表明服务器身份的合法性,公钥将发送给对端用来对数据进行加密。

+

请以实际的证书名为准。必须使用相对路径,相对路径是相对于数据目录的。

+

默认值:server.crt

+

ssl_key_file

+

指定服务器私钥文件,用以对公钥加密的数据进行解密。

+

请以实际的服务器私钥名称为准。必须使用相对路径,相对路径是相对于数据目录的。

+

默认值:server.key

+

ssl_ca_file

+

CA服务器的根证书。此参数可选择配置,需要验证客户端证书的合法性时才需要配置。

+

请以实际的CA服务器根证书名称为准。

+

默认值cacert.pem

+

ssl_crl_file

+

证书吊销列表,如果客户端证书在该列表中,则当前客户端证书被视为无效证书。

+

请以实际的证书吊销列表名称为准。

+

默认值:空,表示没有吊销列表。

+

ssl_ciphers

+

SSL通讯使用的加密算法。

+

本产品支持的加密算法的详细信息请参见表4

+

默认值:ALL,表示允许对端使用产品支持的所有加密算法,但不包含ADH、LOW、EXP、MD5算法。

+
+ +在客户端配置SSL认证相关的环境变量,详细信息请参见[表3](#zh-cn_topic_0237121092_zh-cn_topic_0059778374_t1a20720af5504dc0ba3c5d0e8d1a028b)。 + +>![](public_sys-resources/icon-note.gif) **说明:** +>客户端环境变量的路径以“_/home/omm_”为例,在实际操作中请使用实际路径进行替换。 + +**表 3** 客户端参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

环境变量

+

描述

+

取值范围

+

PGSSLCERT

+

指定客户端证书文件,包含客户端的公钥。客户端证书用以表明客户端身份的合法性,公钥将发送给对端用来对数据进行加密。

+
必须包含文件的绝对路径,如:
export PGSSLCERT='/home/omm/client.crt'
+
+

默认值:空

+

PGSSLKEY

+

指定客户端私钥文件,用以对公钥加密的数据进行解密。

+
必须包含文件的绝对路径,如:
export PGSSLKEY='/home/omm/client.key'
+
+

默认值:空

+

PGSSLMODE

+

设置是否和服务器进行SSL连接协商,以及指定SSL连接的优先级。

+

取值及含义:

+
  • disable:只尝试非SSL连接。
  • allow:首先尝试非SSL连接,如果连接失败,再尝试SSL连接。
  • prefer:首先尝试SSL连接,如果连接失败,将尝试非SSL连接。
  • require:只尝试SSL连接。如果存在CA文件,则按设置成verify-ca的方式验证。
  • verify-ca:只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书。
  • verify-full:只尝试SSL连接,并且验证服务器是否具有由可信任的证书机构签发的证书,以及验证服务器主机名是否与证书中的一致。
+

默认值:prefer

+

PGSSLROOTCERT

+

指定为客户端颁发证书的根证书文件,根证书用于验证服务器证书的有效性。

+
必须包含文件的绝对路径,如:
export PGSSLROOTCERT='/home/omm/certca.pem'
+
+

默认值:

+

PGSSLCRL

+

指定证书吊销列表文件,用于验证服务器证书是否在废弃证书列表中,如果在,则服务器证书将会被视为无效证书。

+
必须包含文件的绝对路径,如:
export PGSSLCRL='/home/omm/sslcrl-file.crl'
+
+

默认值:

+
+ +服务器端参数ssl、require\_ssl与客户端参数sslmode配置组合结果如下: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

ssl(服务器)

+

sslmode(客户端)

+

require_ssl(服务器)

+

结果

+

on

+

disable

+

on

+

由于服务器端要求使用SSL,但客户端针对该连接禁用了SSL,因此无法建立连接。

+

disable

+

off

+

连接未加密。

+

allow

+

on

+

连接经过加密。

+

allow

+

off

+

连接未加密。

+

prefer

+

on

+

连接经过加密。

+

prefer

+

off

+

连接经过加密。

+

require

+

on

+

连接经过加密。

+

require

+

off

+

连接经过加密。

+

verify-ca

+

on

+

连接经过加密,且验证了服务器证书。

+

verify-ca

+

off

+

连接经过加密,且验证了服务器证书。

+

verify-full

+

on

+

连接经过加密,且验证了服务器证书和主机名。

+

verify-full

+

off

+

连接经过加密,且验证了服务器证书和主机名。

+

off

+

disable

+

on

+

连接未加密。

+

disable

+

off

+

连接未加密。

+

allow

+

on

+

连接未加密。

+

allow

+

off

+

连接未加密。

+

prefer

+

on

+

连接未加密。

+

prefer

+

off

+

连接未加密。

+

require

+

on

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+

require

+

off

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+

verify-ca

+

on

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+

verify-ca

+

off

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+

verify-full

+

on

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+

verify-full

+

off

+

由于客户端要求使用SSL,但服务器端禁用了SSL,因此无法建立连接。

+
+ +SSL传输支持一系列不同强度的加密和认证算法。用户可以通过修改postgresql.conf中的ssl\_ciphers参数指定数据库服务器使用的加密算法。目前本产品SSL支持的加密算法如[表4](#zh-cn_topic_0237121092_zh-cn_topic_0059778374_t34eea0830ef94be1a866f0410ba3eb07)所示。 + +**表 4** 加密算法 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

加密强度

+

安全程度

+

加密算法描述

+

stronger

+

high

+

DHE-RSA-AES256-GCM-SHA384

+

stronger

+

high

+

DHE-RSA-AES128-GCM-SHA256

+

stronger

+

high

+

DHE-DSS-AES256-GCM-SHA384

+

stronger

+

high

+

DHE-DSS-AES128-GCM-SHA256

+

stronger

+

medium

+

DHE-RSA-AES256-SHA256

+

stronger

+

medium

+

DHE-RSA-AES128-SHA256

+

stronger

+

medium

+

DHE-DSS-AES256-SHA256

+

stronger

+

medium

+

DHE-DSS-AES128-SHA256

+

stronger

+

high

+

DHE-RSA-AES256-CCM

+

stronger

+

high

+

DHE-RSA-AES128-CCM

+

stronger

+

medium

+

DHE-RSA-AES256-SHA

+

stronger

+

medium

+

DHE-RSA-AES128-SHA

+

stronger

+

medium

+

DHE-DSS-AES256-SHA

+

stronger

+

medium

+

DHE-DSS-AES128-SHA

+
+ +>![](public_sys-resources/icon-note.gif) **说明:** +>- SSL目前只支持加密强度在strong以上的加密算法。 +>- 配置参数ssl\_ciphers的默认值为ALL,表示支持上表中的所有加密算法。如果对加密算法没有特殊要求,建议用户使用该默认值。 +>- 如指定以上多种加密,加密算法之间需要使用分号分割。 +> 如在postgresql.conf设置ssl\_ciphers='DHE-RSA-AES256-GCM-SHA384;DHE-RSA-AES256-SHA256;DHE-RSA-AES256-CCM' +>- 如果要使用上表中和DSS相关的加密算法(如DHE-DSS-AES256-GCM-SHA384、DHE-DSS-AES256-SHA256、DHE-DSS-AES256-SHA等)必须加载使用DSA算法签名的证书文件。如何使用openssl产生DSA算法签名的证书文件,请参见openssl官方文档。 +>- SSL连接认证不仅增加了登录(创建SSL环境)及退出过程(清理SSL环境)的时间消耗,同时需要消耗额外的时间用于加解密所需传输的内容,因此对性能有一定影响。特别的,对于频繁的登录登出,短时查询等场景有较大的影响。 +>- 在证书有效期小于7天的时候,连接登录会在日志中产生告警提醒。 + diff --git "a/content/zh/docs/Developerguide/\347\244\272\344\276\213 10.md" "b/content/zh/docs/Developerguide/\347\244\272\344\276\213 10.md" new file mode 100644 index 000000000..3d185d738 --- /dev/null +++ "b/content/zh/docs/Developerguide/\347\244\272\344\276\213 10.md" @@ -0,0 +1,446 @@ +# 示例 + +## 常用功能示例代码1 + +``` +// 此示例演示如何通过ODBC方式获取openGauss中的数据。 +// DBtest.c (compile with: libodbc.so) +#include +#include +#include +#ifdef WIN32 +#include +#endif +SQLHENV V_OD_Env; // Handle ODBC environment +SQLHSTMT V_OD_hstmt; // Handle statement +SQLHDBC V_OD_hdbc; // Handle connection +char typename[100]; +SQLINTEGER value = 100; +SQLINTEGER V_OD_erg,V_OD_buffer,V_OD_err,V_OD_id; +int main(int argc,char *argv[]) +{ + // 1. 申请环境句柄 + V_OD_erg = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&V_OD_Env); + if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) + { + printf("Error AllocHandle\n"); + exit(0); + } + // 2. 设置环境属性(版本信息) + SQLSetEnvAttr(V_OD_Env, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); + // 3. 申请连接句柄 + V_OD_erg = SQLAllocHandle(SQL_HANDLE_DBC, V_OD_Env, &V_OD_hdbc); + if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) + { + SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); + exit(0); + } + // 4. 设置连接属性 + SQLSetConnectAttr(V_OD_hdbc, SQL_ATTR_AUTOCOMMIT, SQL_AUTOCOMMIT_ON, 0); + // 5. 连接数据源,这里的“userName”与“password”分别表示连接数据库的用户名和用户密码,请根据实际情况修改。 + // 如果odbc.ini文件中已经配置了用户名密码,那么这里可以留空("");但是不建议这么做,因为一旦odbc.ini权限管理不善,将导致数据库用户密码泄露。 + V_OD_erg = SQLConnect(V_OD_hdbc, (SQLCHAR*) "gaussdb", SQL_NTS, + (SQLCHAR*) "userName", SQL_NTS, (SQLCHAR*) "password", SQL_NTS); + if ((V_OD_erg != SQL_SUCCESS) && (V_OD_erg != SQL_SUCCESS_WITH_INFO)) + { + printf("Error SQLConnect %d\n",V_OD_erg); + SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); + exit(0); + } + printf("Connected !\n"); + // 6. 设置语句属性 + SQLSetStmtAttr(V_OD_hstmt,SQL_ATTR_QUERY_TIMEOUT,(SQLPOINTER *)3,0); + // 7. 申请语句句柄 + SQLAllocHandle(SQL_HANDLE_STMT, V_OD_hdbc, &V_OD_hstmt); + // 8. 直接执行SQL语句。 + SQLExecDirect(V_OD_hstmt,"drop table IF EXISTS customer_t1",SQL_NTS); + SQLExecDirect(V_OD_hstmt,"CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));",SQL_NTS); + SQLExecDirect(V_OD_hstmt,"insert into customer_t1 values(25,li)",SQL_NTS); + // 9. 准备执行 + SQLPrepare(V_OD_hstmt,"insert into customer_t1 values(?)",SQL_NTS); + // 10. 绑定参数 + SQLBindParameter(V_OD_hstmt,1,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER,0,0, + &value,0,NULL); + // 11. 执行准备好的语句 + SQLExecute(V_OD_hstmt); + SQLExecDirect(V_OD_hstmt,"select id from testtable",SQL_NTS); + // 12. 获取结果集某一列的属性 + SQLColAttribute(V_OD_hstmt,1,SQL_DESC_TYPE,typename,100,NULL,NULL); + printf("SQLColAtrribute %s\n",typename); + // 13. 绑定结果集 + SQLBindCol(V_OD_hstmt,1,SQL_C_SLONG, (SQLPOINTER)&V_OD_buffer,150, + (SQLLEN *)&V_OD_err); + // 14. 通过SQLFetch取结果集中数据 + V_OD_erg=SQLFetch(V_OD_hstmt); + // 15. 通过SQLGetData获取并返回数据。 + while(V_OD_erg != SQL_NO_DATA) + { + SQLGetData(V_OD_hstmt,1,SQL_C_SLONG,(SQLPOINTER)&V_OD_id,0,NULL); + printf("SQLGetData ----ID = %d\n",V_OD_id); + V_OD_erg=SQLFetch(V_OD_hstmt); + }; + printf("Done !\n"); + // 16. 断开数据源连接并释放句柄资源 + SQLFreeHandle(SQL_HANDLE_STMT,V_OD_hstmt); + SQLDisconnect(V_OD_hdbc); + SQLFreeHandle(SQL_HANDLE_DBC,V_OD_hdbc); + SQLFreeHandle(SQL_HANDLE_ENV, V_OD_Env); + return(0); + } +``` + +## 常用功能示例代码2 + +``` +#include +#include +#include + +static void exit_nicely(PGconn *conn) +{ + PQfinish(conn); + exit(1); +} + +int main(int argc, char **argv) +{ + const char *conninfo; + PGconn *conn; + PGresult *res; + int nFields; + int i,j; + + /* + * 如果用户在命令行上提供了一个参数,将它用作连接信息串。 + * 否则默认用设置 dbname=postgres 并且为所有其他链接参数使用环境变量或默认值。 + */ + if (argc > 1) + conninfo = argv[1]; + else + conninfo = "dbname = postgres"; + + /* 建立到数据库的一个连接 */ + conn = PQconnectdb(conninfo); + + /* 检查看后端连接是否成功建立 */ + if (PQstatus(conn) != CONNECTION_OK) + { + fprintf(stderr, "Connection to database failed: %s", + PQerrorMessage(conn)); + exit_nicely(conn); + } + + /* + * 我们的测试案例这里涉及使用一个游标,对它我们必须用在一个事务块内。 + * 我们可以在一个单一的 "select * from pg_database" 的 PQexec() 中做整个事情, + * 但是作为一个好的例子它太琐碎。 + */ + + /* 开始一个事务块 */ + res = PQexec(conn, "BEGIN"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) + { + fprintf(stderr, "BEGIN command failed: %s", PQerrorMessage(conn)); + PQclear(res); + exit_nicely(conn); + } + + /* 任何时候不再需要 PGresult 时,应该 PQclear 它来避免内存泄露 */ + PQclear(res); + + /* 从 pg_database 取得行,它是数据库的系统目录 */ + res = PQexec(conn, "DECLARE myportal CURSOR FOR select * from pg_database"); + if (PQresultStatus(res) != PGRES_COMMAND_OK) + { + fprintf(stderr, "DECLARE CURSOR failed: %s", PQerrorMessage(conn)); + PQclear(res); + exit_nicely(conn); + } + PQclear(res); + + res = PQexec(conn, "FETCH ALL in myportal"); + if (PQresultStatus(res) != PGRES_TUPLES_OK) + { + fprintf(stderr, "FETCH ALL failed: %s", PQerrorMessage(conn)); + PQclear(res); + exit_nicely(conn); + } + + /* 首先,打印出属性名 */ + nFields = PQnfields(res); + for (i = 0; i < nFields; i++) + printf("%-15s", PQfname(res, i)); + printf("\n\n"); + + /* 接下来,打印出行 */ + for (i = 0; i < PQntuples(res); i++) + { + for (j = 0; j < nFields; j++) + printf("%-15s", PQgetvalue(res, i, j)); + printf("\n"); + } + + PQclear(res); + + /* 关闭入口,我们不需要考虑检查错误 */ + res = PQexec(conn, "CLOSE myportal"); + PQclear(res); + + /* 结束事务 */ + res = PQexec(conn, "END"); + PQclear(res); + + /* 关闭到数据库的连接并且清理 */ + PQfinish(conn); + + return 0; +} +``` + +## 批量绑定示例代码 + +``` +/********************************************************************** +* 请在数据源中打开UseBatchProtocol,同时指定数据库中参数support_batch_bind +* 为on +* CHECK_ERROR的作用是检查并打印错误信息。 +* 此示例将与用户交互式获取DSN、模拟的数据量,忽略的数据量,并将最终数据入库到test_odbc_batch_insert中 +***********************************************************************/ +#include +#include +#include +#include +#include + +#include "util.c" + +void Exec(SQLHDBC hdbc, SQLCHAR* sql) +{ + SQLRETURN retcode; // Return status + SQLHSTMT hstmt = SQL_NULL_HSTMT; // Statement handle + SQLCHAR loginfo[2048]; + + // Allocate Statement Handle + retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt); + CHECK_ERROR(retcode, "SQLAllocHandle(SQL_HANDLE_STMT)", + hstmt, SQL_HANDLE_STMT); + + // Prepare Statement + retcode = SQLPrepare(hstmt, (SQLCHAR*) sql, SQL_NTS); + sprintf((char*)loginfo, "SQLPrepare log: %s", (char*)sql); + CHECK_ERROR(retcode, loginfo, hstmt, SQL_HANDLE_STMT); + + // Execute Statement + retcode = SQLExecute(hstmt); + sprintf((char*)loginfo, "SQLExecute stmt log: %s", (char*)sql); + CHECK_ERROR(retcode, loginfo, hstmt, SQL_HANDLE_STMT); + + // Free Handle +retcode = SQLFreeHandle(SQL_HANDLE_STMT, hstmt); + sprintf((char*)loginfo, "SQLFreeHandle stmt log: %s", (char*)sql); + CHECK_ERROR(retcode, loginfo, hstmt, SQL_HANDLE_STMT); +} + +int main () +{ + SQLHENV henv = SQL_NULL_HENV; + SQLHDBC hdbc = SQL_NULL_HDBC; + int batchCount = 1000; + SQLLEN rowsCount = 0; + int ignoreCount = 0; + + SQLRETURN retcode; + SQLCHAR dsn[1024] = {'\0'}; + SQLCHAR loginfo[2048]; + + // 交互获取数据源名称 + getStr("Please input your DSN", (char*)dsn, sizeof(dsn), 'N'); + // 交互获取批量绑定的数据量 + getInt("batchCount", &batchCount, 'N', 1); + do + { + // 交互获取批量绑定的数据中,不要入库的数据量 + getInt("ignoreCount", &ignoreCount, 'N', 1); + if (ignoreCount > batchCount) + { + printf("ignoreCount(%d) should be less than batchCount(%d)\n", ignoreCount, batchCount); + } + }while(ignoreCount > batchCount); + + retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv); + CHECK_ERROR(retcode, "SQLAllocHandle(SQL_HANDLE_ENV)", + henv, SQL_HANDLE_ENV); + + // Set ODBC Verion + retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, + (SQLPOINTER*)SQL_OV_ODBC3, 0); + CHECK_ERROR(retcode, "SQLSetEnvAttr(SQL_ATTR_ODBC_VERSION)", + henv, SQL_HANDLE_ENV); + + // Allocate Connection + retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc); + CHECK_ERROR(retcode, "SQLAllocHandle(SQL_HANDLE_DBC)", + henv, SQL_HANDLE_DBC); + + // Set Login Timeout + retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)5, 0); + CHECK_ERROR(retcode, "SQLSetConnectAttr(SQL_LOGIN_TIMEOUT)", + hdbc, SQL_HANDLE_DBC); + + // Set Auto Commit + retcode = SQLSetConnectAttr(hdbc, SQL_ATTR_AUTOCOMMIT, + (SQLPOINTER)(1), 0); + CHECK_ERROR(retcode, "SQLSetConnectAttr(SQL_ATTR_AUTOCOMMIT)", + hdbc, SQL_HANDLE_DBC); + + // Connect to DSN + sprintf(loginfo, "SQLConnect(DSN:%s)", dsn); + retcode = SQLConnect(hdbc, (SQLCHAR*) dsn, SQL_NTS, + (SQLCHAR*) NULL, 0, NULL, 0); + CHECK_ERROR(retcode, loginfo, hdbc, SQL_HANDLE_DBC); + + // init table info. + Exec(hdbc, "drop table if exists test_odbc_batch_insert"); + Exec(hdbc, "create table test_odbc_batch_insert(id int primary key, col varchar2(50))"); + + // 下面的代码根据用户输入的数据量,构造出将要入库的数据: + { + SQLRETURN retcode; + SQLHSTMT hstmtinesrt = SQL_NULL_HSTMT; + int i; + SQLCHAR *sql = NULL; + SQLINTEGER *ids = NULL; + SQLCHAR *cols = NULL; + SQLLEN *bufLenIds = NULL; + SQLLEN *bufLenCols = NULL; + SQLUSMALLINT *operptr = NULL; + SQLUSMALLINT *statusptr = NULL; + SQLULEN process = 0; + + // 这里是按列构造,每个字段的内存连续存放在一起。 + ids = (SQLINTEGER*)malloc(sizeof(ids[0]) * batchCount); + cols = (SQLCHAR*)malloc(sizeof(cols[0]) * batchCount * 50); + // 这里是每个字段中,每一行数据的内存长度。 + bufLenIds = (SQLLEN*)malloc(sizeof(bufLenIds[0]) * batchCount); + bufLenCols = (SQLLEN*)malloc(sizeof(bufLenCols[0]) * batchCount); + // 该行是否需要被处理,SQL_PARAM_IGNORE 或 SQL_PARAM_PROCEED + operptr = (SQLUSMALLINT*)malloc(sizeof(operptr[0]) * batchCount); + memset(operptr, 0, sizeof(operptr[0]) * batchCount); + // 该行的处理结果。 + // 注:由于数据库中处理方式是同一语句隶属同一事务中,所以如果出错,那么待处理数据都将是出错的,并不会部分入库。 + statusptr = (SQLUSMALLINT*)malloc(sizeof(statusptr[0]) * batchCount); + memset(statusptr, 88, sizeof(statusptr[0]) * batchCount); + + if (NULL == ids || NULL == cols || NULL == bufLenCols || NULL == bufLenIds) + { + fprintf(stderr, "FAILED:\tmalloc data memory failed\n"); + goto exit; + } + + for (int i = 0; i < batchCount; i++) + { + ids[i] = i; + sprintf(cols + 50 * i, "column test value %d", i); + bufLenIds[i] = sizeof(ids[i]); + bufLenCols[i] = strlen(cols + 50 * i); + operptr[i] = (i < ignoreCount) ? SQL_PARAM_IGNORE : SQL_PARAM_PROCEED; + } + + // Allocate Statement Handle + retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmtinesrt); + CHECK_ERROR(retcode, "SQLAllocHandle(SQL_HANDLE_STMT)", + hstmtinesrt, SQL_HANDLE_STMT); + + // Prepare Statement + sql = (SQLCHAR*)"insert into test_odbc_batch_insert values(?, ?)"; + retcode = SQLPrepare(hstmtinesrt, (SQLCHAR*) sql, SQL_NTS); + sprintf((char*)loginfo, "SQLPrepare log: %s", (char*)sql); + CHECK_ERROR(retcode, loginfo, hstmtinesrt, SQL_HANDLE_STMT); + + retcode = SQLSetStmtAttr(hstmtinesrt, SQL_ATTR_PARAMSET_SIZE, (SQLPOINTER)batchCount, sizeof(batchCount)); + CHECK_ERROR(retcode, "SQLSetStmtAttr", hstmtinesrt, SQL_HANDLE_STMT); + + retcode = SQLBindParameter(hstmtinesrt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, sizeof(ids[0]), 0,&(ids[0]), 0, bufLenIds); + CHECK_ERROR(retcode, "SQLBindParameter for id", hstmtinesrt, SQL_HANDLE_STMT); + + retcode = SQLBindParameter(hstmtinesrt, 2, SQL_PARAM_INPUT, SQL_C_CHAR, SQL_CHAR, 50, 50, cols, 50, bufLenCols); + CHECK_ERROR(retcode, "SQLBindParameter for cols", hstmtinesrt, SQL_HANDLE_STMT); + + retcode = SQLSetStmtAttr(hstmtinesrt, SQL_ATTR_PARAMS_PROCESSED_PTR, (SQLPOINTER)&process, sizeof(process)); + CHECK_ERROR(retcode, "SQLSetStmtAttr for SQL_ATTR_PARAMS_PROCESSED_PTR", hstmtinesrt, SQL_HANDLE_STMT); + + retcode = SQLSetStmtAttr(hstmtinesrt, SQL_ATTR_PARAM_STATUS_PTR, (SQLPOINTER)statusptr, sizeof(statusptr[0]) * batchCount); + CHECK_ERROR(retcode, "SQLSetStmtAttr for SQL_ATTR_PARAM_STATUS_PTR", hstmtinesrt, SQL_HANDLE_STMT); + + retcode = SQLSetStmtAttr(hstmtinesrt, SQL_ATTR_PARAM_OPERATION_PTR, (SQLPOINTER)operptr, sizeof(operptr[0]) * batchCount); + CHECK_ERROR(retcode, "SQLSetStmtAttr for SQL_ATTR_PARAM_OPERATION_PTR", hstmtinesrt, SQL_HANDLE_STMT); + + retcode = SQLExecute(hstmtinesrt); + sprintf((char*)loginfo, "SQLExecute stmt log: %s", (char*)sql); + CHECK_ERROR(retcode, loginfo, hstmtinesrt, SQL_HANDLE_STMT); + + retcode = SQLRowCount(hstmtinesrt, &rowsCount); + CHECK_ERROR(retcode, "SQLRowCount execution", hstmtinesrt, SQL_HANDLE_STMT); + + if (rowsCount != (batchCount - ignoreCount)) + { + sprintf(loginfo, "(batchCount - ignoreCount)(%d) != rowsCount(%d)", (batchCount - ignoreCount), rowsCount); + CHECK_ERROR(SQL_ERROR, loginfo, NULL, SQL_HANDLE_STMT); + } + else + { + sprintf(loginfo, "(batchCount - ignoreCount)(%d) == rowsCount(%d)", (batchCount - ignoreCount), rowsCount); + CHECK_ERROR(SQL_SUCCESS, loginfo, NULL, SQL_HANDLE_STMT); + } + + if (rowsCount != process) + { + sprintf(loginfo, "process(%d) != rowsCount(%d)", process, rowsCount); + CHECK_ERROR(SQL_ERROR, loginfo, NULL, SQL_HANDLE_STMT); + } + else + { + sprintf(loginfo, "process(%d) == rowsCount(%d)", process, rowsCount); + CHECK_ERROR(SQL_SUCCESS, loginfo, NULL, SQL_HANDLE_STMT); + } + + for (int i = 0; i < batchCount; i++) + { + if (i < ignoreCount) + { + if (statusptr[i] != SQL_PARAM_UNUSED) + { + sprintf(loginfo, "statusptr[%d](%d) != SQL_PARAM_UNUSED", i, statusptr[i]); + CHECK_ERROR(SQL_ERROR, loginfo, NULL, SQL_HANDLE_STMT); + } + } + else if (statusptr[i] != SQL_PARAM_SUCCESS) + { + sprintf(loginfo, "statusptr[%d](%d) != SQL_PARAM_SUCCESS", i, statusptr[i]); + CHECK_ERROR(SQL_ERROR, loginfo, NULL, SQL_HANDLE_STMT); + } + } + + retcode = SQLFreeHandle(SQL_HANDLE_STMT, hstmtinesrt); + sprintf((char*)loginfo, "SQLFreeHandle hstmtinesrt"); + CHECK_ERROR(retcode, loginfo, hstmtinesrt, SQL_HANDLE_STMT); + } + + +exit: + printf ("\nComplete.\n"); + + // Connection + if (hdbc != SQL_NULL_HDBC) { + SQLDisconnect(hdbc); + SQLFreeHandle(SQL_HANDLE_DBC, hdbc); + } + + // Environment + if (henv != SQL_NULL_HENV) + SQLFreeHandle(SQL_HANDLE_ENV, henv); + + return 0; +} +``` + diff --git "a/content/zh/docs/Developerguide/\347\244\272\344\276\2131 \351\200\232\350\277\207\346\234\254\345\234\260\346\226\207\344\273\266\345\257\274\345\205\245\345\257\274\345\207\272\346\225\260\346\215\256.md" "b/content/zh/docs/Developerguide/\347\244\272\344\276\2131 \351\200\232\350\277\207\346\234\254\345\234\260\346\226\207\344\273\266\345\257\274\345\205\245\345\257\274\345\207\272\346\225\260\346\215\256.md" new file mode 100644 index 000000000..7bf0d911f --- /dev/null +++ "b/content/zh/docs/Developerguide/\347\244\272\344\276\2131 \351\200\232\350\277\207\346\234\254\345\234\260\346\226\207\344\273\266\345\257\274\345\205\245\345\257\274\345\207\272\346\225\260\346\215\256.md" @@ -0,0 +1,111 @@ +# 示例1:通过本地文件导入导出数据 + +在使用JAVA语言基于openGauss进行二次开发时,可以使用CopyManager接口,通过流方式,将数据库中的数据导出到本地文件或者将本地文件导入数据库中,文件格式支持CSV、TEXT等格式。 + +样例程序如下,执行时需要加载openGauss的JDBC驱动。 + +``` +import java.sql.Connection; +import java.sql.DriverManager; +import java.io.IOException; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.sql.SQLException; +import org.postgresql.copy.CopyManager; +import org.postgresql.core.BaseConnection; + +public class Copy{ + + public static void main(String[] args) + { + String urls = new String("jdbc:postgresql://localhost:8000/postgres"); //数据库URL + String username = new String("username"); //用户名 + String password = new String("passwd"); //密码 + String tablename = new String("migration_table"); //定义表信息 + String tablename1 = new String("migration_table_1"); //定义表信息 + String driver = "org.postgresql.Driver"; + Connection conn = null; + + try { + Class.forName(driver); + conn = DriverManager.getConnection(urls, username, password); + } catch (ClassNotFoundException e) { + e.printStackTrace(System.out); + } catch (SQLException e) { + e.printStackTrace(System.out); + } + + // 将表migration_table中数据导出到本地文件d:/data.txt + try { + copyToFile(conn, "d:/data.txt", "(SELECT * FROM migration_table)"); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + //将d:/data.txt中的数据导入到migration_table_1中。 + try { + copyFromFile(conn, "d:/data.txt", tablename1); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + // 将表migration_table_1中的数据导出到本地文件d:/data1.txt + try { + copyToFile(conn, "d:/data1.txt", tablename1); + } catch (SQLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public static void copyFromFile(Connection connection, String filePath, String tableName) + throws SQLException, IOException { + + FileInputStream fileInputStream = null; + + try { + CopyManager copyManager = new CopyManager((BaseConnection)connection); + fileInputStream = new FileInputStream(filePath); + copyManager.copyIn("COPY " + tableName + " FROM STDIN with (" + "DELIMITER"+"'"+ delimiter + "'" + "ENCODING " + "'" + encoding + "')", fileInputStream); + } finally { + if (fileInputStream != null) { + try { + fileInputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } + public static void copyToFile(Connection connection, String filePath, String tableOrQuery) + throws SQLException, IOException { + + FileOutputStream fileOutputStream = null; + + try { + CopyManager copyManager = new CopyManager((BaseConnection)connection); + fileOutputStream = new FileOutputStream(filePath); + copyManager.copyOut("COPY " + tableOrQuery + " TO STDOUT", fileOutputStream); + } finally { + if (fileOutputStream != null) { + try { + fileOutputStream.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + } +} +``` + diff --git "a/content/zh/docs/Developerguide/\347\244\272\344\276\2132 \344\273\216MySQL\345\220\221openGauss\350\277\233\350\241\214\346\225\260\346\215\256\350\277\201\347\247\273.md" "b/content/zh/docs/Developerguide/\347\244\272\344\276\2132 \344\273\216MySQL\345\220\221openGauss\350\277\233\350\241\214\346\225\260\346\215\256\350\277\201\347\247\273.md" new file mode 100644 index 000000000..f9d418a21 --- /dev/null +++ "b/content/zh/docs/Developerguide/\347\244\272\344\276\2132 \344\273\216MySQL\345\220\221openGauss\350\277\233\350\241\214\346\225\260\346\215\256\350\277\201\347\247\273.md" @@ -0,0 +1,91 @@ +# 示例2:从MySQL向openGauss进行数据迁移 + +下面示例演示如何通过CopyManager从MySQL向openGauss进行数据迁移的过程。 + +``` +import java.io.StringReader; +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.sql.Statement; + +import org.postgresql.copy.CopyManager; +import org.postgresql.core.BaseConnection; + +public class Migration{ + + public static void main(String[] args) { + String url = new String("jdbc:postgresql://localhost:8000/postgres"); //数据库URL + String user = new String("username"); //openGauss用户名 + String pass = new String("passwd"); //openGauss密码 + String tablename = new String("migration_table_1"); //定义表信息 + String delimiter = new String("|"); //定义分隔符 + String encoding = new String("UTF8"); //定义字符集 + String driver = "org.postgresql.Driver"; + StringBuffer buffer = new StringBuffer(); //定义存放格式化数据的缓存 + + try { + //获取源数据库查询结果集 + ResultSet rs = getDataSet(); + + //遍历结果集,逐行获取记录 + //将每条记录中各字段值,按指定分隔符分割,由换行符结束,拼成一个字符串 + //把拼成的字符串,添加到缓存buffer + while (rs.next()) { + buffer.append(rs.getString(1) + delimiter + + rs.getString(2) + delimiter + + rs.getString(3) + delimiter + + rs.getString(4) + + "\n"); + } + rs.close(); + + try { + //建立目标数据库连接 + Class.forName(driver); + Connection conn = DriverManager.getConnection(url, user, pass); + BaseConnection baseConn = (BaseConnection) conn; + baseConn.setAutoCommit(false); + + //初始化表信息 + String sql = "Copy " + tablename + " from STDIN with (DELIMITER " + "'" + delimiter + "'" +","+ " ENCODING " + "'" + encoding + "'"); + + //提交缓存buffer中的数据 + CopyManager cp = new CopyManager(baseConn); + StringReader reader = new StringReader(buffer.toString()); + cp.copyIn(sql, reader); + baseConn.commit(); + reader.close(); + baseConn.close(); + } catch (ClassNotFoundException e) { + e.printStackTrace(System.out); + } catch (SQLException e) { + e.printStackTrace(System.out); + } + + } catch (Exception e) { + e.printStackTrace(); + } + } + + //******************************** + // 从源数据库返回查询结果集 + //********************************* + private static ResultSet getDataSet() { + ResultSet rs = null; + try { + Class.forName("com.mysql.jdbc.Driver").newInstance(); + Connection conn = DriverManager.getConnection("jdbc:mysql://10.119.179.227:3306/jack?useSSL=false&allowPublicKeyRetrieval=true", "jack", "Gauss@123"); + Statement stmt = conn.createStatement(); + rs = stmt.executeQuery("select * from migration_table"); + } catch (SQLException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + return rs; + } +} +``` + diff --git "a/content/zh/docs/Developerguide/\350\256\276\347\275\256\346\226\207\344\273\266\346\235\203\351\231\220\345\256\211\345\205\250\347\255\226\347\225\245 9.md" "b/content/zh/docs/Developerguide/\350\256\276\347\275\256\346\226\207\344\273\266\346\235\203\351\231\220\345\256\211\345\205\250\347\255\226\347\225\245 9.md" new file mode 100644 index 000000000..7b7c5ca7d --- /dev/null +++ "b/content/zh/docs/Developerguide/\350\256\276\347\275\256\346\226\207\344\273\266\346\235\203\351\231\220\345\256\211\345\205\250\347\255\226\347\225\245 9.md" @@ -0,0 +1,211 @@ +# 设置文件权限安全策略 + +## 背景信息 + +数据库在安装过程中,会自动对其文件权限(包括运行过程中生成的文件,如日志文件等)进行设置。其权限规则如下: + +- 数据库程序目录的权限为0750。 +- 数据库数据文件目录的权限为0700。 + + openGauss部署时通过创建xml配置文件中的tmpMppdbPath参数指定目录(若未指定,则默认创建/tmp/$USER\_mppdb目录)来存放“.s.PGSQL.\*”文件,该目录和文件权限设置为0700。 + +- 数据库的数据文件、审计日志和其他数据库程序生成的数据文件的权限为0600,运行日志的权限默认不高于0640。 +- 普通操作系统用户不允许修改和删除数据库文件和日志文件。 + +## 数据库程序目录及文件权限 + +数据库安装后,部分程序目录及文件权限如[表1](#zh-cn_topic_0237121115_zh-cn_topic_0059779254_t0da233846f2544f39362bcf53de94799)所示。 + +**表 1** 文件及目录权限 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

文件/目录

+

父目录

+

权限

+

bin

+

-

+

0700

+

lib

+

-

+

0700

+

share

+

-

+

0700

+

data(数据库节点/数据库主节点

+

-

+

0700

+

base

+

实例数据目录

+

0700

+

global

+

实例数据目录

+

0700

+

pg_audit

+

实例数据目录(可配置)

+

0700

+

pg_log

+

实例数据目录(可配置)

+

0700

+

pg_xlog

+

实例数据目录

+

0700

+

postgresql.conf

+

实例数据目录

+

0600

+

pg_hba.conf

+

实例数据目录

+

0600

+

postmaster.opts

+

实例数据目录

+

0600

+

pg_ident.conf

+

实例数据目录

+

0600

+

gs_initdb

+

bin

+

0700

+

gs_dump

+

bin

+

0700

+

gs_ctl

+

bin

+

0700

+

gs_guc

+

bin

+

0700

+

gsql

+

bin

+

0700

+

cm_ctl

+

bin

+

0700

+

gs_gtm

+

bin

+

0700

+

gds

+

bin

+

0700

+

gs_redis

+

bin

+

0700

+

gs_clean

+

bin

+

0700

+

archive_status

+

pg_xlog

+

0700

+

libpq.so.5.5

+

lib

+

0600

+
+ +## 建议 + +数据库在安装过程中,会自动对其文件权限(包括运行过程中生成的文件,如日志文件等)进行设置,适合大多数情况下的权限要求。如果用户产品对相关权限有特殊要求,建议用户安装后定期检查相关权限设置,确保完全符合产品要求。 + diff --git "a/content/zh/docs/Developerguide/\350\257\201\344\271\246\346\233\277\346\215\242 8.md" "b/content/zh/docs/Developerguide/\350\257\201\344\271\246\346\233\277\346\215\242 8.md" new file mode 100644 index 000000000..72ffec9a5 --- /dev/null +++ "b/content/zh/docs/Developerguide/\350\257\201\344\271\246\346\233\277\346\215\242 8.md" @@ -0,0 +1,62 @@ +# 证书替换 + +## 操作场景 + +openGauss默认配置了SSL连接所需要的安全的证书、私钥,用户如果需要替换为自己的证书、私钥则可按照此方法进行替换。 + +## 前提条件 + +用户需要从CA认证中心申请到正式的服务器、客户端的证书和密钥。 + +## 注意事项 + +openGauss目前只支持X509v3的PEM格式证书。 + +## 操作步骤 + +1. 准备证书、私钥。 + + 服务端各个配置文件名称约定: + + - 证书名称约定:server.crt。 + - 私钥名称约定:server.key。 + - 私钥密码加密文件约定:server.key.cipher、server.key.rand。 + + 客户端各个配置文件名称约定: + + - 证书名称约定:client.crt。 + - 私钥名称约定:client.key。 + - 私钥密码加密文件约定:client.key.cipher、client.key.rand。 + - 根证书名称约定:cacert.pem。 + - 吊销证书列表文件名称约定:sslcrl-file.crl。 + +2. 制作压缩包。 + + 压缩包名称约定:db-cert-replacement.zip。 + + 压缩包格式约定:ZIP。 + + 压缩包文件列表约定:server.crt、server.key、server.key.cipher、server.key.rand、client.crt、client.key、client.key.cipher、client.key.rand、cacert.pem。如果需要配置吊销证书列表,则列表中包含sslcrl-file.crl。 + +3. 调用接口,执行替换。 + 1. 将制作好的压缩包db-cert-replacement.zip上传到openGauss用户下的任意路径。 + + 例如:/home/xxxx/db-cert-replacement.zip。 + + 2. 调用如下命令进行替换。 + + ``` + gs_om -t cert --cert-file= /home/xxxx/db-cert-replacement.zip + ``` + +4. 重启openGauss。 + + ``` + gs_om -t stop + gs_om -t start + ``` + + +>![](public_sys-resources/icon-note.gif) **说明:** +>证书具有rollback功能,可以把上一次执行证书替换之前的证书,进行回退。可以使用gs\_om -t cert --rollback进行远程调用该接口;使用gs\_om -t cert --rollback -L进行本地调用该接口。以上一次成功执行证书替换后,被替换的证书版本为基础进行回退。 + diff --git "a/content/zh/docs/Developerguide/\350\257\201\344\271\246\347\224\237\346\210\220 7.md" "b/content/zh/docs/Developerguide/\350\257\201\344\271\246\347\224\237\346\210\220 7.md" new file mode 100644 index 000000000..62727ed6d --- /dev/null +++ "b/content/zh/docs/Developerguide/\350\257\201\344\271\246\347\224\237\346\210\220 7.md" @@ -0,0 +1,269 @@ +# 证书生成 + +## 操作场景 + +在测试环境下,用户可以用通过以下方式进行数字证书测试。在客户的运行环境中,请使用从CA认证中心申请的数字证书。 + +## 前提条件 + +Linux环境安装了openssl组件。 + +## 自认证证书生成过程 + +1. 搭建CA环境。 + + ``` + --假设用户为omm已存在,搭建CA的路径为test + --以root用户身份登录Linux环境,切换到用户omm + mkdir test + cd /etc/ssl + --copy 配置文件openssl.cnf到test下 + cp openssl.cnf ~/test + cd ~/test + --到test文件夹下,开始搭建CA环境 + --创建文件夹demoCA./demoCA/newcerts./demoCA/private + mkdir ./demoCA ./demoCA/newcerts ./demoCA/private + chmod 777 ./demoCA/private + --创建serial文件,写入01 + echo '01'>./demoCA/serial + --创建文件index.txt + touch /home/omm/test/demoCA/index.txt + --修改openssl.cnf配置文件中的参数 + dir = /home/omm/test/demoCA + default_md = sha256 + --至此CA环境搭建完成 + ``` + +2. 生成根私钥。 + + ``` + --生成CA私钥 + openssl genrsa -aes256 -out demoCA/private/cakey.pem 2048 + Generating RSA private key, 2048 bit long modulus + .................+++ + ..................+++ + e is 65537 (0x10001) + --设置根私钥的保护密码,最少要求4个字符,假设为Test@123 + Enter pass phrase for demoCA/private/cakey.pem: + --再次输入私钥密码 Test@123 + Verifying - Enter pass phrase for demoCA/private/cakey.pem: + ``` + +3. 生成根证书请求文件。 + + ``` + --生成CA根证书申请文件server.req + openssl req -config openssl.cnf -new -key demoCA/private/cakey.pem -out demoCA/careq.pem + Enter pass phrase for demoCA/private/cakey.pem: + --输入根私钥密码 Test@123 + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + + --以下名称请牢记,生成服务器证书和客户端证书时填写的信息需要与此处的一致 + Country Name (2 letter code) [AU]:CN + State or Province Name (full name) [Some-State]:shanxi + Locality Name (eg, city) []:xian + Organization Name (eg, company) [Internet Widgits Pty Ltd]:Abc + Organizational Unit Name (eg, section) []:hello + --Common Name可以随意命名 + Common Name (eg, YOUR name) []:world + --Email可以选择性填写 + Email Address []: + + Please enter the following 'extra' attributes + to be sent with your certificate request + A challenge password []: + An optional company name []: + ``` + +4. 生成自签发根证书。 + + ``` + --生成根证书时,需要修改openssl.cnf文件,设置basicConstraints=CA:TRUE + vi openssl.cnf + --生成CA自签发根证书 + openssl ca -config openssl.cnf -out demoCA/cacert.pem -keyfile demoCA/private/cakey.pem -selfsign -infiles demoCA/careq.pem + Using configuration from openssl.cnf + Enter pass phrase for demoCA/private/cakey.pem: + --输入根私钥密码 Test@123 + Check that the request matches the signature + Signature ok + Certificate Details: + Serial Number: 1 (0x1) + Validity + Not Before: Feb 28 02:17:11 2017 GMT + Not After : Feb 28 02:17:11 2018 GMT + Subject: + countryName = CN + stateOrProvinceName = shanxi + organizationName = Abc + organizationalUnitName = hello + commonName = world + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + Netscape Comment: + OpenSSL Generated Certificate + X509v3 Subject Key Identifier: + F9:91:50:B2:42:8C:A8:D3:41:B0:E4:42:CB:C2:BE:8D:B7:8C:17:1F + X509v3 Authority Key Identifier: + keyid:F9:91:50:B2:42:8C:A8:D3:41:B0:E4:42:CB:C2:BE:8D:B7:8C:17:1F + + Certificate is to be certified until Feb 28 02:17:11 2018 GMT (365 days) + Sign the certificate? [y/n]:y + + + 1 out of 1 certificate requests certified, commit? [y/n]y + Write out database with 1 new entries + Data Base Updated + --至此CA根证书自签发完成,根证书demoCA/cacert.pem。 + ``` + +5. 生成服务端证书私钥。 + + ``` + --生成服务器私钥文件server.key + openssl genrsa -aes256 -out server.key 2048 + Generating a 2048 bit RSA private key + .......++++++ + ..++++++ + e is 65537 (0x10001) + Enter pass phrase for server.key: + --服务器私钥的保护密码,最少要求4个字符,假设为Test@123 + Verifying - Enter pass phrase for server.key: + --再次确认服务器私钥的保护密码,即为Test@123 + ``` + +6. 生成服务端证书请求文件。 + + ``` + --生成服务器证书请求文件server.req + openssl req -config openssl.cnf -new -key server.key -out server.req + Enter pass phrase for server.key: + You are about to be asked to enter information that will be incorporated + into your certificate request. + What you are about to enter is what is called a Distinguished Name or a DN. + There are quite a few fields but you can leave some blank + For some fields there will be a default value, + If you enter '.', the field will be left blank. + ----- + + --以下填写的信息与创建CA时的信息一致 + Country Name (2 letter code) [AU]:CN + State or Province Name (full name) [Some-State]:shanxi + Locality Name (eg, city) []:xian + Organization Name (eg, company) [Internet Widgits Pty Ltd]:Abc + Organizational Unit Name (eg, section) []:hello + --Common Name可以随意命名 + Common Name (eg, YOUR name) []:world + Email Address []: + --以下信息可以选择性填写 + Please enter the following 'extra' attributes + to be sent with your certificate request + A challenge password []: + An optional company name []: + ``` + +7. 生成服务端证书。 + + ``` + --生成服务端/客户端证书时,修改openssl.cnf文件,设置basicConstraints=CA:FALSE + vi openssl.cnf + --修改demoCA/index.txt.attr中属性为no。 + vi demoCA/index.txt.attr + + --对生成的服务器证书请求文件进行签发,签发后将生成正式的服务器证书server.crt + openssl ca -config openssl.cnf -in server.req -out server.crt -days 3650 -md sha256 + Using configuration from /etc/ssl/openssl.cnf + Enter pass phrase for ./demoCA/private/cakey.pem: + Check that the request matches the signature + Signature ok + Certificate Details: + Serial Number: 2 (0x2) + Validity + Not Before: Feb 27 10:11:12 2017 GMT + Not After : Feb 25 10:11:12 2027 GMT + Subject: + countryName = CN + stateOrProvinceName = shanxi + organizationName = Abc + organizationalUnitName = hello + commonName = world + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + Netscape Comment: + OpenSSL Generated Certificate + X509v3 Subject Key Identifier: + EB:D9:EE:C0:D2:14:48:AD:EB:BB:AD:B6:29:2C:6C:72:96:5C:38:35 + X509v3 Authority Key Identifier: + keyid:84:F6:A1:65:16:1F:28:8A:B7:0D:CB:7E:19:76:2A:8B:F5:2B:5C:6A + + Certificate is to be certified until Feb 25 10:11:12 2027 GMT (3650 days) + --选择y对证书进行签发 + Sign the certificate? [y/n]:y + + --选择y,证书签发结束 + 1 out of 1 certificate requests certified, commit? [y/n]y + Write out database with 1 new entries + Data Base Updated + ``` + + 去掉私钥密码保护,方法如下: + + ``` + --去掉服务器私钥的密码保护 + openssl rsa -in server.key -out server.key + --如果不去掉服务器私钥的密码保护需要使用gs_guc工具对存储密码进行加密保护 + gs_guc encrypt -M server -K Test@123 -D ./ + --gs_guc加密后会生成server.key.cipher,server.key.rand两个私钥密码保护文件 + ``` + +8. 客户端证书,私钥的生成。 + + 生成客户端证书和客户端私钥的方法和要求与服务器相同。 + + ``` + --生成客户端私钥 + openssl genrsa -aes256 -out client.key 2048 + --生成客户端证书请求文件 + openssl req -config openssl.cnf -new -key client.key -out client.req + --对生成的客户端证书请求文件进行签发,签发后将生成正式的客户端证书client.crt + openssl ca -config openssl.cnf -in client.req -out client.crt -days 3650 -md sha256 + ``` + + 去掉私钥密码保护,方法如下: + + ``` + --去掉客户端私钥的密码 + openssl rsa -in client.key -out client.key + --如果不去掉客户端私钥的密码保护需要使用gs_guc工具对存储密码进行加密保护 + gs_guc encrypt -M client -K Test@123 -D ./ + gs_guc加密后会生成client.key.cipher,client.key.rand两个私钥密码保护文件。 + ``` + + 将客户端密钥转化为DER格式,方法如下: + + ``` + openssl pkcs8 -topk8 -outform DER -in client.key -out client.key.pk8 -nocrypt + ``` + +9. 吊销证书列表的生成。 + + 如果需要吊销列表,可按照如下方法生成: + + ``` + --首先创建crlnumber文件 + echo '00'>./demoCA/crlnumber + --吊销服务器证书 + openssl ca -config openssl.cnf -revoke server.crt + --生成证书吊销列表sslcrl-file.crl + openssl ca -config openssl.cnf -gencrl -out sslcrl-file.crl + ``` + + diff --git "a/content/zh/docs/Developerguide/\351\205\215\347\275\256\345\256\242\346\210\267\347\253\257\346\216\245\345\205\245\350\256\244\350\257\201 1.md" "b/content/zh/docs/Developerguide/\351\205\215\347\275\256\345\256\242\346\210\267\347\253\257\346\216\245\345\205\245\350\256\244\350\257\201 1.md" new file mode 100644 index 000000000..895ff5512 --- /dev/null +++ "b/content/zh/docs/Developerguide/\351\205\215\347\275\256\345\256\242\346\210\267\347\253\257\346\216\245\345\205\245\350\256\244\350\257\201 1.md" @@ -0,0 +1,115 @@ +# 配置客户端接入认证 + +## 背景信息 + +如果主机需要远程连接数据库,必须在数据库系统的配置文件中增加此主机的信息,并且进行客户端接入认证。配置文件(默认名称为pg\_hba.conf)存放在数据库的数据目录里。hba(host-based authentication)表示是基于主机的认证。 + +- 本产品支持如下三种认证方式,这三种方式都需要配置“pg\_hba.conf”文件。 + - 基于主机的认证:服务器端根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户是否通过认证。 + - 口令认证:包括远程连接的加密口令认证和本地连接的非加密口令认证。 + - SSL加密:使用OpenSSL(开源安全通信库)提供服务器端和客户端安全连接的环境。 + +- “pg\_hba.conf”文件的格式是一行写一条信息,表示一个认证规则,空白和注释(以\#开头)被忽略。 +- 每个认证规则是由若干空格和/,空格和制表符分隔的字段组成。如果字段用引号包围,则它可以包含空白。一条记录不能跨行存在。 + +## 操作步骤 + +1. 以操作系统用户omm登录数据库主节点。 +2. 配置客户端认证方式,允许客户端以“jack”用户连接到本机,此处远程连接禁止使用“omm”用户(即数据库初始化用户)。 + + 例如,下面示例中配置允许IP地址为10.10.0.30的客户端访问本机。 + + ``` + gs_guc set -N all -I all -h "host all jack 10.10.0.30/32 sha256" + ``` + + >![](public_sys-resources/icon-note.gif) **说明:** + >- 使用“jack”用户前,需先本地连接数据库,并在数据库中使用如下语句建立“jack”用户: + > ``` + > postgres=# CREATE USER jack PASSWORD 'Test@123'; + > ``` + >- -N all表示openGauss的所有主机。 + >- -I all表示主机的所有实例。 + >- -h表示指定需要在“pg\_hba.conf”增加的语句。 + >- all表示允许客户端连接到任意的数据库。 + >- jack表示连接数据库的用户。 + >- 10.10.0.30_/32_表示只允许IP地址为10.10.0.30的主机连接。此处的IP地址不能为openGauss内的IP,在使用过程中,请根据用户的网络进行配置修改。32表示子网掩码为1的位数,即255.255.255.255 + >- sha256表示连接时jack用户的密码使用sha256算法加密。 + + 这条命令在数据库主节点实例对应的“pg\_hba.conf”文件中添加了一条规则,用于对连接数据库主节点的客户端进行鉴定。 + + “pg\_hba.conf”文件中的每条记录可以是下面四种格式之一,四种格式的参数说明请参见[配置文件参考](配置文件参考.md#ZH-CN_TOPIC_0242376655)。 + + ``` + local DATABASE USER METHOD [OPTIONS] + host DATABASE USER ADDRESS METHOD [OPTIONS] + hostssl DATABASE USER ADDRESS METHOD [OPTIONS] + hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] + ``` + + 因为认证时系统是为每个连接请求顺序检查“pg\_hba.conf”里的记录的,所以这些记录的顺序是非常关键的。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >在配置“pg\_hba.conf”文件时,请依据通讯需求按照格式内容从上至下配置记录,优先级高的需求需要配置在前面。openGaussopenGauss和扩容配置的IP优先级最高,用户手动配置的IP请放在这二者之后,如果已经进行的客户配置和扩容节点的IP在同一网段,请在扩容前删除,扩容成功后再进行配置。 + + 因此对于认证规则的配置建议如下: + + - 靠前的记录有比较严格的连接参数和比较弱的认证方法。 + - 靠后的记录有比较宽松的连接参数和比较强的认证方法。 + + >![](public_sys-resources/icon-note.gif) **说明:** + >- 一个用户要想成功连接到特定的数据库,不仅需要通过pg\_hba.conf中的规则检查,还必须要有该数据库上的CONNECT权限。如果希望控制某些用户只能连接到指定数据库,赋予/撤销CONNECT权限通常比在pg\_hba.conf中设置规则更为简单。 + >- 对应openGauss外部客户端连接,trust为不安全的认证方式,请将认证方式设置为sha256。 + + +## 异常处理 + +用户认证失败有很多原因,通过服务器返回给客户端的提示信息,可以看到用户认证失败的原因。常见的错误提示请参见[表1](#zh-cn_topic_0237121090_zh-cn_topic_0059778856_t451d737a3917467b9691ba1306766cdb)。 + +**表 1** 错误提示 + + + + + + + + + + + + + + + + +

问题现象

+

解决方法

+

用户名或密码错误:

+
FATAL: invalid username/password,login denied
+

这条信息说明用户名或者密码错误,请检查输入是否有误。

+

连接的数据库不存在:

+
FATAL: database "TESTDB" does not exist
+

这条信息说明尝试连接的数据库不存在,请检查连接的数据库名输入是否有误。

+

未找到客户端匹配记录:

+
FATAL: no pg_hba.conf entry for host "10.10.0.60", user "ANDYM", database "TESTDB"
+

这条信息说明已经连接了服务器,但服务器拒绝了连接请求,因为没有在它的pg_hba.conf配置文件里找到匹配的记录。请联系数据库管理员在pg_hba.conf配置文件加入用户的信息。

+
+ +## 示例 + +``` +TYPE DATABASE USER ADDRESS METHOD + +"local" is for Unix domain socket connections only +#表示只允许以安装时-U参数指定的用户从服务器本机进行连接。 +local all all trust +IPv4 local connections: +#表示允许omm用户从10.10.0.50主机上连接到任意数据库,使用sha256算法对密码进行加密。 +host all omm 10.10.0.50/32 sha256 +#表示允许任何用户从10.10.0.0/24网段的主机上连接到任意数据库,使用sha256算法对密码进行加密,并且经过SSL加密传输。 +hostssl all all 10.10.0.0/24 sha256 +#表示允许任何用户从10.10.0.0/24网段的主机上连接到任意数据库,使用Kerberos认证方式,当前版本暂不支持客户端kerberos认证。 +host all all 10.10.0.0/24 gss include_realm=1 krb_realm=HADOOP.COM +``` + diff --git "a/content/zh/docs/Developerguide/\351\205\215\347\275\256\346\226\207\344\273\266\345\217\202\350\200\203 2.md" "b/content/zh/docs/Developerguide/\351\205\215\347\275\256\346\226\207\344\273\266\345\217\202\350\200\203 2.md" new file mode 100644 index 000000000..643de1b57 --- /dev/null +++ "b/content/zh/docs/Developerguide/\351\205\215\347\275\256\346\226\207\344\273\266\345\217\202\350\200\203 2.md" @@ -0,0 +1,133 @@ +# 配置文件参考 + +**表 1** 参数说明 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数名称

+

描述

+

取值范围

+

local

+

表示这条记录只接受通过Unix域套接字进行的连接。没有这种类型的记录,就不允许Unix域套接字的连接。

+

只有在从服务器本机使用gsql连接且在不指定-U参数的情况下,才是通过Unix域套接字连接。

+

-

+

host

+

表示这条记录既接受一个普通的TCP/IP套接字连接,也接受一个经过SSL加密的TCP/IP套接字连接。

+

-

+

hostssl

+

表示这条记录只接受一个经过SSL加密的TCP/IP套接字连接。

+

用SSL进行安全的连接,需要配置申请数字证书并配置相关参数,详细信息请参见用SSL进行安全的TCP/IP连接

+

hostnossl

+

表示这条记录只接受一个普通的TCP/IP套接字连接。

+

-

+

DATABASEGUC

+

声明记录所匹配且允许访问的数据库。

+
  • all:表示该记录匹配所有数据库。
  • sameuser:表示如果请求访问的数据库和请求的用户同名,则匹配。
  • samerole:表示请求的用户必须是与数据库同名角色中的成员。
  • samegroup:与samerole作用完全一致,表示请求的用户必须是与数据库同名角色中的成员。
  • 一个包含数据库名的文件或者文件中的数据库列表:文件可以通过在文件名前面加前缀@来声明。文件中的数据库列表以逗号或者换行符分隔。
  • 特定的数据库名称或者用逗号分隔的数据库列表。
    说明:

    值replication表示如果请求一个复制链接,则匹配,但复制链接不表示任何特定的数据库。如需使用名为replication的数据库,需在database列使用记录“replication”作为数据库名。

    +
    +
+

USER

+

声明记录所匹配且允许访问的数据库用户。

+
  • all:表明该记录匹配所有用户。
  • +用户角色:表示匹配任何直接或者间接属于这个角色的成员。
    说明:

    +表示前缀符号。

    +
    +
  • 一个包含用户名的文件或者文件中的用户列表:文件可以通过在文件名前面加前缀@来声明。文件中的用户列表以逗号或者换行符分隔。
  • 特定的数据库用户名或者用逗号分隔的用户列表。
+

ADDRESS

+

指定与记录匹配且允许访问的IP地址范围。

+

支持IPv4和IPv6,可以使用如下两种形式来表示:

+
  • IP地址/掩码长度。例如,10.10.0.0/24
  • IP地址子网掩码。例如,10.10.0.0 255.255.255.0
+
说明:

以IPv4格式给出的IP地址会匹配那些拥有对应地址的IPv6连接,比如127.0.0.1将匹配IPv6地址 ::ffff:127.0.0.1

+
+

METHOD

+

声明连接时使用的认证方法。

+

本产品支持如下几种认证方式,详细解释请参见表2

+
  • trust
  • reject
  • md5(不推荐使用,默认不支持,可通过password_encryption_type参数配置)
  • sha256
  • cert
  • gss(仅用于openGauss内部节点间认证)
+
+ +**表 2** 认证方式 + + + + + + + + + + + + + + + + + + + + + + + + + +

认证方式

+

说明

+

trust

+

采用这种认证模式时,本产品只完全信任从服务器本机使用gsql且不指定-U参数的连接,此时不需要口令。

+

trust认证对于单用户工作站的本地连接是非常合适和方便的,通常不适用于多用户环境。如果想使用这种认证方法,可利用文件系统权限限制对服务器的Unix域套接字文件的访问。要使用这种限制有两个方法:

+ +
须知:

设置文件系统权限只能Unix域套接字连接,它不会限制本地TCP/IP连接。为保证本地TCP/IP安全,openGauss不允许远程连接使用trust认证方法。

+
+

reject

+

无条件地拒绝连接。常用于过滤某些主机。

+

md5

+

要求客户端提供一个md5加密的口令进行认证。

+
须知:

不推荐使用md5认证,因为md5为不安全的加密算法,存在网络安全风险。openGauss保留md5认证和密码存储,是为了便于第三方工具的使用(比如TPCC评测工具)。

+
+

sha256

+

要求客户端提供一个sha256算法加密的口令进行认证,该口令在传送过程中结合salt(服务器发送给客户端的随机数)的单向sha256加密,增强了安全性。

+

cert

+

客户端证书认证模式,此模式需进行SSL连接配置且需要客户端提供有效的SSL证书,不需要提供用户密码。

+
须知:

该认证方式只支持hostssl类型的规则。

+
+

gss

+

使用基于gssapi的kerberos认证。

+
须知:
  • 该认证方式依赖kerberos server等组件,仅支持openGauss内部通信认证。当前版本暂不支持外部客户端通过kerberos认证连接。
  • 开启openGauss内部kerberos认证会使增加内部节点建连时间,即影响首次涉及内部建连的SQL操作性能,内部连接建立好后, 后续操作不受影响。
+
+
+ diff --git "a/content/zh/docs/Developerguide/\351\231\204\345\275\225 16.md" "b/content/zh/docs/Developerguide/\351\231\204\345\275\225 16.md" new file mode 100644 index 000000000..c4bc9532a --- /dev/null +++ "b/content/zh/docs/Developerguide/\351\231\204\345\275\225 16.md" @@ -0,0 +1,9 @@ +# 附录 + +- **[GIN索引](GIN索引.md)** + +- **[扩展函数](扩展函数.md)** + +- **[扩展语法](扩展语法.md)** + + diff --git "a/content/zh/docs/Quickstart/\345\256\211\345\205\250\345\222\214\350\256\244\350\257\201\357\274\210postgresql conf\357\274\211.md" "b/content/zh/docs/Quickstart/\345\256\211\345\205\250\345\222\214\350\256\244\350\257\201\357\274\210postgresql conf\357\274\211.md" new file mode 100644 index 000000000..51d3fc032 --- /dev/null +++ "b/content/zh/docs/Quickstart/\345\256\211\345\205\250\345\222\214\350\256\244\350\257\201\357\274\210postgresql conf\357\274\211.md" @@ -0,0 +1,381 @@ +# 安全和认证(postgresql.conf) + +介绍设置客户端和服务器的安全认证方式的相关参数。 + +## authentication\_timeout + +**参数说明:**完成客户端认证的最长时间。如果一个客户端没有在这段时间里完成与服务器端的认证,则服务器自动中断与客户端的连接,这样就避免了出问题的客户端无限制地占用连接数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,最小值为1,最大值为600,最小单位为s。 + +**默认值:**1min + +## auth\_iteration\_count + +**参数说明:**认证加密信息生成过程中使用的迭代次数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,2048-134217728。 + +**默认值:**10000 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>迭代次数设置过小会降低口令存储的安全性,设置过大会导致认证、用户创建等涉及口令加密的场景性能劣化,请根据实际硬件条件合理设置迭代次数,推荐采用默认迭代次数。 + +## session\_timeout + +**参数说明:**表明与服务器建立链接后,不进行任何操作的最长时间。 + +该参数属于USERSET类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,0-86400,最小单位为s,0表示关闭超时设置。 + +**默认值:**10min + +>![](public_sys-resources/icon-notice.gif) **须知:** +>openGauss gsql客户端中有自动重连机制,所以针对初始化用户本地连接,超时后gsql表现的现象为断开后重连。 + +## ssl + +**参数说明:**启用SSL连接。请在使用这个选项之前阅读[使用gsql连接](zh-cn_topic_0242370178.md)。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**布尔型 + +- on表示启用SSL连接。 +- off表示不启用SSL连接。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>openGauss目前支持SSL的场景为客户端连接数据库主节点场景,该参数目前建议只在数据库主节点中开启,数据库节点默认值为off。开启此参数需要同时配置ssl\_cert\_file、ssl\_key\_file和ssl\_ca\_file等参数及对应文件,不正确的配置可能会导致openGauss无法正常启动。 + +**默认值:**on + +## require\_ssl + +**参数说明:**设置服务器端是否强制要求SSL连接,该参数只有当参数[ssl](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_s8c4647db116f44c4b9ce3dceee3d6ffa)为on时才有效。请在使用这个选项之前阅读[使用gsql连接](zh-cn_topic_0242370178.md)。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**布尔型 + +- on表示服务器端强制要求SSL连接。 +- off表示服务器端对是否通过SSL连接不作强制要求。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>openGauss目前支持SSL的场景为客户端连接数据库主节点场景,该参数目前建议只在数据库主节点中开启。 + +**默认值:**off + +## ssl\_ciphers + +**参数说明:**指定SSL支持的加密算法列表。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串,如果指定多个加密算法,加密算法之间需要以分号分割。详细请参见[表4](zh-cn_topic_0242376656.md#zh-cn_topic_0237121092_zh-cn_topic_0059778374_t34eea0830ef94be1a866f0410ba3eb07)获取支持的加密算法。 + +**默认值:**ALL + +## ssl\_renegotiation\_limit + +**参数说明:**指定在会话密钥重新协商之前,通过SSL加密通道可以传输的流量。这个重新协商流量限制机制可以减少攻击者针对大量数据使用密码分析法破解密钥的几率,但是也带来较大的性能损失。流量是指发送和接受的流量总和。使用SSL重协商机制可能引入其他风险,因此已禁用SSL重协商机制,为保持版本兼容保留此参数,修改参数配置不再起作用。 + +该参数属于USERSET类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,最小值为0,最大值为2147483647。单位为KB。其中0表示禁用重新协商机制。 + +**默认值:**0 + +## ssl\_cert\_file + +**参数说明:**指定包含SSL服务器证书的文件的名称。必须使用相对路径,相对路径是相对于数据目录的。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串 + +**默认值:**server.crt + +## ssl\_key\_file + +**参数说明:**指定包含SSL私钥的文件名称。必须使用相对路径,相对路径是相对于数据目录的。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串 + +**默认值:**server.key + +## ssl\_ca\_file + +**参数说明:**指定包含CA信息的文件的名称。必须使用相对路径,相对路径是相对于数据目录的。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串 + +**默认值:**cacert.pem + +## ssl\_crl\_file + +**参数说明**:指定包含CRL信息的文件的名称。必须使用相对路径,相对路径是相对于数据目录的。 + +该参数属于POSTMASTER类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围**:字符串,其中空表示没有CA文件被加载,不进行客户端证书验证。 + +**默认值**:空 + +## krb\_server\_keyfile + +**参数说明:**指定Kerberos服务主配置文件的位置,详细请参见[客户端接入认证](zh-cn_topic_0242376653.md#ZH-CN_TOPIC_0242376653)。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串 + +**默认值:**空 + +## krb\_srvname + +**参数说明:**设置Kerberos服务名,详细请参见[客户端接入认证](zh-cn_topic_0242376653.md#ZH-CN_TOPIC_0242376653)。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**字符串 + +**默认值:**postgres + +## krb\_caseins\_users + +**参数说明:**设置Kerberos用户名是否大小写敏感。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**布尔型 + +- on表示大小写不敏感 +- off表示大小写敏感 + +**默认值:**off + +## modify\_initial\_password + +**参数说明:**当openGauss安装成功后,数据库中仅存在一个初始用户(UID为10的用户)。客户通过该帐户初次登录数据库进行操作时,该参数决定是否要对该初始帐户的密码进行修改。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**布尔型 + +- on表示openGauss安装成功后初始用户首次登录操作前需要修改初始密码。 +- off表示openGauss安装成功后初始用户无需修改初始密码即可进行操作。 + +**默认值:**off + +## password\_policy + +**参数说明:**在使用CREATE ROLE/USER或者ALTER ROLE/USER命令创建或者修改openGauss帐户时,该参数决定是否进行密码复杂度检查。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>从安全性考虑,请勿关闭密码复杂度策略。 + +**取值范围:**0、1 + +- 0表示不采用任何密码复杂度策略。 +- 1表示采用默认密码复杂度校验策略。 + +**默认值:**1 + +## password\_reuse\_time + +**参数说明:**在使用ALTER USER或者ALTER ROLE修改用户密码时,该参数指定是否对新密码进行可重用天数检查。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>修改密码时会检查配置参数[password\_reuse\_time](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)。 +>- 当[password\_reuse\_time](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)都为正数时,只要满足其中任一个,即可认为密码可以重用。 +>- 当[password\_reuse\_time](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)为0时,表示不限制密码重用天数,仅限制密码重用次数。 +>- 当[password\_reuse\_max](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)为0时,表示不限制密码重用次数,仅限制密码重用天数。 +>- 当[password\_reuse\_time](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)都为0时,表示不对密码重用进行限制。 + +**取值范围:**浮点型(天),最小值为0,最大值为3650。 + +- 0表示不检查密码可重用的天数。 +- 正数表示新密码不能为该值指定的天数内使用过的密码。 + +**默认值:**60 + +## password\_reuse\_max + +**参数说明:**在使用ALTER USER或者ALTER ROLE修改用户密码时,该参数指定是否对新密码进行可重用次数检查。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>修改密码时会检查配置参数[password\_reuse\_time](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)。 +>- 当[password\_reuse\_time](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)都为正数时,只要满足其中任一个,即可认为密码可以重用。 +>- 当[password\_reuse\_time](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)为0时,表示不限制密码重用天数,仅限制密码重用次数。 +>- 当[password\_reuse\_max](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)为0时,表示不限制密码重用次数,仅限制密码重用天数。 +>- 当[password\_reuse\_time](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_s36625909efc14a42af3e142435ae9794)和[password\_reuse\_max](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_scad28ae18dfc4557b10f51bf147a9e53)都为0时,表示不对密码重用进行限制。 + +**取值范围:**整型,最小值为0,最大值为1000。 + +- 0表示不检查密码可重用次数。 +- 正整数表示新密码不能为该值指定的次数内使用过的密码。 + +**默认值:**0 + +## password\_lock\_time + +**参数说明:**该参数指定帐户被锁定后自动解锁的时间。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>password\_lock\_time和[failed\_login\_attempts](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_sc155ec2258b34e78a2ffcf797e66b959)必须都为正数时锁定和解锁功能才能生效。 + +**取值范围:**浮点型,最小值为0,最大值为365,单位为天。 + +- 0表示密码验证失败时,自动锁定功能不生效。 +- 正数表示帐户被锁定后,当锁定时间超过password\_lock\_time设定的值时,帐户将会被自行解锁。 + +**默认值:**1 + +## failed\_login\_attempts + +**参数说明:**在任意时候,如果输入密码错误的次数达到failed\_login\_attempts则当前帐户被锁定,password\_lock\_time秒后被自动解锁。 例如,登录时输入密码失败,ALTER USER时修改密码失败等。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>failed\_login\_attempts和[password\_lock\_time](#zh-cn_topic_0242371486_zh-cn_topic_0237124696_zh-cn_topic_0059778664_s5e488e82235e4bd5b470b57a44a38c27)必须都为正数时锁定和解锁功能才能生效。 + +**取值范围:**整型,最小值为0,最大值为1000。 + +- 0表示自动锁定功能不生效。 +- 正整数表示当错误密码次数达到failed\_login\_attempts设定的值时,当前帐户将被锁定。 + +**默认值:**10 + +## password\_encryption\_type + +**参数说明:**该字段决定采用何种加密方式对用户密码进行加密存储。修改此参数的配置不会自动触发已有用户密码加密方式的修改,只会影响新创建用户或修改用户密码操作。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**0、1、2 + +- 0表示采用md5方式对密码加密。 +- 1表示采用sha256和md5两种方式分别对密码加密。 +- 2表示采用sha256方式对密码加密。 + +>![](public_sys-resources/icon-notice.gif) **须知:** +>md5为不安全的加密算法,不建议用户使用。 + +**默认值:**2 + +## password\_min\_length + +**参数说明:**该字段决定帐户密码的最小长度。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,6\~999个字符。 + +**默认值:**8 + +## password\_max\_length + +**参数说明:**该字段决定帐户密码的最大长度。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,6\~999个字符。 + +**默认值:**32 + +## password\_min\_uppercase + +**参数说明:**该字段决定帐户密码中至少需要包含大写字母个数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,0\~999 + +- 0表示没有限制。 +- 1\~999表示创建账户所指定的密码中至少需要包含大写字母个数。 + +**默认值:**0 + +## password\_min\_lowercase + +**参数说明:**该字段决定帐户密码中至少需要包含小写字母的个数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,0\~999 + +- 0表示没有限制。 +- 1\~999表示创建帐户所指定的密码中至少需要包含小写字母个数。 + +**默认值:**0 + +## password\_min\_digital + +**参数说明:**该字段决定帐户密码中至少需要包含数字的个数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,0\~999 + +- 0表示没有限制。 +- 1\~999表示创建帐户所指定的密码中至少需要包含数字个数。 + +**默认值:**0 + +## password\_min\_special + +**参数说明:**该字段决定帐户密码中至少需要包含特殊字符个数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,0\~999 + +- 0表示没有限制。 +- 1\~999表示创建帐户所指定的密码中至少需要包含特殊字符个数。 + +**默认值:**0 + +## password\_effect\_time + +**参数说明:**该字段决定帐户密码的有效时间。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**浮点型,最小值为0,最大值为999,单位为天。 + +- 0表示不开启有效期限制功能。 +- 1\~999表示创建帐户所指定的密码有效期,临近或超过有效期系统会提示用户修改密码。 + +**默认值:**90 + +## password\_notify\_time + +**参数说明:**该字段决定帐户密码到期前提醒的天数。 + +该参数属于SIGHUP类型参数,请参考[表1](重设参数.md#zh-cn_topic_0242370406_zh-cn_topic_0237121562_zh-cn_topic_0059777490_t91a6f212010f4503b24d7943aed6d846)中对应设置方法进行设置。 + +**取值范围:**整型,最小值为0,最大值为999,单位为天。 + +- 0表示不开启提醒功能。 +- 1\~999表示帐户密码到期前提醒的天数。 + +**默认值:**7 + diff --git "a/content/zh/docs/Quickstart/\347\244\272\344\276\213 0.md" "b/content/zh/docs/Quickstart/\347\244\272\344\276\213 0.md" new file mode 100644 index 000000000..c98a40860 --- /dev/null +++ "b/content/zh/docs/Quickstart/\347\244\272\344\276\213 0.md" @@ -0,0 +1,175 @@ +# 示例 + +此示例将演示如何基于openGauss提供的JDBC接口开发应用程序。 + +``` +//DBtest.java +//以下用例以gsjdbc4.jar为例,如果要使用gsjdbc200.jar,请替换驱动类名(将代码中的“org.postgresql”替换成“com.huawei.gauss200.jdbc”)与连接URL串前缀(将“jdbc:postgresql”替换为“jdbc:gaussdb”)。 +//演示基于JDBC开发的主要步骤,会涉及创建数据库、创建表、插入数据等。 + +import java.sql.Connection; +import java.sql.DriverManager; +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.sql.Statement; +import java.sql.CallableStatement; + +public class DBTest { + + //创建数据库连接。 + public static Connection GetConnection(String username, String passwd) { + String driver = "org.postgresql.Driver"; + String sourceURL = "jdbc:postgresql://localhost:8000/postgres"; + Connection conn = null; + try { + //加载数据库驱动。 + Class.forName(driver).newInstance(); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + + try { + //创建数据库连接。 + conn = DriverManager.getConnection(sourceURL, username, passwd); + System.out.println("Connection succeed!"); + } catch (Exception e) { + e.printStackTrace(); + return null; + } + + return conn; + }; + + //执行普通SQL语句,创建customer_t1表。 + public static void CreateTable(Connection conn) { + Statement stmt = null; + try { + stmt = conn.createStatement(); + + //执行普通SQL语句。 + int rc = stmt + .executeUpdate("CREATE TABLE customer_t1(c_customer_sk INTEGER, c_customer_name VARCHAR(32));"); + + stmt.close(); + } catch (SQLException e) { + if (stmt != null) { + try { + stmt.close(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + } + e.printStackTrace(); + } + } + + //执行预处理语句,批量插入数据。 + public static void BatchInsertData(Connection conn) { + PreparedStatement pst = null; + + try { + //生成预处理语句。 + pst = conn.prepareStatement("INSERT INTO customer_t1 VALUES (?,?)"); + for (int i = 0; i < 3; i++) { + //添加参数。 + pst.setInt(1, i); + pst.setString(2, "data " + i); + pst.addBatch(); + } + //执行批处理。 + pst.executeBatch(); + pst.close(); + } catch (SQLException e) { + if (pst != null) { + try { + pst.close(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + } + e.printStackTrace(); + } + } + + //执行预编译语句,更新数据。 + public static void ExecPreparedSQL(Connection conn) { + PreparedStatement pstmt = null; + try { + pstmt = conn + .prepareStatement("UPDATE customer_t1 SET c_customer_name = ? WHERE c_customer_sk = 1"); + pstmt.setString(1, "new Data"); + int rowcount = pstmt.executeUpdate(); + pstmt.close(); + } catch (SQLException e) { + if (pstmt != null) { + try { + pstmt.close(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + } + e.printStackTrace(); + } + } + + +//执行存储过程。 + public static void ExecCallableSQL(Connection conn) { + CallableStatement cstmt = null; + try { + + cstmt=conn.prepareCall("{? = CALL TESTPROC(?,?,?)}"); + cstmt.setInt(2, 50); + cstmt.setInt(1, 20); + cstmt.setInt(3, 90); + cstmt.registerOutParameter(4, Types.INTEGER); //注册out类型的参数,类型为整型。 + cstmt.execute(); + int out = cstmt.getInt(4); //获取out参数 + System.out.println("The CallableStatment TESTPROC returns:"+out); + cstmt.close(); + } catch (SQLException e) { + if (cstmt != null) { + try { + cstmt.close(); + } catch (SQLException e1) { + e1.printStackTrace(); + } + } + e.printStackTrace(); + } + } + + + /** + * 主程序,逐步调用各静态方法。 + * @param args + */ + public static void main(String[] args) { + //创建数据库连接。 + Connection conn = GetConnection("tester", "Password1234"); + + //创建表。 + CreateTable(conn); + + //批插数据。 + BatchInsertData(conn); + + //执行预编译语句,更新数据。 + ExecPreparedSQL(conn); + + //执行存储过程。 + ExecCallableSQL(conn); + + //关闭数据库连接。 + try { + conn.close(); + } catch (SQLException e) { + e.printStackTrace(); + } + + } + +} +``` + diff --git a/content/zh/docs/Toolreference/X Tuner.md b/content/zh/docs/Toolreference/X Tuner.md new file mode 100644 index 000000000..4007ac5da --- /dev/null +++ b/content/zh/docs/Toolreference/X Tuner.md @@ -0,0 +1,13 @@ +# X-Tuner + +- **[概述](概述.md)** + +- **[使用指导](使用指导-0.md)** + +- **[获取帮助](获取帮助-1.md)** + +- **[命令参考](命令参考-2.md)** + +- **[常见问题处理](常见问题处理-3.md)** + + diff --git a/content/zh/docs/Toolreference/kadmin local.md b/content/zh/docs/Toolreference/kadmin local.md new file mode 100644 index 000000000..75232cad0 --- /dev/null +++ b/content/zh/docs/Toolreference/kadmin local.md @@ -0,0 +1,10 @@ +# kadmin.local + +## 功能介绍 + +为openGauss认证服务Kerberos提供命令行接口, 直接接入kdc服务的数据库, 进行增加、删除、修改Kerberos用户等操作。 + +## 参数说明 + +Kerberos工具为开源第三方提供,具体参数说明请参考Kerberos官方文档:[https://web.mit.edu/kerberos/krb5-1.17/doc/admin/admin\_commands/index.html](https://web.mit.edu/kerberos/krb5-1.17/doc/admin/admin_commands/index.html) + diff --git "a/content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 0.md" "b/content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 0.md" new file mode 100644 index 000000000..9b56e0552 --- /dev/null +++ "b/content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 0.md" @@ -0,0 +1,27 @@ +# 使用指导 + +## 前提条件 + +需要首先保证数据库状态正常、客户端能够正常连接、且要求数据库内倒入数据,以便调优程序可以执行benchmark测试调优效果;用户需保证当前Python运行环境安装好相应依赖,且能够正常启动调优程序。 + +## 背景信息 + +调优程序是一个独立于数据库内核之外的工具,需要提供数据库及其所在实例的用户名和登录密码信息,以便控制数据库执行benchmark进行性能测试;在启动调优程序前,要求用户测试环境交互正常,能够正常跑通benchmark测试脚本、能够正常连接数据库。 + +## 使用步骤 + +1. 用户进行数据库安全配置,并验证调优程序所在客户机能够正常访问到数据库实例所在的服务器; +2. 用户向数据库实例内倒入数据(如TPC-C, TPC-H),并根据调优程序所给出的示例代码,编写符合自己实际业务的benchmark(benchmark实例脚本路径在benchmark目录中).并手动验证benchmark可以正常跑通并可获得稳定的测试结果,记录下此时的测试结果,以方便后续对比调优效果; +3. 用户在确保数据库运行正常并在无其他人使用时,备份现有参数,并修改调优参数列表配置文件(文件路径在knobs目录中,默认配置文件是knobs\_htap.py),设定需要调整的参数及其范围; +4. 用户输入数据库连接信息,选择当前调优模式为“训练”或“调优”,启动参数调优程序;例如在X-Tuner根目录中输入 + + python main.py -m train --db-name postgres\\ + + --db-user dba --port 1234 \\ + + --host 192.168.1.2 --host-user opengauss\\ + + --benchmark tpcc --model-path mymodel + +5. 若为“训练”模式,则输出训练后的模型,程序退出;若为“调优”模式,则输出调优后的最优参数列表,程序退出。用户通过对比调优结果,自行判断是否应该设置为该参数,并手动设置为推荐参数或重置为调优前参数。 + diff --git "a/content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 10.md" "b/content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 10.md" new file mode 100644 index 000000000..b05804a8f --- /dev/null +++ "b/content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 10.md" @@ -0,0 +1,182 @@ +# 使用指导 + +## 前提条件 + +需要保证openGauss处于正常状态,用户通过身份验证成功登录openGauss;用户执行的SQL语法正确无报错,且不会导致数据库异常等;历史性能数据窗口内openGauss并发量稳定,表结构、表数量不变,数据量无突变,涉及查询性能的guc参数不变;进行预测时,需要保证模型已训练并收敛;AiEngine运行环境稳定。 + +## 证书生成 + +AiEngine进程与内核进程通信需要证书认证,需要使用openssl工具生成双方证书。 + +1. 搭建证书生成环境,证书文件保存路径为$GAUSSHOME/CA: + + --拷贝证书生成脚本及相关文件 + + ``` + cp path_to_predictor/install/ssl.sh $GAUSSHOME/ + cp path_to_predictor/install/ca_ext.txt $GAUSSHOME/ + ``` + + --copy 配置文件openssl.cnf到CA下 + + ``` + cp /etc/openssl + cp openssl.cnf $GAUSSHOME/ + ``` + + --修改openssl.conf配置参数 + + ``` + dir = $GAUSSHOME/CA/demoCA + default_md = sha256 + ``` + + --至此证书生成环境准备完成 + +2. 生成证书及密钥 + + ``` + cd $GAUSSHOME + sh ssl.sh + ``` + + --根据提示设置密码,假如为Test@123: + + --密码要求至少3种不同类型字符,长度至少为8位 + + ``` + Please enter your password: + ``` + + --根据提示输入选项: + + ``` + + Certificate Details: + Serial Number: 1 (0x1) + Validity + Not Before: May 15 08:32:44 2020 GMT + Not After : May 15 08:32:44 2021 GMT + Subject: + countryName = CN + stateOrProvinceName = SZ + organizationName = HW + organizationalUnitName = GS + commonName = CA + X509v3 extensions: + X509v3 Basic Constraints: + CA:TRUE + Certificate is to be certified until May 15 08:32:44 2021 GMT (365 days) + Sign the certificate? [y/n]:y + 1 out of 1 certificate requests certified, commit? [y/n]y + ``` + + --输入拉起AIEngine的IP地址,如IP为127.0.0.1: + + ``` + Please enter your aiEngine IP: 127.0.0.1 + ``` + + --根据提示输入选项: + + ``` + Certificate Details: + Serial Number: 2 (0x2) + Validity + Not Before: May 15 08:38:07 2020 GMT + Not After : May 13 08:38:07 2030 GMT + Subject: + countryName = CN + stateOrProvinceName = SZ + organizationName = HW + organizationalUnitName = GS + commonName = 127.0.0.1 + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + Certificate is to be certified until May 13 08:38:07 2030 GMT (3650 days) + Sign the certificate? [y/n]:y + 1 out of 1 certificate requests certified, commit? [y/n]y + ``` + + --输入启动OpenGauss IP地址,如IP为127.0.0.1: + + ``` + Please enter your gaussdb IP: 127.0.0.1 + ``` + + --根据提示输入选项: + + ``` + Certificate Details: + Serial Number: 3 (0x3) + Validity + Not Before: May 15 08:41:46 2020 GMT + Not After : May 13 08:41:46 2030 GMT + Subject: + countryName = CN + stateOrProvinceName = SZ + organizationName = HW + organizationalUnitName = GS + commonName = 127.0.0.1 + X509v3 extensions: + X509v3 Basic Constraints: + CA:FALSE + Certificate is to be certified until May 13 08:41:46 2030 GMT (3650 days) + Sign the certificate? [y/n]:y + 1 out of 1 certificate requests certified, commit? [y/n]y + ``` + + --至此,相关证书及密钥已生成,($GAUSSHOME/CA)内容如下: + + ![](figures/zh-cn_image_0245423148.png) + +3. -- + +## 环境准备 + +1. 将工具代码文件夹拷贝至目标环境,代码路径:Code/src/gausskernel/dbmind/predictor。 + + --假设目标环境路径为/home/ai\_user : + + ``` + scp -r predictor ai_user@127.0.0.1:/home/ai_user/ + ``` + +2. 拷贝CA证书文件夹至aiEngine环境中某路径下: + + ``` + cp -r $GAUSSHOME/CA ai_user@127.0.0.1:/home/ai_user/ + ``` + +3. 安装predictor/install/requirements\(-gpu\).txt工具: + + ``` + 有GPU:pip install requirements-gpu.txt + 无GPU:pip install requirements.txt + ``` + + +## 拉起AiEngine + +1. 切换至aiEngine环境(即拷贝predictor的目标环境 ai\_user): + + 设置predictor/python/settings.py 中的相关参数: + + ``` + DEFAULT_FLASK_SERVER_HOST = '127.0.0.1' (aiEngine运行IP地址) + DEFAULT_FLASK_SERVER_PORT = '5000' (aiEngine运行端口号) + PATH_SSL = "/home/ai_user/CA" (CA文件夹绝对路径) + ``` + +2. 运行aiEngine启动脚本: + + ``` + run predictor/python/run.py + ``` + + 此时,aiEngine即在相应端口保持拉起状态,等待内核侧时间预测功能的请求指令。 + + 至此,aiEngine工具部署完成。从内核中发起执行时间预测功能指令步骤,请参考《时间预测使用说明》。 + + diff --git "a/content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 5.md" "b/content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 5.md" new file mode 100644 index 000000000..f1c01038f --- /dev/null +++ "b/content/zh/docs/Toolreference/\344\275\277\347\224\250\346\214\207\345\257\274 5.md" @@ -0,0 +1,75 @@ +# 使用指导 + +## 前提条件 + +首先需要保证用户提供的历史日志及待预测负载格式符合要求,其次为保证预测准确率,用户提供的历史语句日志应尽可能全面并具有代表性。 + +## 背景信息 + +工具目录下提供了示例数据集及演示代码,更加详细的说明与工具所需依赖请参考工具根目录下的Readme文件。 + +## 操作步骤 + +1. 如果这是您第一次使用本工具,您应该提供历史日志以供模型训练,类型为: + + ``` + 执行开始时间 | 执行结束时间 | 锁时间 | 执行等待时间 | 语句文本 + ``` + + 历史日志中每一行的格式如上,其中每两列之间的分隔符为'\\t|\\t',如果某列无法提供,请将其置0。 + +2. 执行训练命令进行训练: + + ``` + python src/main.py train [--train LOG_FILE] [--model MODEL_DIR] + ``` + + - **LOG\_FILE**: 供训练用历史日志的路径。 + + - **MODEL\_DIR**: 训练生成的模型及中间文件存储路径。 + +3. 在进行预测之前,请确保训练过程已经顺利完成。待预测负载需要为文件格式,格式为每行为一条语句。 + + 执行预测命令进行预测: + + ``` + python src/main.py predict [--model MODEL_DIR] [--predict WORKLOAD_FILE] [--ratio RETRAIN_RATIO] + ``` + + - **MODEL\_DIR**: 模型路径,应与训练过程所指定的同名参数值一致。 + + - **WORKLOAD\_FILE**: 待预测负载文件路径。 + + - **RETRAIN\_RATIO**: 推荐模型重训的阈值。 默认值为0.5,代表如果未训练元素数量达到已训练元素数量的0.5倍时,工具会提示您建议重新训练模型,使您的预测结果更加精准。在出现此提示时,不会影响该次预测。 + + - 预测结果为一个float类型的列表 ,其中第n个值代表了待预测负载第n行语句的预测执行时间。该结果会显示在您的屏幕上,且被返回。 + + + +>![](public_sys-resources/icon-note.gif) **说明:** +>如果您希望同时训练并预测,工具提供了快速启动方式命令: +>``` +>python src/main.py all [--train LOG_FILE] [--model MODEL_DIR] [--predict WORKLOAD_FILE] [--ratio RETRAIN_RATIO] +>``` +>各个参数含义与分别执行时一致。 + +## 示例 + +使用工具提供的demo数据进行训练: + +``` +python src/main.py train --train test/data/train.csv --model test/data/ +``` + +使用工具提供的demo数据进行预测: + +``` +python src/main.py predict --model test/data/ --predict test/data/test.csv --ratio 0.2 +``` + +快速启动: + +``` +python src/main.py all --train test/data/train.csv --model test/data/ --predict test/data/test.csv --ratio 0.2 +``` + diff --git "a/content/zh/docs/Toolreference/\345\221\275\344\273\244\345\217\202\350\200\203 2.md" "b/content/zh/docs/Toolreference/\345\221\275\344\273\244\345\217\202\350\200\203 2.md" new file mode 100644 index 000000000..7b393a51d --- /dev/null +++ "b/content/zh/docs/Toolreference/\345\221\275\344\273\244\345\217\202\350\200\203 2.md" @@ -0,0 +1,100 @@ +# 命令参考 + +**表 1** 常见参数 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数说明

+

取值范围

+

--mode, -m

+

指定调优程序运行的模式

+

train, tune

+

--config-file, -f

+

调优程序的配置文件,可选

+

-

+

--db-name

+

指定调优的数据库

+

-

+

--db-user

+

指定调优的数据库用户名

+

-

+

--port

+

数据库的监听端口

+

-

+

--host

+

数据库实例的宿主机IP

+

-

+

--host-user

+

数据库安装时的DBA用户名

+

-

+

--host-ssh-port

+

数据库实例所在宿主机的SSH端口号,可选

+

-

+

--scenario

+

指定调优的模式,对应三种不同的调优列表,用户可以对该调优列表进行修改

+

ap, htap, tp

+

--benchmark

+

由用户指定的benchmark脚本文件名

+

-

+

--model-path

+

调优强化学习模型存储或加载的文件路径

+

-

+

--version, -v

+

返回当前工具版本号

+

-

+
+ diff --git "a/content/zh/docs/Toolreference/\345\221\275\344\273\244\345\217\202\350\200\203 7.md" "b/content/zh/docs/Toolreference/\345\221\275\344\273\244\345\217\202\350\200\203 7.md" new file mode 100644 index 000000000..d3f36484d --- /dev/null +++ "b/content/zh/docs/Toolreference/\345\221\275\344\273\244\345\217\202\350\200\203 7.md" @@ -0,0 +1,44 @@ +# 命令参考 + +**表 1** 常见参数 + + + + + + + + + + + + + + + + + + + + + + + + +

参数

+

参数说明

+

取值范围

+

--train

+

供训练用历史日志的路径。

+

-

+

--model

+

训练生成的模型及中间文件存储路径,以及预测时指定的模型路径

+

-

+

--predict

+

待预测负载文件路径

+

-

+

--ratio

+

推荐重新训练阈值比率,可选

+

-

+
+ diff --git "a/content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 11.md" "b/content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 11.md" new file mode 100644 index 000000000..5e51ed842 --- /dev/null +++ "b/content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 11.md" @@ -0,0 +1,7 @@ +# 常见问题处理 + +- **AiEngine启动失败**:请检查ip地址,端口是否可用;CA证书路径是否存在。 +- **发起请求AiEngine无响应**:请检查通信双方CA证书是否一致。 +- **训练,测试场景失败**:请检查模型文件保存路径是否存在;训练预测文件是否在正确下载。 +- **更换AiEngine-IP地址**:按照[证书准备生成](使用指导-10.md#section1446112144912)步骤重新生成证书,在[生成根私钥证书及密钥](使用指导-10.md#li1783847165213)中替换成相应的IP地址即可。 + diff --git "a/content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 3.md" "b/content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 3.md" new file mode 100644 index 000000000..8d61c67ab --- /dev/null +++ "b/content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 3.md" @@ -0,0 +1,5 @@ +# 常见问题处理 + +- 数据库实例连接失败:请检查数据库实例的情况,是否数据库实例出现了问题或安全权限配置不正确; +- 重启失败:请检查数据库实例健康情况,确保数据库实例工作正常; + diff --git "a/content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 8.md" "b/content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 8.md" new file mode 100644 index 000000000..e9c604c05 --- /dev/null +++ "b/content/zh/docs/Toolreference/\345\270\270\350\247\201\351\227\256\351\242\230\345\244\204\347\220\206 8.md" @@ -0,0 +1,7 @@ +# 常见问题处理 + +- 训练场景失败:请检查历史日志文件路径是否正确,且文件格式符合上文规定。 + +- 测试场景失败:请检查模型路径是否正确。确保待预测负载文件格式正确。 + + diff --git "a/content/zh/docs/Toolreference/\346\211\247\350\241\214\345\221\275\344\273\244\346\212\245\351\224\231 Failed to obtain the GPHOME.md" "b/content/zh/docs/Toolreference/\346\211\247\350\241\214\345\221\275\344\273\244\346\212\245\351\224\231 Failed to obtain the GPHOME.md" new file mode 100644 index 000000000..dcae1ed03 --- /dev/null +++ "b/content/zh/docs/Toolreference/\346\211\247\350\241\214\345\221\275\344\273\244\346\212\245\351\224\231 Failed to obtain the GPHOME.md" @@ -0,0 +1,28 @@ +# 执行命令报错“Failed to obtain the GPHOME” + +## 问题现象 + +如果在root用户下执行工具命令时,出现如下信息, + +``` +Failed to obtain the GPHOME. +``` + +## 原因分析 + +可能是环境变量中GPHOME变量没有配置正确。需要检查环境变量GPHOME是否包含openGaussXML中gaussdbToolPath路径。 + +## 操作步骤 + +使用如下命令检查$GPHOME路径。 + +``` +echo $GPHOME +``` + +如果不是安装时默认的路径,请在配置文件中修改GPHOME的路径。 + +``` +vim /etc/profile +``` + diff --git "a/content/zh/docs/Toolreference/\346\246\202\350\277\260 4.md" "b/content/zh/docs/Toolreference/\346\246\202\350\277\260 4.md" new file mode 100644 index 000000000..596afa4c5 --- /dev/null +++ "b/content/zh/docs/Toolreference/\346\246\202\350\277\260 4.md" @@ -0,0 +1,4 @@ +# 概述 + +Sqldiag是一个语句时间诊断框架,通过深度学习和统计学习相结合,实现在不获取语句执行计划的前提下,依据语句逻辑相似度与历史执行记录,预测语句的执行时间。 + diff --git "a/content/zh/docs/Toolreference/\346\246\202\350\277\260 9.md" "b/content/zh/docs/Toolreference/\346\246\202\350\277\260 9.md" new file mode 100644 index 000000000..0ed8432b6 --- /dev/null +++ "b/content/zh/docs/Toolreference/\346\246\202\350\277\260 9.md" @@ -0,0 +1,4 @@ +# 概述 + +Predictor是基于机器学习且具有在线学习能力的查询时间预测工具。通过不断学习数据库内收集的历史执行信息,实现计划的执行时间/行数的预测功能。 + diff --git "a/content/zh/docs/Toolreference/\350\216\267\345\217\226\345\270\256\345\212\251 1.md" "b/content/zh/docs/Toolreference/\350\216\267\345\217\226\345\270\256\345\212\251 1.md" new file mode 100644 index 000000000..133d71884 --- /dev/null +++ "b/content/zh/docs/Toolreference/\350\216\267\345\217\226\345\270\256\345\212\251 1.md" @@ -0,0 +1,50 @@ +# 获取帮助 + +启动调优程序之前,可以通过如下命令获取帮助信息: + +``` +python main.py --help +``` + +输出帮助信息结果如下: + +``` +usage: main.py [-h] [-m {train,tune}] [-f CONFIG_FILE] [--db-name DB_NAME] + [--db-user DB_USER] [--db-user-pwd DB_USER_PWD] [--port PORT] + [--host HOST] [--host-user HOST_USER] + [--host-user-pwd HOST_USER_PWD] [--host-ssh-port HOST_SSH_PORT] + [--scenario {ap,tp,htap}] [--benchmark BENCHMARK] + [--model-path MODEL_PATH] [-v] + +X-Tuner: a self-tuning toolkit for OpenGauss. + +optional arguments: + -h, --help show this help message and exit + -m {train,tune}, --mode {train,tune} + train a reinforcement learning model or tune by your + trained model. + -f CONFIG_FILE, --config-file CONFIG_FILE + you can pass a config file path or you should manually + set database information. + --db-name DB_NAME database name. + --db-user DB_USER database user name. + --db-user-pwd DB_USER_PWD + database user password. + --port PORT database connection port. + --host HOST where did your database install on? + --host-user HOST_USER + user name of the host where your database installed + on. + --host-user-pwd HOST_USER_PWD + user password of the host where your database + installed on. + --host-ssh-port HOST_SSH_PORT + host ssh port. + --scenario {ap,tp,htap} + --benchmark BENCHMARK + --model-path MODEL_PATH + the place where you want to save model weights to or + load model weights from. + -v, --version show version. +``` + diff --git "a/content/zh/docs/Toolreference/\350\216\267\345\217\226\345\270\256\345\212\251 6.md" "b/content/zh/docs/Toolreference/\350\216\267\345\217\226\345\270\256\345\212\251 6.md" new file mode 100644 index 000000000..842fb0841 --- /dev/null +++ "b/content/zh/docs/Toolreference/\350\216\267\345\217\226\345\270\256\345\212\251 6.md" @@ -0,0 +1,31 @@ +# 获取帮助 + +使用Sqldiag工具前,您可以通过以下指令获取帮助。 + +``` +cd src +python main.py --help +``` + +显示如下帮助信息: + +``` +usage: main.py [-h] [--train TRAIN] [--model MODEL] [--predict PREDICT] + [--ratio RATIO] + {all,train,predict} + +Slow SQL Diagnose + +positional arguments: + {all,train,predict} Execution style + +optional arguments: + -h, --help show this help message and exit + --train TRAIN History Log Data Directory + --model MODEL Output data directory + --predict PREDICT To-be-predicted workload data directory + --ratio RATIO Ratio threshold for retrain recommend +``` + +您也可以通过工具内的Readme文件获取更加详细的帮助。 + diff --git a/content/zh/docs/installation/completing the installation.md b/content/zh/docs/installation/completing the installation.md new file mode 100644 index 000000000..98ece32f0 --- /dev/null +++ b/content/zh/docs/installation/completing the installation.md @@ -0,0 +1 @@ +这篇文档描述如何完成安装openGauss。 diff --git a/content/zh/docs/installation/configurations during installation.md b/content/zh/docs/installation/configurations during installation.md new file mode 100644 index 000000000..661f3261d --- /dev/null +++ b/content/zh/docs/installation/configurations during installation.md @@ -0,0 +1 @@ +这篇文档描述在安装openGauss过程中如何配置。 diff --git a/content/zh/docs/installation/starting installation.md b/content/zh/docs/installation/starting installation.md new file mode 100644 index 000000000..95b515658 --- /dev/null +++ b/content/zh/docs/installation/starting installation.md @@ -0,0 +1 @@ +这篇文档描述如何开始安装openGauss。 diff --git a/content/zh/menu/index.md b/content/zh/menu/index.md index 6b685419f..5504c0391 100644 --- a/content/zh/menu/index.md +++ b/content/zh/menu/index.md @@ -1,914 +1,916 @@ ---- -headless: true ---- -- [产品描述]({{< relref "./docs/Description/Description.md" >}}) - - [产品定位]({{< relref "./docs/Description/产品定位.md" >}}) - - [系统架构]({{< relref "./docs/Description/系统架构.md" >}}) - - [应用场景]({{< relref "./docs/Description/应用场景.md" >}}) - - [运行环境]({{< relref "./docs/Description/运行环境.md" >}}) - - [技术指标]({{< relref "./docs/Description/技术指标.md" >}}) - - [基本功能和特性]({{< relref "./docs/Description/基本功能和特性.md" >}}) - - [企业级增强特性]({{< relref "./docs/Description/企业级增强特性.md" >}}) - - [数据分区]({{< relref "./docs/Description/数据分区.md" >}}) - - [向量化执行和行列混合引擎]({{< relref "./docs/Description/向量化执行和行列混合引擎.md" >}}) - - [高可靠事务处理]({{< relref "./docs/Description/高可靠事务处理.md" >}}) - - [高并发&高性能]({{< relref "./docs/Description/高并发-高性能.md" >}}) - - [SQL自诊断]({{< relref "./docs/Description/SQL自诊断.md" >}}) - - [内存表]({{< relref "./docs/Description/内存表.md" >}}) - - [主备双机]({{< relref "./docs/Description/主备双机.md" >}}) -- [编译指导书]({{< relref "./docs/Compilationguide/Compilation.md" >}}) - - [搭建编译环境]({{< relref "./docs/Compilationguide/搭建编译环境.md" >}}) - - [硬件要求]({{< relref "./docs/Compilationguide/硬件要求.md" >}}) - - [软件要求]({{< relref "./docs/Compilationguide/软件要求.md" >}}) - - [操作系统要求]({{< relref "./docs/Compilationguide/操作系统要求.md" >}}) - - [软件依赖要求]({{< relref "./docs/Compilationguide/软件依赖要求.md" >}}) - - [环境变量配置]({{< relref "./docs/Compilationguide/环境变量配置.md" >}}) - - [版本编译]({{< relref "./docs/Compilationguide/版本编译.md" >}}) - - [编译前准备]({{< relref "./docs/Compilationguide/编译前准备.md" >}}) - - [代码下载]({{< relref "./docs/Compilationguide/代码下载.md" >}}) - - [软件安装编译]({{< relref "./docs/Compilationguide/软件安装编译.md" >}}) - - [产品安装包编译]({{< relref "./docs/Compilationguide/产品安装包编译.md" >}}) - - [FAQ]({{< relref "./docs/Compilationguide/FAQ.md" >}}) - - [如何清除编译过程中生成的临时文件]({{< relref "./docs/Compilationguide/如何清除编译过程中生成的临时文件.md" >}}) - - [如何解决“Configure error: Ccompiler cannot create executables”报错]({{< relref "./docs/Compilationguide/如何解决-Configure-error-Ccompiler-cannot-create-executables-报错.md" >}}) +- [产品描述]({{< relref "./docs/Description/Description.md >}}) + - [产品定位]({{< relref "./docs/Description/产品定位.md >}}) + - [系统架构]({{< relref "./docs/Description/系统架构.md >}}) + - [应用场景]({{< relref "./docs/Description/应用场景.md >}}) + - [运行环境]({{< relref "./docs/Description/运行环境.md >}}) + - [技术指标]({{< relref "./docs/Description/技术指标.md >}}) + - [基本功能和特性]({{< relref "./docs/Description/基本功能和特性.md >}}) + - [企业级增强特性]({{< relref "./docs/Description/企业级增强特性.md >}}) + - [数据分区]({{< relref "./docs/Description/数据分区.md >}}) + - [向量化执行和行列混合引擎]({{< relref "./docs/Description/向量化执行和行列混合引擎.md >}}) + - [高可靠事务处理]({{< relref "./docs/Description/高可靠事务处理.md >}}) + - [高并发&高性能]({{< relref "./docs/Description/高并发&高性能.md >}}) + - [SQL自诊断]({{< relref "./docs/Description/SQL自诊断.md >}}) + - [内存表]({{< relref "./docs/Description/内存表.md >}}) + - [主备双机]({{< relref "./docs/Description/主备双机.md >}}) -- [快速入门]({{< relref "./docs/Quickstart/Quickstart.md" >}}) - - [了解产品]({{< relref "./docs/Quickstart/了解产品.md" >}}) - - [产品特点]({{< relref "./docs/Quickstart/产品特点.md" >}}) - - [软件架构]({{< relref "./docs/Quickstart/软件架构.md" >}}) - - [典型组网]({{< relref "./docs/Quickstart/典型组网.md" >}}) - - [安装准备]({{< relref "./docs/Quickstart/安装准备.md" >}}) - - [了解安装流程]({{< relref "./docs/Quickstart/了解安装流程.md" >}}) - - [获取并校验安装包]({{< relref "./docs/Quickstart/获取并校验安装包.md" >}}) - - [准备软硬件安装环境]({{< relref "./docs/Quickstart/准备软硬件安装环境.md" >}}) - - [软硬件环境要求]({{< relref "./docs/Quickstart/软硬件环境要求.md" >}}) - - [修改操作系统配置]({{< relref "./docs/Quickstart/修改操作系统配置.md" >}}) - - [关闭操作系统防火墙]({{< relref "./docs/Quickstart/关闭操作系统防火墙.md" >}}) - - [设置字符集参数]({{< relref "./docs/Quickstart/设置字符集参数.md" >}}) - - [设置时区和时间]({{< relref "./docs/Quickstart/设置时区和时间.md" >}}) - - [关闭swap交换内存]({{< relref "./docs/Quickstart/关闭swap交换内存.md" >}}) - - [设置网卡MTU值]({{< relref "./docs/Quickstart/设置网卡MTU值.md" >}}) - - [设置root用户远程登录]({{< relref "./docs/Quickstart/设置root用户远程登录.md" >}}) - - [了解安装用户及用户组]({{< relref "./docs/Quickstart/了解安装用户及用户组.md" >}}) - - [安装openGauss]({{< relref "./docs/Quickstart/安装openGauss.md" >}}) - - [创建XML配置文件]({{< relref "./docs/Quickstart/创建XML配置文件.md" >}}) - - [配置数据库名称及各项目录]({{< relref "./docs/Quickstart/配置数据库名称及各项目录.md" >}}) - - [配置Host基本信息]({{< relref "./docs/Quickstart/配置Host基本信息.md" >}}) - - [配置数据库主节点信息]({{< relref "./docs/Quickstart/配置数据库主节点信息.md" >}}) - - [示例]({{< relref "./docs/Quickstart/示例.md" >}}) - - [单节点配置文件]({{< relref "./docs/Quickstart/单节点配置文件.md" >}}) - - [一主一备配置文件]({{< relref "./docs/Quickstart/一主一备配置文件.md" >}}) - - [初始化安装环境]({{< relref "./docs/Quickstart/初始化安装环境.md" >}}) - - [准备安装用户及环境]({{< relref "./docs/Quickstart/准备安装用户及环境.md" >}}) - - [手工建立互信]({{< relref "./docs/Quickstart/手工建立互信.md" >}}) - - [配置操作系统参数]({{< relref "./docs/Quickstart/配置操作系统参数.md" >}}) - - [执行安装]({{< relref "./docs/Quickstart/执行安装.md" >}}) - - [(可选)设置备机可读]({{< relref "./docs/Quickstart/(可选)设置备机可读.md" >}}) - - [开始使用产品]({{< relref "./docs/Quickstart/开始使用产品.md" >}}) - - [设置openGauss参数]({{< relref "./docs/Quickstart/设置openGauss参数.md" >}}) - - [设置客户端认证策略]({{< relref "./docs/Quickstart/设置客户端认证策略.md" >}}) - - [设置配置文件参数]({{< relref "./docs/Quickstart/设置配置文件参数.md" >}}) - - [gsql客户端连接openGauss]({{< relref "./docs/Quickstart/gsql客户端连接openGauss.md" >}}) - - [确认连接信息]({{< relref "./docs/Quickstart/确认连接信息.md" >}}) - - [使用gsql本地连接]({{< relref "./docs/Quickstart/使用gsql本地连接.md" >}}) - - [使用gsql远程连接]({{< relref "./docs/Quickstart/使用gsql远程连接.md" >}}) - - [通过gs\_guc配置白名单]({{< relref "./docs/Quickstart/通过gs_guc配置白名单.md" >}}) - - [安装gsql客户端并连接数据库]({{< relref "./docs/Quickstart/安装gsql客户端并连接数据库.md" >}}) - - [简单数据管理]({{< relref "./docs/Quickstart/简单数据管理.md" >}}) - - [创建数据库]({{< relref "./docs/Quickstart/创建数据库.md" >}}) - - [创建表]({{< relref "./docs/Quickstart/创建表.md" >}}) - - [查看对象]({{< relref "./docs/Quickstart/查看对象.md" >}}) - - [简单权限管理]({{< relref "./docs/Quickstart/简单权限管理.md" >}}) - - [创建角色]({{< relref "./docs/Quickstart/创建角色.md" >}}) - - [创建用户]({{< relref "./docs/Quickstart/创建用户.md" >}}) - - [权限赋予]({{< relref "./docs/Quickstart/权限赋予.md" >}}) - - [通过客户端工具执行SQL]({{< relref "./docs/Quickstart/通过客户端工具执行SQL.md" >}}) - - [执行单条SQL]({{< relref "./docs/Quickstart/执行单条SQL.md" >}}) - - [执行批量文件]({{< relref "./docs/Quickstart/执行批量文件.md" >}}) - - [通过JDBC执行SQL]({{< relref "./docs/Quickstart/通过JDBC执行SQL.md" >}}) - - [JDBC包与驱动类]({{< relref "./docs/Quickstart/JDBC包与驱动类.md" >}}) - - [加载驱动]({{< relref "./docs/Quickstart/加载驱动.md" >}}) - - [连接数据库]({{< relref "./docs/Quickstart/连接数据库.md" >}}) - - [示例]({{< relref "./docs/Quickstart/示例-0.md" >}}) - - [配置运行参数]({{< relref "./docs/Quickstart/配置运行参数.md" >}}) - - [查看参数当前取值]({{< relref "./docs/Quickstart/查看参数当前取值.md" >}}) - - [重设参数]({{< relref "./docs/Quickstart/重设参数.md" >}}) - - [GUC参数说明]({{< relref "./docs/Quickstart/GUC参数说明.md" >}}) - - [GUC使用说明]({{< relref "./docs/Quickstart/GUC使用说明.md" >}}) - - [文件位置]({{< relref "./docs/Quickstart/文件位置.md" >}}) - - [连接和认证]({{< relref "./docs/Quickstart/连接和认证.md" >}}) - - [连接设置]({{< relref "./docs/Quickstart/连接设置.md" >}}) - - [安全和认证(postgresql.conf)]({{< relref "./docs/Quickstart/安全和认证(postgresql-conf).md" >}}) - - [通信库参数]({{< relref "./docs/Quickstart/通信库参数.md" >}}) - - [资源消耗]({{< relref "./docs/Quickstart/资源消耗.md" >}}) - - [内存]({{< relref "./docs/Quickstart/内存.md" >}}) - - [磁盘空间]({{< relref "./docs/Quickstart/磁盘空间.md" >}}) - - [内核资源使用]({{< relref "./docs/Quickstart/内核资源使用.md" >}}) - - [基于开销的清理延迟]({{< relref "./docs/Quickstart/基于开销的清理延迟.md" >}}) - - [后端写进程]({{< relref "./docs/Quickstart/后端写进程.md" >}}) - - [异步IO]({{< relref "./docs/Quickstart/异步IO.md" >}}) - - [并行导入]({{< relref "./docs/Quickstart/并行导入.md" >}}) - - [预写式日志]({{< relref "./docs/Quickstart/预写式日志.md" >}}) - - [设置]({{< relref "./docs/Quickstart/设置.md" >}}) - - [检查点]({{< relref "./docs/Quickstart/检查点.md" >}}) - - [日志回放]({{< relref "./docs/Quickstart/日志回放.md" >}}) - - [归档]({{< relref "./docs/Quickstart/归档.md" >}}) - - [双机复制]({{< relref "./docs/Quickstart/双机复制.md" >}}) - - [发送端服务器]({{< relref "./docs/Quickstart/发送端服务器.md" >}}) - - [主服务器]({{< relref "./docs/Quickstart/主服务器.md" >}}) - - [备服务器]({{< relref "./docs/Quickstart/备服务器.md" >}}) - - [查询规划]({{< relref "./docs/Quickstart/查询规划.md" >}}) - - [优化器方法配置]({{< relref "./docs/Quickstart/优化器方法配置.md" >}}) - - [优化器开销常量]({{< relref "./docs/Quickstart/优化器开销常量.md" >}}) - - [基因查询优化器]({{< relref "./docs/Quickstart/基因查询优化器.md" >}}) - - [其他优化器选项]({{< relref "./docs/Quickstart/其他优化器选项.md" >}}) - - [错误报告和日志]({{< relref "./docs/Quickstart/错误报告和日志.md" >}}) - - [记录日志的位置]({{< relref "./docs/Quickstart/记录日志的位置.md" >}}) - - [记录日志的时间]({{< relref "./docs/Quickstart/记录日志的时间.md" >}}) - - [记录日志的内容]({{< relref "./docs/Quickstart/记录日志的内容.md" >}}) - - [使用CSV格式写日志]({{< relref "./docs/Quickstart/使用CSV格式写日志.md" >}}) - - [告警检测]({{< relref "./docs/Quickstart/告警检测.md" >}}) - - [运行时统计]({{< relref "./docs/Quickstart/运行时统计.md" >}}) - - [查询和索引统计收集器]({{< relref "./docs/Quickstart/查询和索引统计收集器.md" >}}) - - [性能统计]({{< relref "./docs/Quickstart/性能统计.md" >}}) - - [负载管理]({{< relref "./docs/Quickstart/负载管理.md" >}}) - - [自动清理]({{< relref "./docs/Quickstart/自动清理.md" >}}) - - [客户端连接缺省设置]({{< relref "./docs/Quickstart/客户端连接缺省设置.md" >}}) - - [语句行为]({{< relref "./docs/Quickstart/语句行为.md" >}}) - - [区域和格式化]({{< relref "./docs/Quickstart/区域和格式化.md" >}}) - - [其他缺省]({{< relref "./docs/Quickstart/其他缺省.md" >}}) - - [锁管理]({{< relref "./docs/Quickstart/锁管理.md" >}}) - - [版本和平台兼容性]({{< relref "./docs/Quickstart/版本和平台兼容性.md" >}}) - - [历史版本兼容性]({{< relref "./docs/Quickstart/历史版本兼容性.md" >}}) - - [平台和客户端兼容性]({{< relref "./docs/Quickstart/平台和客户端兼容性.md" >}}) - - [容错性]({{< relref "./docs/Quickstart/容错性.md" >}}) - - [openGauss事务]({{< relref "./docs/Quickstart/openGauss事务.md" >}}) - - [开发人员选项]({{< relref "./docs/Quickstart/开发人员选项.md" >}}) - - [审计]({{< relref "./docs/Quickstart/审计.md" >}}) - - [审计开关]({{< relref "./docs/Quickstart/审计开关.md" >}}) - - [用户和权限审计]({{< relref "./docs/Quickstart/用户和权限审计.md" >}}) - - [操作审计]({{< relref "./docs/Quickstart/操作审计.md" >}}) - - [事务监控]({{< relref "./docs/Quickstart/事务监控.md" >}}) - - [升级参数]({{< relref "./docs/Quickstart/升级参数.md" >}}) - - [其它选项]({{< relref "./docs/Quickstart/其它选项.md" >}}) - - [等待事件]({{< relref "./docs/Quickstart/等待事件.md" >}}) - - [Query]({{< relref "./docs/Quickstart/Query.md" >}}) - - [系统性能快照]({{< relref "./docs/Quickstart/系统性能快照.md" >}}) - - [FAQ]({{< relref "./docs/Quickstart/FAQ.md" >}}) - - [用户在openGauss节点间的互信丢失]({{< relref "./docs/Quickstart/用户在openGauss节点间的互信丢失.md" >}}) +- [快速入门]({{< relref "./docs/Quickstart/Quickstart.md >}}) + - [了解产品]({{< relref "./docs/Quickstart/了解产品.md >}}) + - [产品特点]({{< relref "./docs/Quickstart/产品特点.md >}}) + - [软件架构]({{< relref "./docs/Quickstart/软件架构.md >}}) + - [典型组网]({{< relref "./docs/Quickstart/典型组网.md >}}) + - [安装准备]({{< relref "./docs/Quickstart/安装准备.md >}}) + - [了解安装流程]({{< relref "./docs/Quickstart/了解安装流程.md >}}) + - [获取并校验安装包]({{< relref "./docs/Quickstart/获取并校验安装包.md >}}) + - [准备软硬件安装环境]({{< relref "./docs/Quickstart/准备软硬件安装环境.md >}}) + - [软硬件环境要求]({{< relref "./docs/Quickstart/软硬件环境要求.md >}}) + - [修改操作系统配置]({{< relref "./docs/Quickstart/修改操作系统配置.md >}}) + - [关闭操作系统防火墙]({{< relref "./docs/Quickstart/关闭操作系统防火墙.md >}}) + - [设置字符集参数]({{< relref "./docs/Quickstart/设置字符集参数.md >}}) + - [设置时区和时间]({{< relref "./docs/Quickstart/设置时区和时间.md >}}) + - [关闭swap交换内存]({{< relref "./docs/Quickstart/关闭swap交换内存.md >}}) + - [设置网卡MTU值]({{< relref "./docs/Quickstart/设置网卡MTU值.md >}}) + - [设置root用户远程登录]({{< relref "./docs/Quickstart/设置root用户远程登录.md >}}) + - [了解安装用户及用户组]({{< relref "./docs/Quickstart/了解安装用户及用户组.md >}}) + - [安装openGauss]({{< relref "./docs/Quickstart/安装openGauss.md >}}) + - [创建XML配置文件]({{< relref "./docs/Quickstart/创建XML配置文件.md >}}) + - [配置数据库名称及各项目录]({{< relref "./docs/Quickstart/配置数据库名称及各项目录.md >}}) + - [配置Host基本信息]({{< relref "./docs/Quickstart/配置Host基本信息.md >}}) + - [配置数据库主节点信息]({{< relref "./docs/Quickstart/配置数据库主节点信息.md >}}) + - [示例]({{< relref "./docs/Quickstart/示例.md >}}) + - [单节点配置文件]({{< relref "./docs/Quickstart/单节点配置文件.md >}}) + - [一主一备配置文件]({{< relref "./docs/Quickstart/一主一备配置文件.md >}}) + - [初始化安装环境]({{< relref "./docs/Quickstart/初始化安装环境.md >}}) + - [准备安装用户及环境]({{< relref "./docs/Quickstart/准备安装用户及环境.md >}}) + - [手工建立互信]({{< relref "./docs/Quickstart/手工建立互信.md >}}) + - [配置操作系统参数]({{< relref "./docs/Quickstart/配置操作系统参数.md >}}) + - [执行安装]({{< relref "./docs/Quickstart/执行安装.md >}}) + - [(可选)设置备机可读]({{< relref "./docs/Quickstart/(可选)设置备机可读.md >}}) + - [开始使用产品]({{< relref "./docs/Quickstart/开始使用产品.md >}}) + - [设置openGauss参数]({{< relref "./docs/Quickstart/设置openGauss参数.md >}}) + - [设置客户端认证策略]({{< relref "./docs/Quickstart/设置客户端认证策略.md >}}) + - [设置配置文件参数]({{< relref "./docs/Quickstart/设置配置文件参数.md >}}) + - [gsql客户端连接openGauss]({{< relref "./docs/Quickstart/gsql客户端连接openGauss.md >}}) + - [确认连接信息]({{< relref "./docs/Quickstart/确认连接信息.md >}}) + - [使用gsql本地连接]({{< relref "./docs/Quickstart/使用gsql本地连接.md >}}) + - [使用gsql远程连接]({{< relref "./docs/Quickstart/使用gsql远程连接.md >}}) + - [通过gs\_guc配置白名单]({{< relref "./docs/Quickstart/通过gs_guc配置白名单.md >}}) + - [安装gsql客户端并连接数据库]({{< relref "./docs/Quickstart/安装gsql客户端并连接数据库.md >}}) + - [简单数据管理]({{< relref "./docs/Quickstart/简单数据管理.md >}}) + - [创建数据库]({{< relref "./docs/Quickstart/创建数据库.md >}}) + - [创建表]({{< relref "./docs/Quickstart/创建表.md >}}) + - [查看对象]({{< relref "./docs/Quickstart/查看对象.md >}}) + - [简单权限管理]({{< relref "./docs/Quickstart/简单权限管理.md >}}) + - [创建角色]({{< relref "./docs/Quickstart/创建角色.md >}}) + - [创建用户]({{< relref "./docs/Quickstart/创建用户.md >}}) + - [权限赋予]({{< relref "./docs/Quickstart/权限赋予.md >}}) + - [通过客户端工具执行SQL]({{< relref "./docs/Quickstart/通过客户端工具执行SQL.md >}}) + - [执行单条SQL]({{< relref "./docs/Quickstart/执行单条SQL.md >}}) + - [执行批量文件]({{< relref "./docs/Quickstart/执行批量文件.md >}}) + - [通过JDBC执行SQL]({{< relref "./docs/Quickstart/通过JDBC执行SQL.md >}}) + - [JDBC包与驱动类]({{< relref "./docs/Quickstart/JDBC包与驱动类.md >}}) + - [加载驱动]({{< relref "./docs/Quickstart/加载驱动.md >}}) + - [连接数据库]({{< relref "./docs/Quickstart/连接数据库.md >}}) + - [示例]({{< relref "./docs/Quickstart/示例 0.md >}}) + - [配置运行参数]({{< relref "./docs/Quickstart/配置运行参数.md >}}) + - [查看参数当前取值]({{< relref "./docs/Quickstart/查看参数当前取值.md >}}) + - [重设参数]({{< relref "./docs/Quickstart/重设参数.md >}}) + - [GUC参数说明]({{< relref "./docs/Quickstart/GUC参数说明.md >}}) + - [GUC使用说明]({{< relref "./docs/Quickstart/GUC使用说明.md >}}) + - [文件位置]({{< relref "./docs/Quickstart/文件位置.md >}}) + - [连接和认证]({{< relref "./docs/Quickstart/连接和认证.md >}}) + - [连接设置]({{< relref "./docs/Quickstart/连接设置.md >}}) + - [安全和认证(postgresql.conf)]({{< relref "./docs/Quickstart/安全和认证(postgresql conf).md >}}) + - [通信库参数]({{< relref "./docs/Quickstart/通信库参数.md >}}) + - [资源消耗]({{< relref "./docs/Quickstart/资源消耗.md >}}) + - [内存]({{< relref "./docs/Quickstart/内存.md >}}) + - [磁盘空间]({{< relref "./docs/Quickstart/磁盘空间.md >}}) + - [内核资源使用]({{< relref "./docs/Quickstart/内核资源使用.md >}}) + - [基于开销的清理延迟]({{< relref "./docs/Quickstart/基于开销的清理延迟.md >}}) + - [后端写进程]({{< relref "./docs/Quickstart/后端写进程.md >}}) + - [异步IO]({{< relref "./docs/Quickstart/异步IO.md >}}) + - [并行导入]({{< relref "./docs/Quickstart/并行导入.md >}}) + - [预写式日志]({{< relref "./docs/Quickstart/预写式日志.md >}}) + - [设置]({{< relref "./docs/Quickstart/设置.md >}}) + - [检查点]({{< relref "./docs/Quickstart/检查点.md >}}) + - [日志回放]({{< relref "./docs/Quickstart/日志回放.md >}}) + - [归档]({{< relref "./docs/Quickstart/归档.md >}}) + - [双机复制]({{< relref "./docs/Quickstart/双机复制.md >}}) + - [发送端服务器]({{< relref "./docs/Quickstart/发送端服务器.md >}}) + - [主服务器]({{< relref "./docs/Quickstart/主服务器.md >}}) + - [备服务器]({{< relref "./docs/Quickstart/备服务器.md >}}) + - [查询规划]({{< relref "./docs/Quickstart/查询规划.md >}}) + - [优化器方法配置]({{< relref "./docs/Quickstart/优化器方法配置.md >}}) + - [优化器开销常量]({{< relref "./docs/Quickstart/优化器开销常量.md >}}) + - [基因查询优化器]({{< relref "./docs/Quickstart/基因查询优化器.md >}}) + - [其他优化器选项]({{< relref "./docs/Quickstart/其他优化器选项.md >}}) + - [错误报告和日志]({{< relref "./docs/Quickstart/错误报告和日志.md >}}) + - [记录日志的位置]({{< relref "./docs/Quickstart/记录日志的位置.md >}}) + - [记录日志的时间]({{< relref "./docs/Quickstart/记录日志的时间.md >}}) + - [记录日志的内容]({{< relref "./docs/Quickstart/记录日志的内容.md >}}) + - [使用CSV格式写日志]({{< relref "./docs/Quickstart/使用CSV格式写日志.md >}}) + - [告警检测]({{< relref "./docs/Quickstart/告警检测.md >}}) + - [运行时统计]({{< relref "./docs/Quickstart/运行时统计.md >}}) + - [查询和索引统计收集器]({{< relref "./docs/Quickstart/查询和索引统计收集器.md >}}) + - [性能统计]({{< relref "./docs/Quickstart/性能统计.md >}}) + - [负载管理]({{< relref "./docs/Quickstart/负载管理.md >}}) + - [自动清理]({{< relref "./docs/Quickstart/自动清理.md >}}) + - [客户端连接缺省设置]({{< relref "./docs/Quickstart/客户端连接缺省设置.md >}}) + - [语句行为]({{< relref "./docs/Quickstart/语句行为.md >}}) + - [区域和格式化]({{< relref "./docs/Quickstart/区域和格式化.md >}}) + - [其他缺省]({{< relref "./docs/Quickstart/其他缺省.md >}}) + - [锁管理]({{< relref "./docs/Quickstart/锁管理.md >}}) + - [版本和平台兼容性]({{< relref "./docs/Quickstart/版本和平台兼容性.md >}}) + - [历史版本兼容性]({{< relref "./docs/Quickstart/历史版本兼容性.md >}}) + - [平台和客户端兼容性]({{< relref "./docs/Quickstart/平台和客户端兼容性.md >}}) + - [容错性]({{< relref "./docs/Quickstart/容错性.md >}}) + - [openGauss事务]({{< relref "./docs/Quickstart/openGauss事务.md >}}) + - [开发人员选项]({{< relref "./docs/Quickstart/开发人员选项.md >}}) + - [审计]({{< relref "./docs/Quickstart/审计.md >}}) + - [审计开关]({{< relref "./docs/Quickstart/审计开关.md >}}) + - [用户和权限审计]({{< relref "./docs/Quickstart/用户和权限审计.md >}}) + - [操作审计]({{< relref "./docs/Quickstart/操作审计.md >}}) + - [事务监控]({{< relref "./docs/Quickstart/事务监控.md >}}) + - [升级参数]({{< relref "./docs/Quickstart/升级参数.md >}}) + - [其它选项]({{< relref "./docs/Quickstart/其它选项.md >}}) + - [等待事件]({{< relref "./docs/Quickstart/等待事件.md >}}) + - [Query]({{< relref "./docs/Quickstart/Query.md >}}) + - [系统性能快照]({{< relref "./docs/Quickstart/系统性能快照.md >}}) + - [FAQ]({{< relref "./docs/Quickstart/FAQ.md >}}) + - [用户在openGauss节点间的互信丢失]({{< relref "./docs/Quickstart/用户在openGauss节点间的互信丢失.md >}}) -- [安装指南]({{< relref "./docs/Installation/Installation.md" >}}) - - [安装概述]({{< relref "./docs/Installation/安装概述.md" >}}) - - [安装准备]({{< relref "./docs/Installation/安装准备.md" >}}) - - [了解安装流程]({{< relref "./docs/Installation/了解安装流程.md" >}}) - - [获取并校验安装包]({{< relref "./docs/Installation/获取并校验安装包.md" >}}) - - [准备软硬件安装环境]({{< relref "./docs/Installation/准备软硬件安装环境.md" >}}) - - [软硬件环境要求]({{< relref "./docs/Installation/软硬件环境要求.md" >}}) - - [修改操作系统配置]({{< relref "./docs/Installation/修改操作系统配置.md" >}}) - - [关闭操作系统防火墙]({{< relref "./docs/Installation/关闭操作系统防火墙.md" >}}) - - [设置字符集参数]({{< relref "./docs/Installation/设置字符集参数.md" >}}) - - [设置时区和时间]({{< relref "./docs/Installation/设置时区和时间.md" >}}) - - [关闭swap交换内存]({{< relref "./docs/Installation/关闭swap交换内存.md" >}}) - - [设置网卡MTU值]({{< relref "./docs/Installation/设置网卡MTU值.md" >}}) - - [设置root用户远程登录]({{< relref "./docs/Installation/设置root用户远程登录.md" >}}) - - [了解安装用户及用户组]({{< relref "./docs/Installation/了解安装用户及用户组.md" >}}) - - [安装openGauss]({{< relref "./docs/Installation/安装openGauss.md" >}}) - - [创建XML配置文件]({{< relref "./docs/Installation/创建XML配置文件.md" >}}) - - [配置数据库名称及各项目录]({{< relref "./docs/Installation/配置数据库名称及各项目录.md" >}}) - - [配置Host基本信息]({{< relref "./docs/Installation/配置Host基本信息.md" >}}) - - [配置数据库主节点信息]({{< relref "./docs/Installation/配置数据库主节点信息.md" >}}) - - [示例]({{< relref "./docs/Installation/示例.md" >}}) - - [单节点配置文件]({{< relref "./docs/Installation/单节点配置文件.md" >}}) - - [一主一备配置文件]({{< relref "./docs/Installation/一主一备配置文件.md" >}}) - - [初始化安装环境]({{< relref "./docs/Installation/初始化安装环境.md" >}}) - - [准备安装用户及环境]({{< relref "./docs/Installation/准备安装用户及环境.md" >}}) - - [手工建立互信]({{< relref "./docs/Installation/手工建立互信.md" >}}) - - [配置操作系统参数]({{< relref "./docs/Installation/配置操作系统参数.md" >}}) - - [执行安装]({{< relref "./docs/Installation/执行安装.md" >}}) - - [(可选)设置备机可读]({{< relref "./docs/Installation/(可选)设置备机可读.md" >}}) - - [安装验证]({{< relref "./docs/Installation/安装验证.md" >}}) - - [检查openGauss健康状态]({{< relref "./docs/Installation/检查openGauss健康状态.md" >}}) - - [初始配置]({{< relref "./docs/Installation/初始配置.md" >}}) - - [配置区域和字符集]({{< relref "./docs/Installation/配置区域和字符集.md" >}}) - - [卸载openGauss]({{< relref "./docs/Installation/卸载openGauss.md" >}}) - - [执行卸载]({{< relref "./docs/Installation/执行卸载.md" >}}) - - [一键式环境清理]({{< relref "./docs/Installation/一键式环境清理.md" >}}) -- [开发者指南]({{< relref "./docs/Developerguide/Developerguide.md" >}}) - - [概述]({{< relref "./docs/Developerguide/概述.md" >}}) - - [数据库逻辑结构图]({{< relref "./docs/Developerguide/数据库逻辑结构图.md" >}}) - - [数据查询请求处理过程]({{< relref "./docs/Developerguide/数据查询请求处理过程.md" >}}) - - [管理事务]({{< relref "./docs/Developerguide/管理事务.md" >}}) - - [相关概念]({{< relref "./docs/Developerguide/相关概念.md" >}}) - - [数据库使用]({{< relref "./docs/Developerguide/数据库使用.md" >}}) - - [从这里开始]({{< relref "./docs/Developerguide/从这里开始.md" >}}) - - [连接数据库]({{< relref "./docs/Developerguide/连接数据库.md" >}}) - - [确认连接信息]({{< relref "./docs/Developerguide/确认连接信息.md" >}}) - - [配置服务端远程连接]({{< relref "./docs/Developerguide/配置服务端远程连接.md" >}}) - - [使用gsql连接]({{< relref "./docs/Developerguide/使用gsql连接.md" >}}) - - [应用程序接口]({{< relref "./docs/Developerguide/应用程序接口.md" >}}) - - [创建和管理数据库]({{< relref "./docs/Developerguide/创建和管理数据库.md" >}}) - - [规划存储模型]({{< relref "./docs/Developerguide/规划存储模型.md" >}}) - - [创建和管理表空间]({{< relref "./docs/Developerguide/创建和管理表空间.md" >}}) - - [创建和管理表]({{< relref "./docs/Developerguide/创建和管理表.md" >}}) - - [创建表]({{< relref "./docs/Developerguide/创建表.md" >}}) - - [向表中插入数据]({{< relref "./docs/Developerguide/向表中插入数据.md" >}}) - - [更新表中数据]({{< relref "./docs/Developerguide/更新表中数据.md" >}}) - - [查看数据]({{< relref "./docs/Developerguide/查看数据.md" >}}) - - [删除表中数据]({{< relref "./docs/Developerguide/删除表中数据.md" >}}) - - [查看系统表]({{< relref "./docs/Developerguide/查看系统表.md" >}}) - - [其他操作]({{< relref "./docs/Developerguide/其他操作.md" >}}) - - [创建和管理schema]({{< relref "./docs/Developerguide/创建和管理schema.md" >}}) - - [创建和管理分区表]({{< relref "./docs/Developerguide/创建和管理分区表.md" >}}) - - [创建和管理索引]({{< relref "./docs/Developerguide/创建和管理索引.md" >}}) - - [创建和管理视图]({{< relref "./docs/Developerguide/创建和管理视图.md" >}}) - - [创建和管理序列]({{< relref "./docs/Developerguide/创建和管理序列.md" >}}) - - [附录]({{< relref "./docs/Developerguide/附录.md" >}}) - - [客户端接入认证]({{< relref "./docs/Developerguide/客户端接入认证.md" >}}) - - [配置客户端接入认证]({{< relref "./docs/Developerguide/配置客户端接入认证.md" >}}) - - [配置文件参考]({{< relref "./docs/Developerguide/配置文件参考.md" >}}) - - [用SSL进行安全的TCP/IP连接]({{< relref "./docs/Developerguide/用SSL进行安全的TCP-IP连接.md" >}}) - - [用SSH隧道进行安全的TCP/IP连接]({{< relref "./docs/Developerguide/用SSH隧道进行安全的TCP-IP连接.md" >}}) - - [查看数据库连接数]({{< relref "./docs/Developerguide/查看数据库连接数.md" >}}) - - [SSL证书管理]({{< relref "./docs/Developerguide/SSL证书管理.md" >}}) - - [证书生成]({{< relref "./docs/Developerguide/证书生成.md" >}}) - - [证书替换]({{< relref "./docs/Developerguide/证书替换.md" >}}) - - [设置文件权限安全策略]({{< relref "./docs/Developerguide/设置文件权限安全策略.md" >}}) - - [管理数据库安全]({{< relref "./docs/Developerguide/管理数据库安全.md" >}}) - - [客户端接入认证]({{< relref "./docs/Developerguide/客户端接入认证-0.md" >}}) - - [配置客户端接入认证]({{< relref "./docs/Developerguide/配置客户端接入认证-1.md" >}}) - - [配置文件参考]({{< relref "./docs/Developerguide/配置文件参考-2.md" >}}) - - [用SSL进行安全的TCP/IP连接]({{< relref "./docs/Developerguide/用SSL进行安全的TCP-IP连接-3.md" >}}) - - [用SSH隧道进行安全的TCP/IP连接]({{< relref "./docs/Developerguide/用SSH隧道进行安全的TCP-IP连接-4.md" >}}) - - [查看数据库连接数]({{< relref "./docs/Developerguide/查看数据库连接数-5.md" >}}) - - [SSL证书管理]({{< relref "./docs/Developerguide/SSL证书管理-6.md" >}}) - - [证书生成]({{< relref "./docs/Developerguide/证书生成-7.md" >}}) - - [证书替换]({{< relref "./docs/Developerguide/证书替换-8.md" >}}) - - [管理用户及权限]({{< relref "./docs/Developerguide/管理用户及权限.md" >}}) - - [默认权限机制]({{< relref "./docs/Developerguide/默认权限机制.md" >}}) - - [管理员]({{< relref "./docs/Developerguide/管理员.md" >}}) - - [三权分立]({{< relref "./docs/Developerguide/三权分立.md" >}}) - - [用户]({{< relref "./docs/Developerguide/用户.md" >}}) - - [角色]({{< relref "./docs/Developerguide/角色.md" >}}) - - [Schema]({{< relref "./docs/Developerguide/Schema.md" >}}) - - [用户权限设置]({{< relref "./docs/Developerguide/用户权限设置.md" >}}) - - [行级访问控制]({{< relref "./docs/Developerguide/行级访问控制.md" >}}) - - [设置安全策略]({{< relref "./docs/Developerguide/设置安全策略.md" >}}) - - [设置帐户安全策略]({{< relref "./docs/Developerguide/设置帐户安全策略.md" >}}) - - [设置帐号有效期]({{< relref "./docs/Developerguide/设置帐号有效期.md" >}}) - - [设置密码安全策略]({{< relref "./docs/Developerguide/设置密码安全策略.md" >}}) - - [设置数据库审计]({{< relref "./docs/Developerguide/设置数据库审计.md" >}}) - - [审计概述]({{< relref "./docs/Developerguide/审计概述.md" >}}) - - [查看审计结果]({{< relref "./docs/Developerguide/查看审计结果.md" >}}) - - [维护审计日志]({{< relref "./docs/Developerguide/维护审计日志.md" >}}) - - [设置文件权限安全策略]({{< relref "./docs/Developerguide/设置文件权限安全策略-9.md" >}}) - - [接口参考]({{< relref "./docs/Developerguide/接口参考.md" >}}) - - [JDBC]({{< relref "./docs/Developerguide/JDBC.md" >}}) - - [java.sql.Connection]({{< relref "./docs/Developerguide/java-sql-Connection.md" >}}) - - [java.sql.CallableStatement]({{< relref "./docs/Developerguide/java-sql-CallableStatement.md" >}}) - - [java.sql.DatabaseMetaData]({{< relref "./docs/Developerguide/java-sql-DatabaseMetaData.md" >}}) - - [java.sql.Driver]({{< relref "./docs/Developerguide/java-sql-Driver.md" >}}) - - [java.sql.PreparedStatement]({{< relref "./docs/Developerguide/java-sql-PreparedStatement.md" >}}) - - [java.sql.ResultSet]({{< relref "./docs/Developerguide/java-sql-ResultSet.md" >}}) - - [java.sql.ResultSetMetaData]({{< relref "./docs/Developerguide/java-sql-ResultSetMetaData.md" >}}) - - [java.sql.Statement]({{< relref "./docs/Developerguide/java-sql-Statement.md" >}}) - - [javax.sql.ConnectionPoolDataSource]({{< relref "./docs/Developerguide/javax-sql-ConnectionPoolDataSource.md" >}}) - - [javax.sql.DataSource]({{< relref "./docs/Developerguide/javax-sql-DataSource.md" >}}) - - [javax.sql.PooledConnection]({{< relref "./docs/Developerguide/javax-sql-PooledConnection.md" >}}) - - [javax.naming.Context]({{< relref "./docs/Developerguide/javax-naming-Context.md" >}}) - - [javax.naming.spi.InitialContextFactory]({{< relref "./docs/Developerguide/javax-naming-spi-InitialContextFactory.md" >}}) - - [CopyManager]({{< relref "./docs/Developerguide/CopyManager.md" >}}) - - [ODBC]({{< relref "./docs/Developerguide/ODBC.md" >}}) - - [SQLAllocEnv]({{< relref "./docs/Developerguide/SQLAllocEnv.md" >}}) - - [SQLAllocConnect]({{< relref "./docs/Developerguide/SQLAllocConnect.md" >}}) - - [SQLAllocHandle]({{< relref "./docs/Developerguide/SQLAllocHandle.md" >}}) - - [SQLAllocStmt]({{< relref "./docs/Developerguide/SQLAllocStmt.md" >}}) - - [SQLBindCol]({{< relref "./docs/Developerguide/SQLBindCol.md" >}}) - - [SQLBindParameter]({{< relref "./docs/Developerguide/SQLBindParameter.md" >}}) - - [SQLColAttribute]({{< relref "./docs/Developerguide/SQLColAttribute.md" >}}) - - [SQLConnect]({{< relref "./docs/Developerguide/SQLConnect.md" >}}) - - [SQLDisconnect]({{< relref "./docs/Developerguide/SQLDisconnect.md" >}}) - - [SQLExecDirect]({{< relref "./docs/Developerguide/SQLExecDirect.md" >}}) - - [SQLExecute]({{< relref "./docs/Developerguide/SQLExecute.md" >}}) - - [SQLFetch]({{< relref "./docs/Developerguide/SQLFetch.md" >}}) - - [SQLFreeStmt]({{< relref "./docs/Developerguide/SQLFreeStmt.md" >}}) - - [SQLFreeConnect]({{< relref "./docs/Developerguide/SQLFreeConnect.md" >}}) - - [SQLFreeHandle]({{< relref "./docs/Developerguide/SQLFreeHandle.md" >}}) - - [SQLFreeEnv]({{< relref "./docs/Developerguide/SQLFreeEnv.md" >}}) - - [SQLPrepare]({{< relref "./docs/Developerguide/SQLPrepare.md" >}}) - - [SQLGetData]({{< relref "./docs/Developerguide/SQLGetData.md" >}}) - - [SQLGetDiagRec]({{< relref "./docs/Developerguide/SQLGetDiagRec.md" >}}) - - [SQLSetConnectAttr]({{< relref "./docs/Developerguide/SQLSetConnectAttr.md" >}}) - - [SQLSetEnvAttr]({{< relref "./docs/Developerguide/SQLSetEnvAttr.md" >}}) - - [SQLSetStmtAttr]({{< relref "./docs/Developerguide/SQLSetStmtAttr.md" >}}) - - [示例]({{< relref "./docs/Developerguide/示例.md" >}}) - - [libpq]({{< relref "./docs/Developerguide/libpq.md" >}}) - - [数据库连接控制函数]({{< relref "./docs/Developerguide/数据库连接控制函数.md" >}}) - - [PQconnectdbParams]({{< relref "./docs/Developerguide/PQconnectdbParams.md" >}}) - - [PQconnectdb]({{< relref "./docs/Developerguide/PQconnectdb.md" >}}) - - [PQconninfoParse]({{< relref "./docs/Developerguide/PQconninfoParse.md" >}}) - - [PQconnectStart]({{< relref "./docs/Developerguide/PQconnectStart.md" >}}) - - [PQerrorMessage]({{< relref "./docs/Developerguide/PQerrorMessage.md" >}}) - - [PQsetdbLogin]({{< relref "./docs/Developerguide/PQsetdbLogin.md" >}}) - - [PQfinish]({{< relref "./docs/Developerguide/PQfinish.md" >}}) - - [PQreset]({{< relref "./docs/Developerguide/PQreset.md" >}}) - - [PQstatus]({{< relref "./docs/Developerguide/PQstatus.md" >}}) - - [数据库执行语句函数]({{< relref "./docs/Developerguide/数据库执行语句函数.md" >}}) - - [PQclear]({{< relref "./docs/Developerguide/PQclear.md" >}}) - - [PQexec]({{< relref "./docs/Developerguide/PQexec.md" >}}) - - [PQexecParams]({{< relref "./docs/Developerguide/PQexecParams.md" >}}) - - [PQexecParamsBatch]({{< relref "./docs/Developerguide/PQexecParamsBatch.md" >}}) - - [PQexecPrepared]({{< relref "./docs/Developerguide/PQexecPrepared.md" >}}) - - [PQexecPreparedBatch]({{< relref "./docs/Developerguide/PQexecPreparedBatch.md" >}}) - - [PQfname]({{< relref "./docs/Developerguide/PQfname.md" >}}) - - [PQgetvalue]({{< relref "./docs/Developerguide/PQgetvalue.md" >}}) - - [PQnfields]({{< relref "./docs/Developerguide/PQnfields.md" >}}) - - [PQntuples]({{< relref "./docs/Developerguide/PQntuples.md" >}}) - - [PQprepare]({{< relref "./docs/Developerguide/PQprepare.md" >}}) - - [PQresultStatus]({{< relref "./docs/Developerguide/PQresultStatus.md" >}}) - - [异步命令处理]({{< relref "./docs/Developerguide/异步命令处理.md" >}}) - - [PQsendQuery]({{< relref "./docs/Developerguide/PQsendQuery.md" >}}) - - [PQsendQueryParams]({{< relref "./docs/Developerguide/PQsendQueryParams.md" >}}) - - [PQsendPrepare]({{< relref "./docs/Developerguide/PQsendPrepare.md" >}}) - - [PQsendQueryPrepared]({{< relref "./docs/Developerguide/PQsendQueryPrepared.md" >}}) - - [PQflush]({{< relref "./docs/Developerguide/PQflush.md" >}}) - - [取消正在处理的查询]({{< relref "./docs/Developerguide/取消正在处理的查询.md" >}}) - - [PQgetCancel]({{< relref "./docs/Developerguide/PQgetCancel.md" >}}) - - [PQfreeCancel]({{< relref "./docs/Developerguide/PQfreeCancel.md" >}}) - - [PQcancel]({{< relref "./docs/Developerguide/PQcancel.md" >}}) - - [示例]({{< relref "./docs/Developerguide/示例-10.md" >}}) - - [链接字符]({{< relref "./docs/Developerguide/链接字符.md" >}}) - - [导入数据]({{< relref "./docs/Developerguide/导入数据.md" >}}) - - [通过INSERT语句直接写入数据]({{< relref "./docs/Developerguide/通过INSERT语句直接写入数据.md" >}}) - - [使用COPY FROM STDIN导入数据]({{< relref "./docs/Developerguide/使用COPY-FROM-STDIN导入数据.md" >}}) - - [关于COPY FROM STDIN导入数据]({{< relref "./docs/Developerguide/关于COPY-FROM-STDIN导入数据.md" >}}) - - [CopyManager类简介]({{< relref "./docs/Developerguide/CopyManager类简介.md" >}}) - - [示例1:通过本地文件导入导出数据]({{< relref "./docs/Developerguide/示例1-通过本地文件导入导出数据.md" >}}) - - [示例2:从MySQL向openGauss进行数据迁移]({{< relref "./docs/Developerguide/示例2-从MySQL向openGauss进行数据迁移.md" >}}) - - [使用gsql元命令导入数据]({{< relref "./docs/Developerguide/使用gsql元命令导入数据.md" >}}) - - [使用gs\_restore命令导入数据]({{< relref "./docs/Developerguide/使用gs_restore命令导入数据.md" >}}) - - [更新表中数据]({{< relref "./docs/Developerguide/更新表中数据-11.md" >}}) - - [使用DML命令更新表]({{< relref "./docs/Developerguide/使用DML命令更新表.md" >}}) - - [使用合并方式更新和插入数据]({{< relref "./docs/Developerguide/使用合并方式更新和插入数据.md" >}}) - - [深层复制]({{< relref "./docs/Developerguide/深层复制.md" >}}) - - [使用CREATE TABLE执行深层复制]({{< relref "./docs/Developerguide/使用CREATE-TABLE执行深层复制.md" >}}) - - [使用CREATE TABLE LIKE执行深层复制]({{< relref "./docs/Developerguide/使用CREATE-TABLE-LIKE执行深层复制.md" >}}) - - [通过创建临时表并截断原始表来执行深层复制]({{< relref "./docs/Developerguide/通过创建临时表并截断原始表来执行深层复制.md" >}}) - - [分析表]({{< relref "./docs/Developerguide/分析表.md" >}}) - - [对表执行VACUUM]({{< relref "./docs/Developerguide/对表执行VACUUM.md" >}}) - - [管理并发写入操作]({{< relref "./docs/Developerguide/管理并发写入操作.md" >}}) - - [事务隔离说明]({{< relref "./docs/Developerguide/事务隔离说明.md" >}}) - - [写入和读写操作]({{< relref "./docs/Developerguide/写入和读写操作.md" >}}) - - [并发写入事务的潜在死锁情况]({{< relref "./docs/Developerguide/并发写入事务的潜在死锁情况.md" >}}) - - [并发写入示例]({{< relref "./docs/Developerguide/并发写入示例.md" >}}) - - [相同表的INSERT和DELETE并发]({{< relref "./docs/Developerguide/相同表的INSERT和DELETE并发.md" >}}) - - [相同表的并发INSERT]({{< relref "./docs/Developerguide/相同表的并发INSERT.md" >}}) - - [相同表的并发UPDATE]({{< relref "./docs/Developerguide/相同表的并发UPDATE.md" >}}) - - [数据导入和查询的并发]({{< relref "./docs/Developerguide/数据导入和查询的并发.md" >}}) - - [导出数据]({{< relref "./docs/Developerguide/导出数据.md" >}}) - - [使用gs\_dump和gs\_dumpall命令导出数据]({{< relref "./docs/Developerguide/使用gs_dump和gs_dumpall命令导出数据.md" >}}) - - [概述]({{< relref "./docs/Developerguide/概述-12.md" >}}) - - [导出单个数据库]({{< relref "./docs/Developerguide/导出单个数据库.md" >}}) - - [导出数据库]({{< relref "./docs/Developerguide/导出数据库.md" >}}) - - [导出模式]({{< relref "./docs/Developerguide/导出模式.md" >}}) - - [导出表]({{< relref "./docs/Developerguide/导出表.md" >}}) - - [导出所有数据库]({{< relref "./docs/Developerguide/导出所有数据库.md" >}}) - - [导出所有数据库]({{< relref "./docs/Developerguide/导出所有数据库-13.md" >}}) - - [导出全局对象]({{< relref "./docs/Developerguide/导出全局对象.md" >}}) - - [无权限角色导出数据]({{< relref "./docs/Developerguide/无权限角色导出数据.md" >}}) - - [AI特性]({{< relref "./docs/Developerguide/AI特性.md" >}}) - - [SQL执行时间预测特性]({{< relref "./docs/Developerguide/SQL执行时间预测特性.md" >}}) - - [概述]({{< relref "./docs/Developerguide/概述-14.md" >}}) - - [使用指南]({{< relref "./docs/Developerguide/使用指南.md" >}}) - - [最佳实践]({{< relref "./docs/Developerguide/最佳实践.md" >}}) - - [常见问题处理]({{< relref "./docs/Developerguide/常见问题处理.md" >}}) - - [配置运行参数]({{< relref "./docs/Developerguide/配置运行参数.md" >}}) - - [查看参数当前取值]({{< relref "./docs/Developerguide/查看参数当前取值.md" >}}) - - [重设参数]({{< relref "./docs/Developerguide/重设参数.md" >}}) - - [SQL参考]({{< relref "./docs/Developerguide/SQL参考.md" >}}) - - [openGauss SQL]({{< relref "./docs/Developerguide/openGauss-SQL.md" >}}) - - [关键字]({{< relref "./docs/Developerguide/关键字.md" >}}) - - [数据类型]({{< relref "./docs/Developerguide/数据类型.md" >}}) - - [数值类型]({{< relref "./docs/Developerguide/数值类型.md" >}}) - - [货币类型]({{< relref "./docs/Developerguide/货币类型.md" >}}) - - [布尔类型]({{< relref "./docs/Developerguide/布尔类型.md" >}}) - - [字符类型]({{< relref "./docs/Developerguide/字符类型.md" >}}) - - [二进制类型]({{< relref "./docs/Developerguide/二进制类型.md" >}}) - - [日期/时间类型]({{< relref "./docs/Developerguide/日期-时间类型.md" >}}) - - [几何类型]({{< relref "./docs/Developerguide/几何类型.md" >}}) - - [网络地址类型]({{< relref "./docs/Developerguide/网络地址类型.md" >}}) - - [位串类型]({{< relref "./docs/Developerguide/位串类型.md" >}}) - - [文本搜索类型]({{< relref "./docs/Developerguide/文本搜索类型.md" >}}) - - [UUID类型]({{< relref "./docs/Developerguide/UUID类型.md" >}}) - - [JSON类型]({{< relref "./docs/Developerguide/JSON类型.md" >}}) - - [对象标识符类型]({{< relref "./docs/Developerguide/对象标识符类型.md" >}}) - - [伪类型]({{< relref "./docs/Developerguide/伪类型.md" >}}) - - [列存表支持的数据类型]({{< relref "./docs/Developerguide/列存表支持的数据类型.md" >}}) - - [常量与宏]({{< relref "./docs/Developerguide/常量与宏.md" >}}) - - [函数和操作符]({{< relref "./docs/Developerguide/函数和操作符.md" >}}) - - [逻辑操作符]({{< relref "./docs/Developerguide/逻辑操作符.md" >}}) - - [比较操作符]({{< relref "./docs/Developerguide/比较操作符.md" >}}) - - [字符处理函数和操作符]({{< relref "./docs/Developerguide/字符处理函数和操作符.md" >}}) - - [二进制字符串函数和操作符]({{< relref "./docs/Developerguide/二进制字符串函数和操作符.md" >}}) - - [位串函数和操作符]({{< relref "./docs/Developerguide/位串函数和操作符.md" >}}) - - [模式匹配操作符]({{< relref "./docs/Developerguide/模式匹配操作符.md" >}}) - - [数字操作函数和操作符]({{< relref "./docs/Developerguide/数字操作函数和操作符.md" >}}) - - [时间和日期处理函数和操作符]({{< relref "./docs/Developerguide/时间和日期处理函数和操作符.md" >}}) - - [类型转换函数]({{< relref "./docs/Developerguide/类型转换函数.md" >}}) - - [几何函数和操作符]({{< relref "./docs/Developerguide/几何函数和操作符.md" >}}) - - [网络地址函数和操作符]({{< relref "./docs/Developerguide/网络地址函数和操作符.md" >}}) - - [文本检索函数和操作符]({{< relref "./docs/Developerguide/文本检索函数和操作符.md" >}}) - - [JSON函数]({{< relref "./docs/Developerguide/JSON函数.md" >}}) - - [SEQUENCE函数]({{< relref "./docs/Developerguide/SEQUENCE函数.md" >}}) - - [数组函数和操作符]({{< relref "./docs/Developerguide/数组函数和操作符.md" >}}) - - [范围函数和操作符]({{< relref "./docs/Developerguide/范围函数和操作符.md" >}}) - - [聚集函数]({{< relref "./docs/Developerguide/聚集函数.md" >}}) - - [窗口函数]({{< relref "./docs/Developerguide/窗口函数.md" >}}) - - [安全函数]({{< relref "./docs/Developerguide/安全函数.md" >}}) - - [返回集合的函数]({{< relref "./docs/Developerguide/返回集合的函数.md" >}}) - - [条件表达式函数]({{< relref "./docs/Developerguide/条件表达式函数.md" >}}) - - [系统信息函数]({{< relref "./docs/Developerguide/系统信息函数.md" >}}) - - [系统管理函数]({{< relref "./docs/Developerguide/系统管理函数.md" >}}) - - [配置设置函数]({{< relref "./docs/Developerguide/配置设置函数.md" >}}) - - [通用文件访问函数]({{< relref "./docs/Developerguide/通用文件访问函数.md" >}}) - - [服务器信号函数]({{< relref "./docs/Developerguide/服务器信号函数.md" >}}) - - [备份恢复控制函数]({{< relref "./docs/Developerguide/备份恢复控制函数.md" >}}) - - [快照同步函数]({{< relref "./docs/Developerguide/快照同步函数.md" >}}) - - [数据库对象函数]({{< relref "./docs/Developerguide/数据库对象函数.md" >}}) - - [咨询锁函数]({{< relref "./docs/Developerguide/咨询锁函数.md" >}}) - - [逻辑复制函数]({{< relref "./docs/Developerguide/逻辑复制函数.md" >}}) - - [其它函数]({{< relref "./docs/Developerguide/其它函数.md" >}}) - - [统计信息函数]({{< relref "./docs/Developerguide/统计信息函数.md" >}}) - - [触发器函数]({{< relref "./docs/Developerguide/触发器函数.md" >}}) - - [内部接口函数]({{< relref "./docs/Developerguide/内部接口函数.md" >}}) - - [表达式]({{< relref "./docs/Developerguide/表达式.md" >}}) - - [简单表达式]({{< relref "./docs/Developerguide/简单表达式.md" >}}) - - [条件表达式]({{< relref "./docs/Developerguide/条件表达式.md" >}}) - - [子查询表达式]({{< relref "./docs/Developerguide/子查询表达式.md" >}}) - - [数组表达式]({{< relref "./docs/Developerguide/数组表达式.md" >}}) - - [行表达式]({{< relref "./docs/Developerguide/行表达式.md" >}}) - - [类型转换]({{< relref "./docs/Developerguide/类型转换.md" >}}) - - [概述]({{< relref "./docs/Developerguide/概述-15.md" >}}) - - [操作符]({{< relref "./docs/Developerguide/操作符.md" >}}) - - [函数]({{< relref "./docs/Developerguide/函数.md" >}}) - - [值存储]({{< relref "./docs/Developerguide/值存储.md" >}}) - - [UNION,CASE和相关构造]({{< relref "./docs/Developerguide/UNION-CASE和相关构造.md" >}}) - - [全文检索]({{< relref "./docs/Developerguide/全文检索.md" >}}) - - [介绍]({{< relref "./docs/Developerguide/介绍.md" >}}) - - [全文检索概述]({{< relref "./docs/Developerguide/全文检索概述.md" >}}) - - [文档概念]({{< relref "./docs/Developerguide/文档概念.md" >}}) - - [基本文本匹配]({{< relref "./docs/Developerguide/基本文本匹配.md" >}}) - - [分词器]({{< relref "./docs/Developerguide/分词器.md" >}}) - - [表和索引]({{< relref "./docs/Developerguide/表和索引.md" >}}) - - [搜索表]({{< relref "./docs/Developerguide/搜索表.md" >}}) - - [创建索引]({{< relref "./docs/Developerguide/创建索引.md" >}}) - - [索引使用约束]({{< relref "./docs/Developerguide/索引使用约束.md" >}}) - - [控制文本搜索]({{< relref "./docs/Developerguide/控制文本搜索.md" >}}) - - [解析文档]({{< relref "./docs/Developerguide/解析文档.md" >}}) - - [解析查询]({{< relref "./docs/Developerguide/解析查询.md" >}}) - - [排序查询结果]({{< relref "./docs/Developerguide/排序查询结果.md" >}}) - - [高亮搜索结果]({{< relref "./docs/Developerguide/高亮搜索结果.md" >}}) - - [附加功能]({{< relref "./docs/Developerguide/附加功能.md" >}}) - - [处理tsvector]({{< relref "./docs/Developerguide/处理tsvector.md" >}}) - - [处理查询]({{< relref "./docs/Developerguide/处理查询.md" >}}) - - [查询重写]({{< relref "./docs/Developerguide/查询重写.md" >}}) - - [收集文献统计]({{< relref "./docs/Developerguide/收集文献统计.md" >}}) - - [解析器]({{< relref "./docs/Developerguide/解析器.md" >}}) - - [词典]({{< relref "./docs/Developerguide/词典.md" >}}) - - [词典概述]({{< relref "./docs/Developerguide/词典概述.md" >}}) - - [停用词]({{< relref "./docs/Developerguide/停用词.md" >}}) - - [Simple词典]({{< relref "./docs/Developerguide/Simple词典.md" >}}) - - [Synonym词典]({{< relref "./docs/Developerguide/Synonym词典.md" >}}) - - [Thesaurus词典]({{< relref "./docs/Developerguide/Thesaurus词典.md" >}}) - - [Ispell词典]({{< relref "./docs/Developerguide/Ispell词典.md" >}}) - - [Snowball词典]({{< relref "./docs/Developerguide/Snowball词典.md" >}}) - - [配置示例]({{< relref "./docs/Developerguide/配置示例.md" >}}) - - [测试和调试文本搜索]({{< relref "./docs/Developerguide/测试和调试文本搜索.md" >}}) - - [分词器测试]({{< relref "./docs/Developerguide/分词器测试.md" >}}) - - [解析器测试]({{< relref "./docs/Developerguide/解析器测试.md" >}}) - - [词典测试]({{< relref "./docs/Developerguide/词典测试.md" >}}) - - [限制约束]({{< relref "./docs/Developerguide/限制约束.md" >}}) - - [系统操作]({{< relref "./docs/Developerguide/系统操作.md" >}}) - - [事务控制]({{< relref "./docs/Developerguide/事务控制.md" >}}) - - [DDL语法一览表]({{< relref "./docs/Developerguide/DDL语法一览表.md" >}}) - - [DML语法一览表]({{< relref "./docs/Developerguide/DML语法一览表.md" >}}) - - [DCL语法一览表]({{< relref "./docs/Developerguide/DCL语法一览表.md" >}}) - - [SQL语法]({{< relref "./docs/Developerguide/SQL语法.md" >}}) - - [ABORT]({{< relref "./docs/Developerguide/ABORT.md" >}}) - - [ALTER DATABASE]({{< relref "./docs/Developerguide/ALTER-DATABASE.md" >}}) - - [ALTER DATA SOURCE]({{< relref "./docs/Developerguide/ALTER-DATA-SOURCE.md" >}}) - - [ALTER DEFAULT PRIVILEGES]({{< relref "./docs/Developerguide/ALTER-DEFAULT-PRIVILEGES.md" >}}) - - [ALTER DIRECTORY]({{< relref "./docs/Developerguide/ALTER-DIRECTORY.md" >}}) - - [ALTER FUNCTION]({{< relref "./docs/Developerguide/ALTER-FUNCTION.md" >}}) - - [ALTER GROUP]({{< relref "./docs/Developerguide/ALTER-GROUP.md" >}}) - - [ALTER INDEX]({{< relref "./docs/Developerguide/ALTER-INDEX.md" >}}) - - [ALTER LARGE OBJECT]({{< relref "./docs/Developerguide/ALTER-LARGE-OBJECT.md" >}}) - - [ALTER ROLE]({{< relref "./docs/Developerguide/ALTER-ROLE.md" >}}) - - [ALTER ROW LEVEL SECURITY POLICY]({{< relref "./docs/Developerguide/ALTER-ROW-LEVEL-SECURITY-POLICY.md" >}}) - - [ALTER SCHEMA]({{< relref "./docs/Developerguide/ALTER-SCHEMA.md" >}}) - - [ALTER SEQUENCE]({{< relref "./docs/Developerguide/ALTER-SEQUENCE.md" >}}) - - [ALTER SESSION]({{< relref "./docs/Developerguide/ALTER-SESSION.md" >}}) - - [ALTER SYSTEM KILL SESSION]({{< relref "./docs/Developerguide/ALTER-SYSTEM-KILL-SESSION.md" >}}) - - [ALTER TABLE]({{< relref "./docs/Developerguide/ALTER-TABLE.md" >}}) - - [ALTER TABLE PARTITION]({{< relref "./docs/Developerguide/ALTER-TABLE-PARTITION.md" >}}) - - [ALTER TABLESPACE]({{< relref "./docs/Developerguide/ALTER-TABLESPACE.md" >}}) - - [ALTER TEXT SEARCH CONFIGURATION]({{< relref "./docs/Developerguide/ALTER-TEXT-SEARCH-CONFIGURATION.md" >}}) - - [ALTER TEXT SEARCH DICTIONARY]({{< relref "./docs/Developerguide/ALTER-TEXT-SEARCH-DICTIONARY.md" >}}) - - [ALTER TRIGGER]({{< relref "./docs/Developerguide/ALTER-TRIGGER.md" >}}) - - [ALTER TYPE]({{< relref "./docs/Developerguide/ALTER-TYPE.md" >}}) - - [ALTER USER]({{< relref "./docs/Developerguide/ALTER-USER.md" >}}) - - [ALTER VIEW]({{< relref "./docs/Developerguide/ALTER-VIEW.md" >}}) - - [ANALYZE | ANALYSE]({{< relref "./docs/Developerguide/ANALYZE-ANALYSE.md" >}}) - - [BEGIN]({{< relref "./docs/Developerguide/BEGIN.md" >}}) - - [CALL]({{< relref "./docs/Developerguide/CALL.md" >}}) - - [CHECKPOINT]({{< relref "./docs/Developerguide/CHECKPOINT.md" >}}) - - [CLOSE]({{< relref "./docs/Developerguide/CLOSE.md" >}}) - - [CLUSTER]({{< relref "./docs/Developerguide/CLUSTER.md" >}}) - - [COMMENT]({{< relref "./docs/Developerguide/COMMENT.md" >}}) - - [COMMIT | END]({{< relref "./docs/Developerguide/COMMIT-END.md" >}}) - - [COMMIT PREPARED]({{< relref "./docs/Developerguide/COMMIT-PREPARED.md" >}}) - - [COPY]({{< relref "./docs/Developerguide/COPY.md" >}}) - - [CREATE DATABASE]({{< relref "./docs/Developerguide/CREATE-DATABASE.md" >}}) - - [CREATE DATA SOURCE]({{< relref "./docs/Developerguide/CREATE-DATA-SOURCE.md" >}}) - - [CREATE DIRECTORY]({{< relref "./docs/Developerguide/CREATE-DIRECTORY.md" >}}) - - [CREATE FUNCTION]({{< relref "./docs/Developerguide/CREATE-FUNCTION.md" >}}) - - [CREATE GROUP]({{< relref "./docs/Developerguide/CREATE-GROUP.md" >}}) - - [CREATE INDEX]({{< relref "./docs/Developerguide/CREATE-INDEX.md" >}}) - - [CREATE ROW LEVLEL SECURITY POLICY]({{< relref "./docs/Developerguide/CREATE-ROW-LEVLEL-SECURITY-POLICY.md" >}}) - - [CREATE PROCEDURE]({{< relref "./docs/Developerguide/CREATE-PROCEDURE.md" >}}) - - [CREATE ROLE]({{< relref "./docs/Developerguide/CREATE-ROLE.md" >}}) - - [CREATE SCHEMA]({{< relref "./docs/Developerguide/CREATE-SCHEMA.md" >}}) - - [CREATE SEQUENCE]({{< relref "./docs/Developerguide/CREATE-SEQUENCE.md" >}}) - - [CREATE TABLE]({{< relref "./docs/Developerguide/CREATE-TABLE.md" >}}) - - [CREATE TABLE AS]({{< relref "./docs/Developerguide/CREATE-TABLE-AS.md" >}}) - - [CREATE TABLE PARTITION]({{< relref "./docs/Developerguide/CREATE-TABLE-PARTITION.md" >}}) - - [CREATE TABLESPACE]({{< relref "./docs/Developerguide/CREATE-TABLESPACE.md" >}}) - - [CREATE TEXT SEARCH CONFIGURATION]({{< relref "./docs/Developerguide/CREATE-TEXT-SEARCH-CONFIGURATION.md" >}}) - - [CREATE TEXT SEARCH DICTIONARY]({{< relref "./docs/Developerguide/CREATE-TEXT-SEARCH-DICTIONARY.md" >}}) - - [CREATE TRIGGER]({{< relref "./docs/Developerguide/CREATE-TRIGGER.md" >}}) - - [CREATE TYPE]({{< relref "./docs/Developerguide/CREATE-TYPE.md" >}}) - - [CREATE USER]({{< relref "./docs/Developerguide/CREATE-USER.md" >}}) - - [CREATE VIEW]({{< relref "./docs/Developerguide/CREATE-VIEW.md" >}}) - - [CURSOR]({{< relref "./docs/Developerguide/CURSOR.md" >}}) - - [DEALLOCATE]({{< relref "./docs/Developerguide/DEALLOCATE.md" >}}) - - [DECLARE]({{< relref "./docs/Developerguide/DECLARE.md" >}}) - - [DELETE]({{< relref "./docs/Developerguide/DELETE.md" >}}) - - [DO]({{< relref "./docs/Developerguide/DO.md" >}}) - - [DROP DATABASE]({{< relref "./docs/Developerguide/DROP-DATABASE.md" >}}) - - [DROP DATA SOURCE]({{< relref "./docs/Developerguide/DROP-DATA-SOURCE.md" >}}) - - [DROP DIRECTORY]({{< relref "./docs/Developerguide/DROP-DIRECTORY.md" >}}) - - [DROP FUNCTION]({{< relref "./docs/Developerguide/DROP-FUNCTION.md" >}}) - - [DROP GROUP]({{< relref "./docs/Developerguide/DROP-GROUP.md" >}}) - - [DROP INDEX]({{< relref "./docs/Developerguide/DROP-INDEX.md" >}}) - - [DROP OWNED]({{< relref "./docs/Developerguide/DROP-OWNED.md" >}}) - - [DROP ROW LEVEL SECURITY POLICY]({{< relref "./docs/Developerguide/DROP-ROW-LEVEL-SECURITY-POLICY.md" >}}) - - [DROP PROCEDURE]({{< relref "./docs/Developerguide/DROP-PROCEDURE.md" >}}) - - [DROP ROLE]({{< relref "./docs/Developerguide/DROP-ROLE.md" >}}) - - [DROP SCHEMA]({{< relref "./docs/Developerguide/DROP-SCHEMA.md" >}}) - - [DROP SEQUENCE]({{< relref "./docs/Developerguide/DROP-SEQUENCE.md" >}}) - - [DROP TABLE]({{< relref "./docs/Developerguide/DROP-TABLE.md" >}}) - - [DROP TABLESPACE]({{< relref "./docs/Developerguide/DROP-TABLESPACE.md" >}}) - - [DROP TEXT SEARCH CONFIGURATION]({{< relref "./docs/Developerguide/DROP-TEXT-SEARCH-CONFIGURATION.md" >}}) - - [DROP TEXT SEARCH DICTIONARY]({{< relref "./docs/Developerguide/DROP-TEXT-SEARCH-DICTIONARY.md" >}}) - - [DROP TRIGGER]({{< relref "./docs/Developerguide/DROP-TRIGGER.md" >}}) - - [DROP TYPE]({{< relref "./docs/Developerguide/DROP-TYPE.md" >}}) - - [DROP USER]({{< relref "./docs/Developerguide/DROP-USER.md" >}}) - - [DROP VIEW]({{< relref "./docs/Developerguide/DROP-VIEW.md" >}}) - - [EXECUTE]({{< relref "./docs/Developerguide/EXECUTE.md" >}}) - - [EXPLAIN]({{< relref "./docs/Developerguide/EXPLAIN.md" >}}) - - [EXPLAIN PLAN]({{< relref "./docs/Developerguide/EXPLAIN-PLAN.md" >}}) - - [FETCH]({{< relref "./docs/Developerguide/FETCH.md" >}}) - - [GRANT]({{< relref "./docs/Developerguide/GRANT.md" >}}) - - [INSERT]({{< relref "./docs/Developerguide/INSERT.md" >}}) - - [LOCK]({{< relref "./docs/Developerguide/LOCK.md" >}}) - - [MOVE]({{< relref "./docs/Developerguide/MOVE.md" >}}) - - [MERGE INTO]({{< relref "./docs/Developerguide/MERGE-INTO.md" >}}) - - [PREPARE]({{< relref "./docs/Developerguide/PREPARE.md" >}}) - - [PREPARE TRANSACTION]({{< relref "./docs/Developerguide/PREPARE-TRANSACTION.md" >}}) - - [REASSIGN OWNED]({{< relref "./docs/Developerguide/REASSIGN-OWNED.md" >}}) - - [REINDEX]({{< relref "./docs/Developerguide/REINDEX.md" >}}) - - [RELEASE SAVEPOINT]({{< relref "./docs/Developerguide/RELEASE-SAVEPOINT.md" >}}) - - [RESET]({{< relref "./docs/Developerguide/RESET.md" >}}) - - [REVOKE]({{< relref "./docs/Developerguide/REVOKE.md" >}}) - - [ROLLBACK]({{< relref "./docs/Developerguide/ROLLBACK.md" >}}) - - [ROLLBACK PREPARED]({{< relref "./docs/Developerguide/ROLLBACK-PREPARED.md" >}}) - - [ROLLBACK TO SAVEPOINT]({{< relref "./docs/Developerguide/ROLLBACK-TO-SAVEPOINT.md" >}}) - - [SAVEPOINT]({{< relref "./docs/Developerguide/SAVEPOINT.md" >}}) - - [SELECT]({{< relref "./docs/Developerguide/SELECT.md" >}}) - - [SELECT INTO]({{< relref "./docs/Developerguide/SELECT-INTO.md" >}}) - - [SET]({{< relref "./docs/Developerguide/SET.md" >}}) - - [SET CONSTRAINTS]({{< relref "./docs/Developerguide/SET-CONSTRAINTS.md" >}}) - - [SET ROLE]({{< relref "./docs/Developerguide/SET-ROLE.md" >}}) - - [SET SESSION AUTHORIZATION]({{< relref "./docs/Developerguide/SET-SESSION-AUTHORIZATION.md" >}}) - - [SET TRANSACTION]({{< relref "./docs/Developerguide/SET-TRANSACTION.md" >}}) - - [SHOW]({{< relref "./docs/Developerguide/SHOW.md" >}}) - - [START TRANSACTION]({{< relref "./docs/Developerguide/START-TRANSACTION.md" >}}) - - [TRUNCATE]({{< relref "./docs/Developerguide/TRUNCATE.md" >}}) - - [UPDATE]({{< relref "./docs/Developerguide/UPDATE.md" >}}) - - [VACUUM]({{< relref "./docs/Developerguide/VACUUM.md" >}}) - - [VALUES]({{< relref "./docs/Developerguide/VALUES.md" >}}) - - [附录]({{< relref "./docs/Developerguide/附录-16.md" >}}) - - [GIN索引]({{< relref "./docs/Developerguide/GIN索引.md" >}}) - - [介绍]({{< relref "./docs/Developerguide/介绍-17.md" >}}) - - [扩展性]({{< relref "./docs/Developerguide/扩展性.md" >}}) - - [实现]({{< relref "./docs/Developerguide/实现.md" >}}) - - [GIN提示与技巧]({{< relref "./docs/Developerguide/GIN提示与技巧.md" >}}) - - [扩展函数]({{< relref "./docs/Developerguide/扩展函数.md" >}}) - - [扩展语法]({{< relref "./docs/Developerguide/扩展语法.md" >}}) - - [系统表和系统视图]({{< relref "./docs/Developerguide/系统表和系统视图.md" >}}) - - [系统表和系统视图概述]({{< relref "./docs/Developerguide/系统表和系统视图概述.md" >}}) - - [系统表]({{< relref "./docs/Developerguide/系统表.md" >}}) - - [GS\_OPT\_MODEL]({{< relref "./docs/Developerguide/GS_OPT_MODEL.md" >}}) - - [GS\_WLM\_INSTANCE\_HISTORY]({{< relref "./docs/Developerguide/GS_WLM_INSTANCE_HISTORY.md" >}}) - - [GS\_WLM\_OPERATOR\_INFO]({{< relref "./docs/Developerguide/GS_WLM_OPERATOR_INFO.md" >}}) - - [GS\_WLM\_PLAN\_ENCODING\_TABLE]({{< relref "./docs/Developerguide/GS_WLM_PLAN_ENCODING_TABLE.md" >}}) - - [GS\_WLM\_PLAN\_OPERATOR\_INFO]({{< relref "./docs/Developerguide/GS_WLM_PLAN_OPERATOR_INFO.md" >}}) - - [GS\_WLM\_SESSION\_QUERY\_INFO\_ALL]({{< relref "./docs/Developerguide/GS_WLM_SESSION_QUERY_INFO_ALL.md" >}}) - - [GS\_WLM\_USER\_RESOURCE\_HISTORY]({{< relref "./docs/Developerguide/GS_WLM_USER_RESOURCE_HISTORY.md" >}}) - - [PG\_AGGREGATE]({{< relref "./docs/Developerguide/PG_AGGREGATE.md" >}}) - - [PG\_AM]({{< relref "./docs/Developerguide/PG_AM.md" >}}) - - [PG\_AMOP]({{< relref "./docs/Developerguide/PG_AMOP.md" >}}) - - [PG\_AMPROC]({{< relref "./docs/Developerguide/PG_AMPROC.md" >}}) - - [PG\_APP\_WORKLOADGROUP\_MAPPING]({{< relref "./docs/Developerguide/PG_APP_WORKLOADGROUP_MAPPING.md" >}}) - - [PG\_ATTRDEF]({{< relref "./docs/Developerguide/PG_ATTRDEF.md" >}}) - - [PG\_ATTRIBUTE]({{< relref "./docs/Developerguide/PG_ATTRIBUTE.md" >}}) - - [PG\_AUTHID]({{< relref "./docs/Developerguide/PG_AUTHID.md" >}}) - - [PG\_AUTH\_HISTORY]({{< relref "./docs/Developerguide/PG_AUTH_HISTORY.md" >}}) - - [PG\_AUTH\_MEMBERS]({{< relref "./docs/Developerguide/PG_AUTH_MEMBERS.md" >}}) - - [PG\_CAST]({{< relref "./docs/Developerguide/PG_CAST.md" >}}) - - [PG\_CLASS]({{< relref "./docs/Developerguide/PG_CLASS.md" >}}) - - [PG\_COLLATION]({{< relref "./docs/Developerguide/PG_COLLATION.md" >}}) - - [PG\_CONSTRAINT]({{< relref "./docs/Developerguide/PG_CONSTRAINT.md" >}}) - - [PG\_CONVERSION]({{< relref "./docs/Developerguide/PG_CONVERSION.md" >}}) - - [PG\_DATABASE]({{< relref "./docs/Developerguide/PG_DATABASE.md" >}}) - - [PG\_DB\_ROLE\_SETTING]({{< relref "./docs/Developerguide/PG_DB_ROLE_SETTING.md" >}}) - - [PG\_DEFAULT\_ACL]({{< relref "./docs/Developerguide/PG_DEFAULT_ACL.md" >}}) - - [PG\_DEPEND]({{< relref "./docs/Developerguide/PG_DEPEND.md" >}}) - - [PG\_DESCRIPTION]({{< relref "./docs/Developerguide/PG_DESCRIPTION.md" >}}) - - [PG\_DIRECTORY]({{< relref "./docs/Developerguide/PG_DIRECTORY.md" >}}) - - [PG\_ENUM]({{< relref "./docs/Developerguide/PG_ENUM.md" >}}) - - [PG\_EXTENSION]({{< relref "./docs/Developerguide/PG_EXTENSION.md" >}}) - - [PG\_EXTENSION\_DATA\_SOURCE]({{< relref "./docs/Developerguide/PG_EXTENSION_DATA_SOURCE.md" >}}) - - [PG\_FOREIGN\_DATA\_WRAPPER]({{< relref "./docs/Developerguide/PG_FOREIGN_DATA_WRAPPER.md" >}}) - - [PG\_FOREIGN\_SERVER]({{< relref "./docs/Developerguide/PG_FOREIGN_SERVER.md" >}}) - - [PG\_FOREIGN\_TABLE]({{< relref "./docs/Developerguide/PG_FOREIGN_TABLE.md" >}}) - - [PG\_INDEX]({{< relref "./docs/Developerguide/PG_INDEX.md" >}}) - - [PG\_INHERITS]({{< relref "./docs/Developerguide/PG_INHERITS.md" >}}) - - [PG\_JOB]({{< relref "./docs/Developerguide/PG_JOB.md" >}}) - - [PG\_JOB\_PROC]({{< relref "./docs/Developerguide/PG_JOB_PROC.md" >}}) - - [PG\_LANGUAGE]({{< relref "./docs/Developerguide/PG_LANGUAGE.md" >}}) - - [PG\_LARGEOBJECT]({{< relref "./docs/Developerguide/PG_LARGEOBJECT.md" >}}) - - [PG\_LARGEOBJECT\_METADATA]({{< relref "./docs/Developerguide/PG_LARGEOBJECT_METADATA.md" >}}) - - [PG\_NAMESPACE]({{< relref "./docs/Developerguide/PG_NAMESPACE.md" >}}) - - [PG\_OBJECT]({{< relref "./docs/Developerguide/PG_OBJECT.md" >}}) - - [PG\_OPCLASS]({{< relref "./docs/Developerguide/PG_OPCLASS.md" >}}) - - [PG\_OPERATOR]({{< relref "./docs/Developerguide/PG_OPERATOR.md" >}}) - - [PG\_OPFAMILY]({{< relref "./docs/Developerguide/PG_OPFAMILY.md" >}}) - - [PG\_PARTITION]({{< relref "./docs/Developerguide/PG_PARTITION.md" >}}) - - [PG\_PLTEMPLATE]({{< relref "./docs/Developerguide/PG_PLTEMPLATE.md" >}}) - - [PG\_PROC]({{< relref "./docs/Developerguide/PG_PROC.md" >}}) - - [PG\_RANGE]({{< relref "./docs/Developerguide/PG_RANGE.md" >}}) - - [PG\_RESOURCE\_POOL]({{< relref "./docs/Developerguide/PG_RESOURCE_POOL.md" >}}) - - [PG\_REWRITE]({{< relref "./docs/Developerguide/PG_REWRITE.md" >}}) - - [PG\_RLSPOLICY]({{< relref "./docs/Developerguide/PG_RLSPOLICY.md" >}}) - - [PG\_SECLABEL]({{< relref "./docs/Developerguide/PG_SECLABEL.md" >}}) - - [PG\_SHDEPEND]({{< relref "./docs/Developerguide/PG_SHDEPEND.md" >}}) - - [PG\_SHDESCRIPTION]({{< relref "./docs/Developerguide/PG_SHDESCRIPTION.md" >}}) - - [PG\_SHSECLABEL]({{< relref "./docs/Developerguide/PG_SHSECLABEL.md" >}}) - - [PG\_STATISTIC]({{< relref "./docs/Developerguide/PG_STATISTIC.md" >}}) - - [PG\_STATISTIC\_EXT]({{< relref "./docs/Developerguide/PG_STATISTIC_EXT.md" >}}) - - [PG\_TABLESPACE]({{< relref "./docs/Developerguide/PG_TABLESPACE.md" >}}) - - [PG\_TRIGGER]({{< relref "./docs/Developerguide/PG_TRIGGER.md" >}}) - - [PG\_TS\_CONFIG]({{< relref "./docs/Developerguide/PG_TS_CONFIG.md" >}}) - - [PG\_TS\_CONFIG\_MAP]({{< relref "./docs/Developerguide/PG_TS_CONFIG_MAP.md" >}}) - - [PG\_TS\_DICT]({{< relref "./docs/Developerguide/PG_TS_DICT.md" >}}) - - [PG\_TS\_PARSER]({{< relref "./docs/Developerguide/PG_TS_PARSER.md" >}}) - - [PG\_TS\_TEMPLATE]({{< relref "./docs/Developerguide/PG_TS_TEMPLATE.md" >}}) - - [PG\_TYPE]({{< relref "./docs/Developerguide/PG_TYPE.md" >}}) - - [PG\_USER\_MAPPING]({{< relref "./docs/Developerguide/PG_USER_MAPPING.md" >}}) - - [PG\_USER\_STATUS]({{< relref "./docs/Developerguide/PG_USER_STATUS.md" >}}) - - [PG\_WORKLOAD\_GROUP]({{< relref "./docs/Developerguide/PG_WORKLOAD_GROUP.md" >}}) - - [PLAN\_TABLE\_DATA]({{< relref "./docs/Developerguide/PLAN_TABLE_DATA.md" >}}) - - [系统视图]({{< relref "./docs/Developerguide/系统视图.md" >}}) - - [GET\_GTM\_LITE\_STATUS]({{< relref "./docs/Developerguide/GET_GTM_LITE_STATUS.md" >}}) - - [GS\_SESSION\_CPU\_STATISTICS]({{< relref "./docs/Developerguide/GS_SESSION_CPU_STATISTICS.md" >}}) - - [GS\_SESSION\_MEMORY\_STATISTICS]({{< relref "./docs/Developerguide/GS_SESSION_MEMORY_STATISTICS.md" >}}) - - [GS\_SQL\_COUNT]({{< relref "./docs/Developerguide/GS_SQL_COUNT.md" >}}) - - [GS\_WLM\_OPERATOR\_HISTORY]({{< relref "./docs/Developerguide/GS_WLM_OPERATOR_HISTORY.md" >}}) - - [GS\_WLM\_OPERATOR\_STATISTICS]({{< relref "./docs/Developerguide/GS_WLM_OPERATOR_STATISTICS.md" >}}) - - [GS\_WLM\_PLAN\_OPERATOR\_HISTORY]({{< relref "./docs/Developerguide/GS_WLM_PLAN_OPERATOR_HISTORY.md" >}}) - - [GS\_WLM\_REBUILD\_USER\_RESOURCE\_POOL]({{< relref "./docs/Developerguide/GS_WLM_REBUILD_USER_RESOURCE_POOL.md" >}}) - - [GS\_WLM\_RESOURCE\_POOL]({{< relref "./docs/Developerguide/GS_WLM_RESOURCE_POOL.md" >}}) - - [GS\_WLM\_SESSION\_HISTORY]({{< relref "./docs/Developerguide/GS_WLM_SESSION_HISTORY.md" >}}) - - [GS\_WLM\_SESSION\_INFO\_ALL]({{< relref "./docs/Developerguide/GS_WLM_SESSION_INFO_ALL.md" >}}) - - [GS\_WLM\_USER\_INFO]({{< relref "./docs/Developerguide/GS_WLM_USER_INFO.md" >}}) - - [GS\_WLM\_SESSION\_STATISTICS]({{< relref "./docs/Developerguide/GS_WLM_SESSION_STATISTICS.md" >}}) - - [GS\_STAT\_DB\_CU]({{< relref "./docs/Developerguide/GS_STAT_DB_CU.md" >}}) - - [GS\_STAT\_SESSION\_CU]({{< relref "./docs/Developerguide/GS_STAT_SESSION_CU.md" >}}) - - [MPP\_TABLES]({{< relref "./docs/Developerguide/MPP_TABLES.md" >}}) - - [PG\_AVAILABLE\_EXTENSION\_VERSIONS]({{< relref "./docs/Developerguide/PG_AVAILABLE_EXTENSION_VERSIONS.md" >}}) - - [PG\_AVAILABLE\_EXTENSIONS]({{< relref "./docs/Developerguide/PG_AVAILABLE_EXTENSIONS.md" >}}) - - [PG\_CURSORS]({{< relref "./docs/Developerguide/PG_CURSORS.md" >}}) - - [PG\_EXT\_STATS]({{< relref "./docs/Developerguide/PG_EXT_STATS.md" >}}) - - [PG\_GET\_INVALID\_BACKENDS]({{< relref "./docs/Developerguide/PG_GET_INVALID_BACKENDS.md" >}}) - - [PG\_GET\_SENDERS\_CATCHUP\_TIME]({{< relref "./docs/Developerguide/PG_GET_SENDERS_CATCHUP_TIME.md" >}}) - - [PG\_GROUP]({{< relref "./docs/Developerguide/PG_GROUP.md" >}}) - - [PG\_INDEXES]({{< relref "./docs/Developerguide/PG_INDEXES.md" >}}) - - [PG\_LOCKS]({{< relref "./docs/Developerguide/PG_LOCKS.md" >}}) - - [PG\_NODE\_ENV]({{< relref "./docs/Developerguide/PG_NODE_ENV.md" >}}) - - [PG\_OS\_THREADS]({{< relref "./docs/Developerguide/PG_OS_THREADS.md" >}}) - - [PG\_PREPARED\_STATEMENTS]({{< relref "./docs/Developerguide/PG_PREPARED_STATEMENTS.md" >}}) - - [PG\_PREPARED\_XACTS]({{< relref "./docs/Developerguide/PG_PREPARED_XACTS.md" >}}) - - [PG\_REPLICATION\_SLOTS]({{< relref "./docs/Developerguide/PG_REPLICATION_SLOTS.md" >}}) - - [PG\_RLSPOLICIES]({{< relref "./docs/Developerguide/PG_RLSPOLICIES.md" >}}) - - [PG\_ROLES]({{< relref "./docs/Developerguide/PG_ROLES.md" >}}) - - [PG\_RULES]({{< relref "./docs/Developerguide/PG_RULES.md" >}}) - - [PG\_RUNNING\_XACTS]({{< relref "./docs/Developerguide/PG_RUNNING_XACTS.md" >}}) - - [PG\_SECLABELS]({{< relref "./docs/Developerguide/PG_SECLABELS.md" >}}) - - [PG\_SESSION\_WLMSTAT]({{< relref "./docs/Developerguide/PG_SESSION_WLMSTAT.md" >}}) - - [PG\_SESSION\_IOSTAT]({{< relref "./docs/Developerguide/PG_SESSION_IOSTAT.md" >}}) - - [PG\_SETTINGS]({{< relref "./docs/Developerguide/PG_SETTINGS.md" >}}) - - [PG\_SHADOW]({{< relref "./docs/Developerguide/PG_SHADOW.md" >}}) - - [PG\_STATS]({{< relref "./docs/Developerguide/PG_STATS.md" >}}) - - [PG\_STAT\_ACTIVITY]({{< relref "./docs/Developerguide/PG_STAT_ACTIVITY.md" >}}) - - [PG\_STAT\_ALL\_INDEXES]({{< relref "./docs/Developerguide/PG_STAT_ALL_INDEXES.md" >}}) - - [PG\_STAT\_ALL\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_ALL_TABLES.md" >}}) - - [PG\_STAT\_BAD\_BLOCK]({{< relref "./docs/Developerguide/PG_STAT_BAD_BLOCK.md" >}}) - - [PG\_STAT\_BGWRITER]({{< relref "./docs/Developerguide/PG_STAT_BGWRITER.md" >}}) - - [PG\_STAT\_DATABASE]({{< relref "./docs/Developerguide/PG_STAT_DATABASE.md" >}}) - - [PG\_STAT\_DATABASE\_CONFLICTS]({{< relref "./docs/Developerguide/PG_STAT_DATABASE_CONFLICTS.md" >}}) - - [PG\_STAT\_USER\_FUNCTIONS]({{< relref "./docs/Developerguide/PG_STAT_USER_FUNCTIONS.md" >}}) - - [PG\_STAT\_USER\_INDEXES]({{< relref "./docs/Developerguide/PG_STAT_USER_INDEXES.md" >}}) - - [PG\_STAT\_USER\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_USER_TABLES.md" >}}) - - [PG\_STAT\_REPLICATION]({{< relref "./docs/Developerguide/PG_STAT_REPLICATION.md" >}}) - - [PG\_STAT\_SYS\_INDEXES]({{< relref "./docs/Developerguide/PG_STAT_SYS_INDEXES.md" >}}) - - [PG\_STAT\_SYS\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_SYS_TABLES.md" >}}) - - [PG\_STAT\_XACT\_ALL\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_XACT_ALL_TABLES.md" >}}) - - [PG\_STAT\_XACT\_SYS\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_XACT_SYS_TABLES.md" >}}) - - [PG\_STAT\_XACT\_USER\_FUNCTIONS]({{< relref "./docs/Developerguide/PG_STAT_XACT_USER_FUNCTIONS.md" >}}) - - [PG\_STAT\_XACT\_USER\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_XACT_USER_TABLES.md" >}}) - - [PG\_STATIO\_ALL\_INDEXES]({{< relref "./docs/Developerguide/PG_STATIO_ALL_INDEXES.md" >}}) - - [PG\_STATIO\_ALL\_SEQUENCES]({{< relref "./docs/Developerguide/PG_STATIO_ALL_SEQUENCES.md" >}}) - - [PG\_STATIO\_ALL\_TABLES]({{< relref "./docs/Developerguide/PG_STATIO_ALL_TABLES.md" >}}) - - [PG\_STATIO\_SYS\_INDEXES]({{< relref "./docs/Developerguide/PG_STATIO_SYS_INDEXES.md" >}}) - - [PG\_STATIO\_SYS\_SEQUENCES]({{< relref "./docs/Developerguide/PG_STATIO_SYS_SEQUENCES.md" >}}) - - [PG\_STATIO\_SYS\_TABLES]({{< relref "./docs/Developerguide/PG_STATIO_SYS_TABLES.md" >}}) - - [PG\_STATIO\_USER\_INDEXES]({{< relref "./docs/Developerguide/PG_STATIO_USER_INDEXES.md" >}}) - - [PG\_STATIO\_USER\_SEQUENCES]({{< relref "./docs/Developerguide/PG_STATIO_USER_SEQUENCES.md" >}}) - - [PG\_STATIO\_USER\_TABLES]({{< relref "./docs/Developerguide/PG_STATIO_USER_TABLES.md" >}}) - - [PG\_THREAD\_WAIT\_STATUS]({{< relref "./docs/Developerguide/PG_THREAD_WAIT_STATUS.md" >}}) - - [PG\_TABLES]({{< relref "./docs/Developerguide/PG_TABLES.md" >}}) - - [PG\_TDE\_INFO]({{< relref "./docs/Developerguide/PG_TDE_INFO.md" >}}) - - [PG\_TIMEZONE\_NAMES]({{< relref "./docs/Developerguide/PG_TIMEZONE_NAMES.md" >}}) - - [PG\_TOTAL\_MEMORY\_DETAIL]({{< relref "./docs/Developerguide/PG_TOTAL_MEMORY_DETAIL.md" >}}) - - [PG\_TOTAL\_USER\_RESOURCE\_INFO]({{< relref "./docs/Developerguide/PG_TOTAL_USER_RESOURCE_INFO.md" >}}) - - [PG\_USER]({{< relref "./docs/Developerguide/PG_USER.md" >}}) - - [PG\_USER\_MAPPINGS]({{< relref "./docs/Developerguide/PG_USER_MAPPINGS.md" >}}) - - [PG\_VIEWS]({{< relref "./docs/Developerguide/PG_VIEWS.md" >}}) - - [PG\_WLM\_STATISTICS]({{< relref "./docs/Developerguide/PG_WLM_STATISTICS.md" >}}) - - [PLAN\_TABLE]({{< relref "./docs/Developerguide/PLAN_TABLE.md" >}}) - - [GS\_FILE\_STAT]({{< relref "./docs/Developerguide/GS_FILE_STAT.md" >}}) - - [GS\_OS\_RUN\_INFO]({{< relref "./docs/Developerguide/GS_OS_RUN_INFO.md" >}}) - - [GS\_REDO\_STAT]({{< relref "./docs/Developerguide/GS_REDO_STAT.md" >}}) - - [GS\_SESSION\_MEMORY]({{< relref "./docs/Developerguide/GS_SESSION_MEMORY.md" >}}) - - [GS\_SESSION\_MEMORY\_CONTEXT]({{< relref "./docs/Developerguide/GS_SESSION_MEMORY_CONTEXT.md" >}}) - - [GS\_SESSION\_MEMORY\_DETAIL]({{< relref "./docs/Developerguide/GS_SESSION_MEMORY_DETAIL.md" >}}) - - [GS\_SESSION\_STAT]({{< relref "./docs/Developerguide/GS_SESSION_STAT.md" >}}) - - [GS\_SESSION\_TIME]({{< relref "./docs/Developerguide/GS_SESSION_TIME.md" >}}) - - [GS\_THREAD\_MEMORY\_CONTEXT]({{< relref "./docs/Developerguide/GS_THREAD_MEMORY_CONTEXT.md" >}}) - - [GS\_TOTAL\_MEMORY\_DETAIL]({{< relref "./docs/Developerguide/GS_TOTAL_MEMORY_DETAIL.md" >}}) - - [PG\_TIMEZONE\_ABBREVS]({{< relref "./docs/Developerguide/PG_TIMEZONE_ABBREVS.md" >}}) - - [PG\_TOTAL\_USER\_RESOURCE\_INFO\_OID]({{< relref "./docs/Developerguide/PG_TOTAL_USER_RESOURCE_INFO_OID.md" >}}) - - [PG\_VARIABLE\_INFO]({{< relref "./docs/Developerguide/PG_VARIABLE_INFO.md" >}}) - - [GS\_INSTANCE\_TIME]({{< relref "./docs/Developerguide/GS_INSTANCE_TIME.md" >}}) - - [GUC参数说明]({{< relref "./docs/Developerguide/GUC参数说明.md" >}}) - - [GUC使用说明]({{< relref "./docs/Developerguide/GUC使用说明.md" >}}) - - [文件位置]({{< relref "./docs/Developerguide/文件位置.md" >}}) - - [连接和认证]({{< relref "./docs/Developerguide/连接和认证.md" >}}) - - [连接设置]({{< relref "./docs/Developerguide/连接设置.md" >}}) - - [安全和认证(postgresql.conf)]({{< relref "./docs/Developerguide/安全和认证(postgresql-conf).md" >}}) - - [通信库参数]({{< relref "./docs/Developerguide/通信库参数.md" >}}) - - [资源消耗]({{< relref "./docs/Developerguide/资源消耗.md" >}}) - - [内存]({{< relref "./docs/Developerguide/内存.md" >}}) - - [磁盘空间]({{< relref "./docs/Developerguide/磁盘空间.md" >}}) - - [内核资源使用]({{< relref "./docs/Developerguide/内核资源使用.md" >}}) - - [基于开销的清理延迟]({{< relref "./docs/Developerguide/基于开销的清理延迟.md" >}}) - - [后端写进程]({{< relref "./docs/Developerguide/后端写进程.md" >}}) - - [异步IO]({{< relref "./docs/Developerguide/异步IO.md" >}}) - - [并行导入]({{< relref "./docs/Developerguide/并行导入.md" >}}) - - [预写式日志]({{< relref "./docs/Developerguide/预写式日志.md" >}}) - - [设置]({{< relref "./docs/Developerguide/设置.md" >}}) - - [检查点]({{< relref "./docs/Developerguide/检查点.md" >}}) - - [日志回放]({{< relref "./docs/Developerguide/日志回放.md" >}}) - - [归档]({{< relref "./docs/Developerguide/归档.md" >}}) - - [双机复制]({{< relref "./docs/Developerguide/双机复制.md" >}}) - - [发送端服务器]({{< relref "./docs/Developerguide/发送端服务器.md" >}}) - - [主服务器]({{< relref "./docs/Developerguide/主服务器.md" >}}) - - [备服务器]({{< relref "./docs/Developerguide/备服务器.md" >}}) - - [内存表]({{< relref "./docs/Developerguide/内存表.md" >}}) - - [查询规划]({{< relref "./docs/Developerguide/查询规划.md" >}}) - - [优化器方法配置]({{< relref "./docs/Developerguide/优化器方法配置.md" >}}) - - [优化器开销常量]({{< relref "./docs/Developerguide/优化器开销常量.md" >}}) - - [基因查询优化器]({{< relref "./docs/Developerguide/基因查询优化器.md" >}}) - - [其他优化器选项]({{< relref "./docs/Developerguide/其他优化器选项.md" >}}) - - [错误报告和日志]({{< relref "./docs/Developerguide/错误报告和日志.md" >}}) - - [记录日志的位置]({{< relref "./docs/Developerguide/记录日志的位置.md" >}}) - - [记录日志的时间]({{< relref "./docs/Developerguide/记录日志的时间.md" >}}) - - [记录日志的内容]({{< relref "./docs/Developerguide/记录日志的内容.md" >}}) - - [使用CSV格式写日志]({{< relref "./docs/Developerguide/使用CSV格式写日志.md" >}}) - - [告警检测]({{< relref "./docs/Developerguide/告警检测.md" >}}) - - [运行时统计]({{< relref "./docs/Developerguide/运行时统计.md" >}}) - - [查询和索引统计收集器]({{< relref "./docs/Developerguide/查询和索引统计收集器.md" >}}) - - [性能统计]({{< relref "./docs/Developerguide/性能统计.md" >}}) - - [负载管理]({{< relref "./docs/Developerguide/负载管理.md" >}}) - - [自动清理]({{< relref "./docs/Developerguide/自动清理.md" >}}) - - [客户端连接缺省设置]({{< relref "./docs/Developerguide/客户端连接缺省设置.md" >}}) - - [语句行为]({{< relref "./docs/Developerguide/语句行为.md" >}}) - - [区域和格式化]({{< relref "./docs/Developerguide/区域和格式化.md" >}}) - - [其他缺省]({{< relref "./docs/Developerguide/其他缺省.md" >}}) - - [锁管理]({{< relref "./docs/Developerguide/锁管理.md" >}}) - - [版本和平台兼容性]({{< relref "./docs/Developerguide/版本和平台兼容性.md" >}}) - - [历史版本兼容性]({{< relref "./docs/Developerguide/历史版本兼容性.md" >}}) - - [平台和客户端兼容性]({{< relref "./docs/Developerguide/平台和客户端兼容性.md" >}}) - - [容错性]({{< relref "./docs/Developerguide/容错性.md" >}}) - - [连接池参数]({{< relref "./docs/Developerguide/连接池参数.md" >}}) - - [openGauss事务]({{< relref "./docs/Developerguide/openGauss事务.md" >}}) - - [开发人员选项]({{< relref "./docs/Developerguide/开发人员选项.md" >}}) - - [审计]({{< relref "./docs/Developerguide/审计.md" >}}) - - [审计开关]({{< relref "./docs/Developerguide/审计开关.md" >}}) - - [用户和权限审计]({{< relref "./docs/Developerguide/用户和权限审计.md" >}}) - - [操作审计]({{< relref "./docs/Developerguide/操作审计.md" >}}) - - [事务监控]({{< relref "./docs/Developerguide/事务监控.md" >}}) - - [升级参数]({{< relref "./docs/Developerguide/升级参数.md" >}}) - - [其它选项]({{< relref "./docs/Developerguide/其它选项.md" >}}) - - [等待事件]({{< relref "./docs/Developerguide/等待事件.md" >}}) - - [Query]({{< relref "./docs/Developerguide/Query.md" >}}) - - [系统性能快照]({{< relref "./docs/Developerguide/系统性能快照.md" >}}) - - [常见故障定位指南]({{< relref "./docs/Developerguide/常见故障定位指南.md" >}}) - - [core问题定位]({{< relref "./docs/Developerguide/core问题定位.md" >}}) - - [磁盘满故障引起的core问题]({{< relref "./docs/Developerguide/磁盘满故障引起的core问题.md" >}}) - - [GUC参数log\_directory设置不正确引起的core问题]({{< relref "./docs/Developerguide/GUC参数log_directory设置不正确引起的core问题.md" >}}) +- [安装指南]({{< relref "./docs/Installation/Installation.md >}}) + - [安装概述]({{< relref "./docs/Installation/安装概述.md >}}) + - [安装准备]({{< relref "./docs/Installation/安装准备.md >}}) + - [了解安装流程]({{< relref "./docs/Installation/了解安装流程.md >}}) + - [获取并校验安装包]({{< relref "./docs/Installation/获取并校验安装包.md >}}) + - [准备软硬件安装环境]({{< relref "./docs/Installation/准备软硬件安装环境.md >}}) + - [软硬件环境要求]({{< relref "./docs/Installation/软硬件环境要求.md >}}) + - [修改操作系统配置]({{< relref "./docs/Installation/修改操作系统配置.md >}}) + - [关闭操作系统防火墙]({{< relref "./docs/Installation/关闭操作系统防火墙.md >}}) + - [设置字符集参数]({{< relref "./docs/Installation/设置字符集参数.md >}}) + - [设置时区和时间]({{< relref "./docs/Installation/设置时区和时间.md >}}) + - [关闭swap交换内存]({{< relref "./docs/Installation/关闭swap交换内存.md >}}) + - [设置网卡MTU值]({{< relref "./docs/Installation/设置网卡MTU值.md >}}) + - [设置root用户远程登录]({{< relref "./docs/Installation/设置root用户远程登录.md >}}) + - [了解安装用户及用户组]({{< relref "./docs/Installation/了解安装用户及用户组.md >}}) + - [安装openGauss]({{< relref "./docs/Installation/安装openGauss.md >}}) + - [创建XML配置文件]({{< relref "./docs/Installation/创建XML配置文件.md >}}) + - [配置数据库名称及各项目录]({{< relref "./docs/Installation/配置数据库名称及各项目录.md >}}) + - [配置Host基本信息]({{< relref "./docs/Installation/配置Host基本信息.md >}}) + - [配置数据库主节点信息]({{< relref "./docs/Installation/配置数据库主节点信息.md >}}) + - [示例]({{< relref "./docs/Installation/示例.md >}}) + - [单节点配置文件]({{< relref "./docs/Installation/单节点配置文件.md >}}) + - [一主一备配置文件]({{< relref "./docs/Installation/一主一备配置文件.md >}}) + - [初始化安装环境]({{< relref "./docs/Installation/初始化安装环境.md >}}) + - [准备安装用户及环境]({{< relref "./docs/Installation/准备安装用户及环境.md >}}) + - [手工建立互信]({{< relref "./docs/Installation/手工建立互信.md >}}) + - [配置操作系统参数]({{< relref "./docs/Installation/配置操作系统参数.md >}}) + - [执行安装]({{< relref "./docs/Installation/执行安装.md >}}) + - [(可选)设置备机可读]({{< relref "./docs/Installation/(可选)设置备机可读.md >}}) + - [安装验证]({{< relref "./docs/Installation/安装验证.md >}}) + - [检查openGauss健康状态]({{< relref "./docs/Installation/检查openGauss健康状态.md >}}) + - [初始配置]({{< relref "./docs/Installation/初始配置.md >}}) + - [配置区域和字符集]({{< relref "./docs/Installation/配置区域和字符集.md >}}) + - [卸载openGauss]({{< relref "./docs/Installation/卸载openGauss.md >}}) + - [执行卸载]({{< relref "./docs/Installation/执行卸载.md >}}) + - [一键式环境清理]({{< relref "./docs/Installation/一键式环境清理.md >}}) + +- [开发者指南]({{< relref "./docs/Developerguide/Developerguide.md >}}) + - [概述]({{< relref "./docs/Developerguide/概述.md >}}) + - [数据库逻辑结构图]({{< relref "./docs/Developerguide/数据库逻辑结构图.md >}}) + - [数据查询请求处理过程]({{< relref "./docs/Developerguide/数据查询请求处理过程.md >}}) + - [管理事务]({{< relref "./docs/Developerguide/管理事务.md >}}) + - [相关概念]({{< relref "./docs/Developerguide/相关概念.md >}}) + - [数据库使用]({{< relref "./docs/Developerguide/数据库使用.md >}}) + - [从这里开始]({{< relref "./docs/Developerguide/从这里开始.md >}}) + - [连接数据库]({{< relref "./docs/Developerguide/连接数据库.md >}}) + - [确认连接信息]({{< relref "./docs/Developerguide/确认连接信息.md >}}) + - [配置服务端远程连接]({{< relref "./docs/Developerguide/配置服务端远程连接.md >}}) + - [使用gsql连接]({{< relref "./docs/Developerguide/使用gsql连接.md >}}) + - [应用程序接口]({{< relref "./docs/Developerguide/应用程序接口.md >}}) + - [创建和管理数据库]({{< relref "./docs/Developerguide/创建和管理数据库.md >}}) + - [规划存储模型]({{< relref "./docs/Developerguide/规划存储模型.md >}}) + - [创建和管理表空间]({{< relref "./docs/Developerguide/创建和管理表空间.md >}}) + - [创建和管理表]({{< relref "./docs/Developerguide/创建和管理表.md >}}) + - [创建表]({{< relref "./docs/Developerguide/创建表.md >}}) + - [向表中插入数据]({{< relref "./docs/Developerguide/向表中插入数据.md >}}) + - [更新表中数据]({{< relref "./docs/Developerguide/更新表中数据.md >}}) + - [查看数据]({{< relref "./docs/Developerguide/查看数据.md >}}) + - [删除表中数据]({{< relref "./docs/Developerguide/删除表中数据.md >}}) + - [查看系统表]({{< relref "./docs/Developerguide/查看系统表.md >}}) + - [其他操作]({{< relref "./docs/Developerguide/其他操作.md >}}) + - [创建和管理schema]({{< relref "./docs/Developerguide/创建和管理schema.md >}}) + - [创建和管理分区表]({{< relref "./docs/Developerguide/创建和管理分区表.md >}}) + - [创建和管理索引]({{< relref "./docs/Developerguide/创建和管理索引.md >}}) + - [创建和管理视图]({{< relref "./docs/Developerguide/创建和管理视图.md >}}) + - [创建和管理序列]({{< relref "./docs/Developerguide/创建和管理序列.md >}}) + - [附录]({{< relref "./docs/Developerguide/附录.md >}}) + - [客户端接入认证]({{< relref "./docs/Developerguide/客户端接入认证.md >}}) + - [配置客户端接入认证]({{< relref "./docs/Developerguide/配置客户端接入认证.md >}}) + - [配置文件参考]({{< relref "./docs/Developerguide/配置文件参考.md >}}) + - [用SSL进行安全的TCP/IP连接]({{< relref "./docs/Developerguide/用SSL进行安全的TCP IP连接.md >}}) + - [用SSH隧道进行安全的TCP/IP连接]({{< relref "./docs/Developerguide/用SSH隧道进行安全的TCP IP连接.md >}}) + - [查看数据库连接数]({{< relref "./docs/Developerguide/查看数据库连接数.md >}}) + - [SSL证书管理]({{< relref "./docs/Developerguide/SSL证书管理.md >}}) + - [证书生成]({{< relref "./docs/Developerguide/证书生成.md >}}) + - [证书替换]({{< relref "./docs/Developerguide/证书替换.md >}}) + - [设置文件权限安全策略]({{< relref "./docs/Developerguide/设置文件权限安全策略.md >}}) + - [管理数据库安全]({{< relref "./docs/Developerguide/管理数据库安全.md >}}) + - [客户端接入认证]({{< relref "./docs/Developerguide/客户端接入认证 0.md >}}) + - [配置客户端接入认证]({{< relref "./docs/Developerguide/配置客户端接入认证 1.md >}}) + - [配置文件参考]({{< relref "./docs/Developerguide/配置文件参考 2.md >}}) + - [用SSL进行安全的TCP/IP连接]({{< relref "./docs/Developerguide/用SSL进行安全的TCP IP连接 3.md >}}) + - [用SSH隧道进行安全的TCP/IP连接]({{< relref "./docs/Developerguide/用SSH隧道进行安全的TCP IP连接 4.md >}}) + - [查看数据库连接数]({{< relref "./docs/Developerguide/查看数据库连接数 5.md >}}) + - [SSL证书管理]({{< relref "./docs/Developerguide/SSL证书管理 6.md >}}) + - [证书生成]({{< relref "./docs/Developerguide/证书生成 7.md >}}) + - [证书替换]({{< relref "./docs/Developerguide/证书替换 8.md >}}) + - [管理用户及权限]({{< relref "./docs/Developerguide/管理用户及权限.md >}}) + - [默认权限机制]({{< relref "./docs/Developerguide/默认权限机制.md >}}) + - [管理员]({{< relref "./docs/Developerguide/管理员.md >}}) + - [三权分立]({{< relref "./docs/Developerguide/三权分立.md >}}) + - [用户]({{< relref "./docs/Developerguide/用户.md >}}) + - [角色]({{< relref "./docs/Developerguide/角色.md >}}) + - [Schema]({{< relref "./docs/Developerguide/Schema.md >}}) + - [用户权限设置]({{< relref "./docs/Developerguide/用户权限设置.md >}}) + - [行级访问控制]({{< relref "./docs/Developerguide/行级访问控制.md >}}) + - [设置安全策略]({{< relref "./docs/Developerguide/设置安全策略.md >}}) + - [设置帐户安全策略]({{< relref "./docs/Developerguide/设置帐户安全策略.md >}}) + - [设置帐号有效期]({{< relref "./docs/Developerguide/设置帐号有效期.md >}}) + - [设置密码安全策略]({{< relref "./docs/Developerguide/设置密码安全策略.md >}}) + - [设置数据库审计]({{< relref "./docs/Developerguide/设置数据库审计.md >}}) + - [审计概述]({{< relref "./docs/Developerguide/审计概述.md >}}) + - [查看审计结果]({{< relref "./docs/Developerguide/查看审计结果.md >}}) + - [维护审计日志]({{< relref "./docs/Developerguide/维护审计日志.md >}}) + - [设置文件权限安全策略]({{< relref "./docs/Developerguide/设置文件权限安全策略 9.md >}}) + - [接口参考]({{< relref "./docs/Developerguide/接口参考.md >}}) + - [JDBC]({{< relref "./docs/Developerguide/JDBC.md >}}) + - [java.sql.Connection]({{< relref "./docs/Developerguide/java sql Connection.md >}}) + - [java.sql.CallableStatement]({{< relref "./docs/Developerguide/java sql CallableStatement.md >}}) + - [java.sql.DatabaseMetaData]({{< relref "./docs/Developerguide/java sql DatabaseMetaData.md >}}) + - [java.sql.Driver]({{< relref "./docs/Developerguide/java sql Driver.md >}}) + - [java.sql.PreparedStatement]({{< relref "./docs/Developerguide/java sql PreparedStatement.md >}}) + - [java.sql.ResultSet]({{< relref "./docs/Developerguide/java sql ResultSet.md >}}) + - [java.sql.ResultSetMetaData]({{< relref "./docs/Developerguide/java sql ResultSetMetaData.md >}}) + - [java.sql.Statement]({{< relref "./docs/Developerguide/java sql Statement.md >}}) + - [javax.sql.ConnectionPoolDataSource]({{< relref "./docs/Developerguide/javax sql ConnectionPoolDataSource.md >}}) + - [javax.sql.DataSource]({{< relref "./docs/Developerguide/javax sql DataSource.md >}}) + - [javax.sql.PooledConnection]({{< relref "./docs/Developerguide/javax sql PooledConnection.md >}}) + - [javax.naming.Context]({{< relref "./docs/Developerguide/javax naming Context.md >}}) + - [javax.naming.spi.InitialContextFactory]({{< relref "./docs/Developerguide/javax naming spi InitialContextFactory.md >}}) + - [CopyManager]({{< relref "./docs/Developerguide/CopyManager.md >}}) + - [ODBC]({{< relref "./docs/Developerguide/ODBC.md >}}) + - [SQLAllocEnv]({{< relref "./docs/Developerguide/SQLAllocEnv.md >}}) + - [SQLAllocConnect]({{< relref "./docs/Developerguide/SQLAllocConnect.md >}}) + - [SQLAllocHandle]({{< relref "./docs/Developerguide/SQLAllocHandle.md >}}) + - [SQLAllocStmt]({{< relref "./docs/Developerguide/SQLAllocStmt.md >}}) + - [SQLBindCol]({{< relref "./docs/Developerguide/SQLBindCol.md >}}) + - [SQLBindParameter]({{< relref "./docs/Developerguide/SQLBindParameter.md >}}) + - [SQLColAttribute]({{< relref "./docs/Developerguide/SQLColAttribute.md >}}) + - [SQLConnect]({{< relref "./docs/Developerguide/SQLConnect.md >}}) + - [SQLDisconnect]({{< relref "./docs/Developerguide/SQLDisconnect.md >}}) + - [SQLExecDirect]({{< relref "./docs/Developerguide/SQLExecDirect.md >}}) + - [SQLExecute]({{< relref "./docs/Developerguide/SQLExecute.md >}}) + - [SQLFetch]({{< relref "./docs/Developerguide/SQLFetch.md >}}) + - [SQLFreeStmt]({{< relref "./docs/Developerguide/SQLFreeStmt.md >}}) + - [SQLFreeConnect]({{< relref "./docs/Developerguide/SQLFreeConnect.md >}}) + - [SQLFreeHandle]({{< relref "./docs/Developerguide/SQLFreeHandle.md >}}) + - [SQLFreeEnv]({{< relref "./docs/Developerguide/SQLFreeEnv.md >}}) + - [SQLPrepare]({{< relref "./docs/Developerguide/SQLPrepare.md >}}) + - [SQLGetData]({{< relref "./docs/Developerguide/SQLGetData.md >}}) + - [SQLGetDiagRec]({{< relref "./docs/Developerguide/SQLGetDiagRec.md >}}) + - [SQLSetConnectAttr]({{< relref "./docs/Developerguide/SQLSetConnectAttr.md >}}) + - [SQLSetEnvAttr]({{< relref "./docs/Developerguide/SQLSetEnvAttr.md >}}) + - [SQLSetStmtAttr]({{< relref "./docs/Developerguide/SQLSetStmtAttr.md >}}) + - [示例]({{< relref "./docs/Developerguide/示例.md >}}) + - [libpq]({{< relref "./docs/Developerguide/libpq.md >}}) + - [数据库连接控制函数]({{< relref "./docs/Developerguide/数据库连接控制函数.md >}}) + - [PQconnectdbParams]({{< relref "./docs/Developerguide/PQconnectdbParams.md >}}) + - [PQconnectdb]({{< relref "./docs/Developerguide/PQconnectdb.md >}}) + - [PQconninfoParse]({{< relref "./docs/Developerguide/PQconninfoParse.md >}}) + - [PQconnectStart]({{< relref "./docs/Developerguide/PQconnectStart.md >}}) + - [PQerrorMessage]({{< relref "./docs/Developerguide/PQerrorMessage.md >}}) + - [PQsetdbLogin]({{< relref "./docs/Developerguide/PQsetdbLogin.md >}}) + - [PQfinish]({{< relref "./docs/Developerguide/PQfinish.md >}}) + - [PQreset]({{< relref "./docs/Developerguide/PQreset.md >}}) + - [PQstatus]({{< relref "./docs/Developerguide/PQstatus.md >}}) + - [数据库执行语句函数]({{< relref "./docs/Developerguide/数据库执行语句函数.md >}}) + - [PQclear]({{< relref "./docs/Developerguide/PQclear.md >}}) + - [PQexec]({{< relref "./docs/Developerguide/PQexec.md >}}) + - [PQexecParams]({{< relref "./docs/Developerguide/PQexecParams.md >}}) + - [PQexecParamsBatch]({{< relref "./docs/Developerguide/PQexecParamsBatch.md >}}) + - [PQexecPrepared]({{< relref "./docs/Developerguide/PQexecPrepared.md >}}) + - [PQexecPreparedBatch]({{< relref "./docs/Developerguide/PQexecPreparedBatch.md >}}) + - [PQfname]({{< relref "./docs/Developerguide/PQfname.md >}}) + - [PQgetvalue]({{< relref "./docs/Developerguide/PQgetvalue.md >}}) + - [PQnfields]({{< relref "./docs/Developerguide/PQnfields.md >}}) + - [PQntuples]({{< relref "./docs/Developerguide/PQntuples.md >}}) + - [PQprepare]({{< relref "./docs/Developerguide/PQprepare.md >}}) + - [PQresultStatus]({{< relref "./docs/Developerguide/PQresultStatus.md >}}) + - [异步命令处理]({{< relref "./docs/Developerguide/异步命令处理.md >}}) + - [PQsendQuery]({{< relref "./docs/Developerguide/PQsendQuery.md >}}) + - [PQsendQueryParams]({{< relref "./docs/Developerguide/PQsendQueryParams.md >}}) + - [PQsendPrepare]({{< relref "./docs/Developerguide/PQsendPrepare.md >}}) + - [PQsendQueryPrepared]({{< relref "./docs/Developerguide/PQsendQueryPrepared.md >}}) + - [PQflush]({{< relref "./docs/Developerguide/PQflush.md >}}) + - [取消正在处理的查询]({{< relref "./docs/Developerguide/取消正在处理的查询.md >}}) + - [PQgetCancel]({{< relref "./docs/Developerguide/PQgetCancel.md >}}) + - [PQfreeCancel]({{< relref "./docs/Developerguide/PQfreeCancel.md >}}) + - [PQcancel]({{< relref "./docs/Developerguide/PQcancel.md >}}) + - [示例]({{< relref "./docs/Developerguide/示例 10.md >}}) + - [链接字符]({{< relref "./docs/Developerguide/链接字符.md >}}) + - [导入数据]({{< relref "./docs/Developerguide/导入数据.md >}}) + - [通过INSERT语句直接写入数据]({{< relref "./docs/Developerguide/通过INSERT语句直接写入数据.md >}}) + - [使用COPY FROM STDIN导入数据]({{< relref "./docs/Developerguide/使用COPY FROM STDIN导入数据.md >}}) + - [关于COPY FROM STDIN导入数据]({{< relref "./docs/Developerguide/关于COPY FROM STDIN导入数据.md >}}) + - [CopyManager类简介]({{< relref "./docs/Developerguide/CopyManager类简介.md >}}) + - [示例1:通过本地文件导入导出数据]({{< relref "./docs/Developerguide/示例1 通过本地文件导入导出数据.md >}}) + - [示例2:从MySQL向openGauss进行数据迁移]({{< relref "./docs/Developerguide/示例2 从MySQL向openGauss进行数据迁移.md >}}) + - [使用gsql元命令导入数据]({{< relref "./docs/Developerguide/使用gsql元命令导入数据.md >}}) + - [使用gs\_restore命令导入数据]({{< relref "./docs/Developerguide/使用gs_restore命令导入数据.md >}}) + - [更新表中数据]({{< relref "./docs/Developerguide/更新表中数据 11.md >}}) + - [使用DML命令更新表]({{< relref "./docs/Developerguide/使用DML命令更新表.md >}}) + - [使用合并方式更新和插入数据]({{< relref "./docs/Developerguide/使用合并方式更新和插入数据.md >}}) + - [深层复制]({{< relref "./docs/Developerguide/深层复制.md >}}) + - [使用CREATE TABLE执行深层复制]({{< relref "./docs/Developerguide/使用CREATE TABLE执行深层复制.md >}}) + - [使用CREATE TABLE LIKE执行深层复制]({{< relref "./docs/Developerguide/使用CREATE TABLE LIKE执行深层复制.md >}}) + - [通过创建临时表并截断原始表来执行深层复制]({{< relref "./docs/Developerguide/通过创建临时表并截断原始表来执行深层复制.md >}}) + - [分析表]({{< relref "./docs/Developerguide/分析表.md >}}) + - [对表执行VACUUM]({{< relref "./docs/Developerguide/对表执行VACUUM.md >}}) + - [管理并发写入操作]({{< relref "./docs/Developerguide/管理并发写入操作.md >}}) + - [事务隔离说明]({{< relref "./docs/Developerguide/事务隔离说明.md >}}) + - [写入和读写操作]({{< relref "./docs/Developerguide/写入和读写操作.md >}}) + - [并发写入事务的潜在死锁情况]({{< relref "./docs/Developerguide/并发写入事务的潜在死锁情况.md >}}) + - [并发写入示例]({{< relref "./docs/Developerguide/并发写入示例.md >}}) + - [相同表的INSERT和DELETE并发]({{< relref "./docs/Developerguide/相同表的INSERT和DELETE并发.md >}}) + - [相同表的并发INSERT]({{< relref "./docs/Developerguide/相同表的并发INSERT.md >}}) + - [相同表的并发UPDATE]({{< relref "./docs/Developerguide/相同表的并发UPDATE.md >}}) + - [数据导入和查询的并发]({{< relref "./docs/Developerguide/数据导入和查询的并发.md >}}) + - [导出数据]({{< relref "./docs/Developerguide/导出数据.md >}}) + - [使用gs\_dump和gs\_dumpall命令导出数据]({{< relref "./docs/Developerguide/使用gs_dump和gs_dumpall命令导出数据.md >}}) + - [概述]({{< relref "./docs/Developerguide/概述 12.md >}}) + - [导出单个数据库]({{< relref "./docs/Developerguide/导出单个数据库.md >}}) + - [导出数据库]({{< relref "./docs/Developerguide/导出数据库.md >}}) + - [导出模式]({{< relref "./docs/Developerguide/导出模式.md >}}) + - [导出表]({{< relref "./docs/Developerguide/导出表.md >}}) + - [导出所有数据库]({{< relref "./docs/Developerguide/导出所有数据库.md >}}) + - [导出所有数据库]({{< relref "./docs/Developerguide/导出所有数据库 13.md >}}) + - [导出全局对象]({{< relref "./docs/Developerguide/导出全局对象.md >}}) + - [无权限角色导出数据]({{< relref "./docs/Developerguide/无权限角色导出数据.md >}}) + - [AI特性]({{< relref "./docs/Developerguide/AI特性.md >}}) + - [SQL执行时间预测特性]({{< relref "./docs/Developerguide/SQL执行时间预测特性.md >}}) + - [概述]({{< relref "./docs/Developerguide/概述 14.md >}}) + - [使用指南]({{< relref "./docs/Developerguide/使用指南.md >}}) + - [最佳实践]({{< relref "./docs/Developerguide/最佳实践.md >}}) + - [常见问题处理]({{< relref "./docs/Developerguide/常见问题处理.md >}}) + - [配置运行参数]({{< relref "./docs/Developerguide/配置运行参数.md >}}) + - [查看参数当前取值]({{< relref "./docs/Developerguide/查看参数当前取值.md >}}) + - [重设参数]({{< relref "./docs/Developerguide/重设参数.md >}}) + - [SQL参考]({{< relref "./docs/Developerguide/SQL参考.md >}}) + - [openGauss SQL]({{< relref "./docs/Developerguide/openGauss SQL.md >}}) + - [关键字]({{< relref "./docs/Developerguide/关键字.md >}}) + - [数据类型]({{< relref "./docs/Developerguide/数据类型.md >}}) + - [数值类型]({{< relref "./docs/Developerguide/数值类型.md >}}) + - [货币类型]({{< relref "./docs/Developerguide/货币类型.md >}}) + - [布尔类型]({{< relref "./docs/Developerguide/布尔类型.md >}}) + - [字符类型]({{< relref "./docs/Developerguide/字符类型.md >}}) + - [二进制类型]({{< relref "./docs/Developerguide/二进制类型.md >}}) + - [日期/时间类型]({{< relref "./docs/Developerguide/日期 时间类型.md >}}) + - [几何类型]({{< relref "./docs/Developerguide/几何类型.md >}}) + - [网络地址类型]({{< relref "./docs/Developerguide/网络地址类型.md >}}) + - [位串类型]({{< relref "./docs/Developerguide/位串类型.md >}}) + - [文本搜索类型]({{< relref "./docs/Developerguide/文本搜索类型.md >}}) + - [UUID类型]({{< relref "./docs/Developerguide/UUID类型.md >}}) + - [JSON类型]({{< relref "./docs/Developerguide/JSON类型.md >}}) + - [对象标识符类型]({{< relref "./docs/Developerguide/对象标识符类型.md >}}) + - [伪类型]({{< relref "./docs/Developerguide/伪类型.md >}}) + - [列存表支持的数据类型]({{< relref "./docs/Developerguide/列存表支持的数据类型.md >}}) + - [常量与宏]({{< relref "./docs/Developerguide/常量与宏.md >}}) + - [函数和操作符]({{< relref "./docs/Developerguide/函数和操作符.md >}}) + - [逻辑操作符]({{< relref "./docs/Developerguide/逻辑操作符.md >}}) + - [比较操作符]({{< relref "./docs/Developerguide/比较操作符.md >}}) + - [字符处理函数和操作符]({{< relref "./docs/Developerguide/字符处理函数和操作符.md >}}) + - [二进制字符串函数和操作符]({{< relref "./docs/Developerguide/二进制字符串函数和操作符.md >}}) + - [位串函数和操作符]({{< relref "./docs/Developerguide/位串函数和操作符.md >}}) + - [模式匹配操作符]({{< relref "./docs/Developerguide/模式匹配操作符.md >}}) + - [数字操作函数和操作符]({{< relref "./docs/Developerguide/数字操作函数和操作符.md >}}) + - [时间和日期处理函数和操作符]({{< relref "./docs/Developerguide/时间和日期处理函数和操作符.md >}}) + - [类型转换函数]({{< relref "./docs/Developerguide/类型转换函数.md >}}) + - [几何函数和操作符]({{< relref "./docs/Developerguide/几何函数和操作符.md >}}) + - [网络地址函数和操作符]({{< relref "./docs/Developerguide/网络地址函数和操作符.md >}}) + - [文本检索函数和操作符]({{< relref "./docs/Developerguide/文本检索函数和操作符.md >}}) + - [JSON函数]({{< relref "./docs/Developerguide/JSON函数.md >}}) + - [SEQUENCE函数]({{< relref "./docs/Developerguide/SEQUENCE函数.md >}}) + - [数组函数和操作符]({{< relref "./docs/Developerguide/数组函数和操作符.md >}}) + - [范围函数和操作符]({{< relref "./docs/Developerguide/范围函数和操作符.md >}}) + - [聚集函数]({{< relref "./docs/Developerguide/聚集函数.md >}}) + - [窗口函数]({{< relref "./docs/Developerguide/窗口函数.md >}}) + - [安全函数]({{< relref "./docs/Developerguide/安全函数.md >}}) + - [返回集合的函数]({{< relref "./docs/Developerguide/返回集合的函数.md >}}) + - [条件表达式函数]({{< relref "./docs/Developerguide/条件表达式函数.md >}}) + - [系统信息函数]({{< relref "./docs/Developerguide/系统信息函数.md >}}) + - [系统管理函数]({{< relref "./docs/Developerguide/系统管理函数.md >}}) + - [配置设置函数]({{< relref "./docs/Developerguide/配置设置函数.md >}}) + - [通用文件访问函数]({{< relref "./docs/Developerguide/通用文件访问函数.md >}}) + - [服务器信号函数]({{< relref "./docs/Developerguide/服务器信号函数.md >}}) + - [备份恢复控制函数]({{< relref "./docs/Developerguide/备份恢复控制函数.md >}}) + - [快照同步函数]({{< relref "./docs/Developerguide/快照同步函数.md >}}) + - [数据库对象函数]({{< relref "./docs/Developerguide/数据库对象函数.md >}}) + - [咨询锁函数]({{< relref "./docs/Developerguide/咨询锁函数.md >}}) + - [逻辑复制函数]({{< relref "./docs/Developerguide/逻辑复制函数.md >}}) + - [其它函数]({{< relref "./docs/Developerguide/其它函数.md >}}) + - [统计信息函数]({{< relref "./docs/Developerguide/统计信息函数.md >}}) + - [触发器函数]({{< relref "./docs/Developerguide/触发器函数.md >}}) + - [内部接口函数]({{< relref "./docs/Developerguide/内部接口函数.md >}}) + - [表达式]({{< relref "./docs/Developerguide/表达式.md >}}) + - [简单表达式]({{< relref "./docs/Developerguide/简单表达式.md >}}) + - [条件表达式]({{< relref "./docs/Developerguide/条件表达式.md >}}) + - [子查询表达式]({{< relref "./docs/Developerguide/子查询表达式.md >}}) + - [数组表达式]({{< relref "./docs/Developerguide/数组表达式.md >}}) + - [行表达式]({{< relref "./docs/Developerguide/行表达式.md >}}) + - [类型转换]({{< relref "./docs/Developerguide/类型转换.md >}}) + - [概述]({{< relref "./docs/Developerguide/概述 15.md >}}) + - [操作符]({{< relref "./docs/Developerguide/操作符.md >}}) + - [函数]({{< relref "./docs/Developerguide/函数.md >}}) + - [值存储]({{< relref "./docs/Developerguide/值存储.md >}}) + - [UNION,CASE和相关构造]({{< relref "./docs/Developerguide/UNION CASE和相关构造.md >}}) + - [全文检索]({{< relref "./docs/Developerguide/全文检索.md >}}) + - [介绍]({{< relref "./docs/Developerguide/介绍.md >}}) + - [全文检索概述]({{< relref "./docs/Developerguide/全文检索概述.md >}}) + - [文档概念]({{< relref "./docs/Developerguide/文档概念.md >}}) + - [基本文本匹配]({{< relref "./docs/Developerguide/基本文本匹配.md >}}) + - [分词器]({{< relref "./docs/Developerguide/分词器.md >}}) + - [表和索引]({{< relref "./docs/Developerguide/表和索引.md >}}) + - [搜索表]({{< relref "./docs/Developerguide/搜索表.md >}}) + - [创建索引]({{< relref "./docs/Developerguide/创建索引.md >}}) + - [索引使用约束]({{< relref "./docs/Developerguide/索引使用约束.md >}}) + - [控制文本搜索]({{< relref "./docs/Developerguide/控制文本搜索.md >}}) + - [解析文档]({{< relref "./docs/Developerguide/解析文档.md >}}) + - [解析查询]({{< relref "./docs/Developerguide/解析查询.md >}}) + - [排序查询结果]({{< relref "./docs/Developerguide/排序查询结果.md >}}) + - [高亮搜索结果]({{< relref "./docs/Developerguide/高亮搜索结果.md >}}) + - [附加功能]({{< relref "./docs/Developerguide/附加功能.md >}}) + - [处理tsvector]({{< relref "./docs/Developerguide/处理tsvector.md >}}) + - [处理查询]({{< relref "./docs/Developerguide/处理查询.md >}}) + - [查询重写]({{< relref "./docs/Developerguide/查询重写.md >}}) + - [收集文献统计]({{< relref "./docs/Developerguide/收集文献统计.md >}}) + - [解析器]({{< relref "./docs/Developerguide/解析器.md >}}) + - [词典]({{< relref "./docs/Developerguide/词典.md >}}) + - [词典概述]({{< relref "./docs/Developerguide/词典概述.md >}}) + - [停用词]({{< relref "./docs/Developerguide/停用词.md >}}) + - [Simple词典]({{< relref "./docs/Developerguide/Simple词典.md >}}) + - [Synonym词典]({{< relref "./docs/Developerguide/Synonym词典.md >}}) + - [Thesaurus词典]({{< relref "./docs/Developerguide/Thesaurus词典.md >}}) + - [Ispell词典]({{< relref "./docs/Developerguide/Ispell词典.md >}}) + - [Snowball词典]({{< relref "./docs/Developerguide/Snowball词典.md >}}) + - [配置示例]({{< relref "./docs/Developerguide/配置示例.md >}}) + - [测试和调试文本搜索]({{< relref "./docs/Developerguide/测试和调试文本搜索.md >}}) + - [分词器测试]({{< relref "./docs/Developerguide/分词器测试.md >}}) + - [解析器测试]({{< relref "./docs/Developerguide/解析器测试.md >}}) + - [词典测试]({{< relref "./docs/Developerguide/词典测试.md >}}) + - [限制约束]({{< relref "./docs/Developerguide/限制约束.md >}}) + - [系统操作]({{< relref "./docs/Developerguide/系统操作.md >}}) + - [事务控制]({{< relref "./docs/Developerguide/事务控制.md >}}) + - [DDL语法一览表]({{< relref "./docs/Developerguide/DDL语法一览表.md >}}) + - [DML语法一览表]({{< relref "./docs/Developerguide/DML语法一览表.md >}}) + - [DCL语法一览表]({{< relref "./docs/Developerguide/DCL语法一览表.md >}}) + - [SQL语法]({{< relref "./docs/Developerguide/SQL语法.md >}}) + - [ABORT]({{< relref "./docs/Developerguide/ABORT.md >}}) + - [ALTER DATABASE]({{< relref "./docs/Developerguide/ALTER DATABASE.md >}}) + - [ALTER DATA SOURCE]({{< relref "./docs/Developerguide/ALTER DATA SOURCE.md >}}) + - [ALTER DEFAULT PRIVILEGES]({{< relref "./docs/Developerguide/ALTER DEFAULT PRIVILEGES.md >}}) + - [ALTER DIRECTORY]({{< relref "./docs/Developerguide/ALTER DIRECTORY.md >}}) + - [ALTER FUNCTION]({{< relref "./docs/Developerguide/ALTER FUNCTION.md >}}) + - [ALTER GROUP]({{< relref "./docs/Developerguide/ALTER GROUP.md >}}) + - [ALTER INDEX]({{< relref "./docs/Developerguide/ALTER INDEX.md >}}) + - [ALTER LARGE OBJECT]({{< relref "./docs/Developerguide/ALTER LARGE OBJECT.md >}}) + - [ALTER ROLE]({{< relref "./docs/Developerguide/ALTER ROLE.md >}}) + - [ALTER ROW LEVEL SECURITY POLICY]({{< relref "./docs/Developerguide/ALTER ROW LEVEL SECURITY POLICY.md >}}) + - [ALTER SCHEMA]({{< relref "./docs/Developerguide/ALTER SCHEMA.md >}}) + - [ALTER SEQUENCE]({{< relref "./docs/Developerguide/ALTER SEQUENCE.md >}}) + - [ALTER SESSION]({{< relref "./docs/Developerguide/ALTER SESSION.md >}}) + - [ALTER SYSTEM KILL SESSION]({{< relref "./docs/Developerguide/ALTER SYSTEM KILL SESSION.md >}}) + - [ALTER TABLE]({{< relref "./docs/Developerguide/ALTER TABLE.md >}}) + - [ALTER TABLE PARTITION]({{< relref "./docs/Developerguide/ALTER TABLE PARTITION.md >}}) + - [ALTER TABLESPACE]({{< relref "./docs/Developerguide/ALTER TABLESPACE.md >}}) + - [ALTER TEXT SEARCH CONFIGURATION]({{< relref "./docs/Developerguide/ALTER TEXT SEARCH CONFIGURATION.md >}}) + - [ALTER TEXT SEARCH DICTIONARY]({{< relref "./docs/Developerguide/ALTER TEXT SEARCH DICTIONARY.md >}}) + - [ALTER TRIGGER]({{< relref "./docs/Developerguide/ALTER TRIGGER.md >}}) + - [ALTER TYPE]({{< relref "./docs/Developerguide/ALTER TYPE.md >}}) + - [ALTER USER]({{< relref "./docs/Developerguide/ALTER USER.md >}}) + - [ALTER VIEW]({{< relref "./docs/Developerguide/ALTER VIEW.md >}}) + - [ANALYZE | ANALYSE]({{< relref "./docs/Developerguide/ANALYZE ANALYSE.md >}}) + - [BEGIN]({{< relref "./docs/Developerguide/BEGIN.md >}}) + - [CALL]({{< relref "./docs/Developerguide/CALL.md >}}) + - [CHECKPOINT]({{< relref "./docs/Developerguide/CHECKPOINT.md >}}) + - [CLOSE]({{< relref "./docs/Developerguide/CLOSE.md >}}) + - [CLUSTER]({{< relref "./docs/Developerguide/CLUSTER.md >}}) + - [COMMENT]({{< relref "./docs/Developerguide/COMMENT.md >}}) + - [COMMIT | END]({{< relref "./docs/Developerguide/COMMIT END.md >}}) + - [COMMIT PREPARED]({{< relref "./docs/Developerguide/COMMIT PREPARED.md >}}) + - [COPY]({{< relref "./docs/Developerguide/COPY.md >}}) + - [CREATE DATABASE]({{< relref "./docs/Developerguide/CREATE DATABASE.md >}}) + - [CREATE DATA SOURCE]({{< relref "./docs/Developerguide/CREATE DATA SOURCE.md >}}) + - [CREATE DIRECTORY]({{< relref "./docs/Developerguide/CREATE DIRECTORY.md >}}) + - [CREATE FUNCTION]({{< relref "./docs/Developerguide/CREATE FUNCTION.md >}}) + - [CREATE GROUP]({{< relref "./docs/Developerguide/CREATE GROUP.md >}}) + - [CREATE INDEX]({{< relref "./docs/Developerguide/CREATE INDEX.md >}}) + - [CREATE ROW LEVLEL SECURITY POLICY]({{< relref "./docs/Developerguide/CREATE ROW LEVLEL SECURITY POLICY.md >}}) + - [CREATE PROCEDURE]({{< relref "./docs/Developerguide/CREATE PROCEDURE.md >}}) + - [CREATE ROLE]({{< relref "./docs/Developerguide/CREATE ROLE.md >}}) + - [CREATE SCHEMA]({{< relref "./docs/Developerguide/CREATE SCHEMA.md >}}) + - [CREATE SEQUENCE]({{< relref "./docs/Developerguide/CREATE SEQUENCE.md >}}) + - [CREATE TABLE]({{< relref "./docs/Developerguide/CREATE TABLE.md >}}) + - [CREATE TABLE AS]({{< relref "./docs/Developerguide/CREATE TABLE AS.md >}}) + - [CREATE TABLE PARTITION]({{< relref "./docs/Developerguide/CREATE TABLE PARTITION.md >}}) + - [CREATE TABLESPACE]({{< relref "./docs/Developerguide/CREATE TABLESPACE.md >}}) + - [CREATE TEXT SEARCH CONFIGURATION]({{< relref "./docs/Developerguide/CREATE TEXT SEARCH CONFIGURATION.md >}}) + - [CREATE TEXT SEARCH DICTIONARY]({{< relref "./docs/Developerguide/CREATE TEXT SEARCH DICTIONARY.md >}}) + - [CREATE TRIGGER]({{< relref "./docs/Developerguide/CREATE TRIGGER.md >}}) + - [CREATE TYPE]({{< relref "./docs/Developerguide/CREATE TYPE.md >}}) + - [CREATE USER]({{< relref "./docs/Developerguide/CREATE USER.md >}}) + - [CREATE VIEW]({{< relref "./docs/Developerguide/CREATE VIEW.md >}}) + - [CURSOR]({{< relref "./docs/Developerguide/CURSOR.md >}}) + - [DEALLOCATE]({{< relref "./docs/Developerguide/DEALLOCATE.md >}}) + - [DECLARE]({{< relref "./docs/Developerguide/DECLARE.md >}}) + - [DELETE]({{< relref "./docs/Developerguide/DELETE.md >}}) + - [DO]({{< relref "./docs/Developerguide/DO.md >}}) + - [DROP DATABASE]({{< relref "./docs/Developerguide/DROP DATABASE.md >}}) + - [DROP DATA SOURCE]({{< relref "./docs/Developerguide/DROP DATA SOURCE.md >}}) + - [DROP DIRECTORY]({{< relref "./docs/Developerguide/DROP DIRECTORY.md >}}) + - [DROP FUNCTION]({{< relref "./docs/Developerguide/DROP FUNCTION.md >}}) + - [DROP GROUP]({{< relref "./docs/Developerguide/DROP GROUP.md >}}) + - [DROP INDEX]({{< relref "./docs/Developerguide/DROP INDEX.md >}}) + - [DROP OWNED]({{< relref "./docs/Developerguide/DROP OWNED.md >}}) + - [DROP ROW LEVEL SECURITY POLICY]({{< relref "./docs/Developerguide/DROP ROW LEVEL SECURITY POLICY.md >}}) + - [DROP PROCEDURE]({{< relref "./docs/Developerguide/DROP PROCEDURE.md >}}) + - [DROP ROLE]({{< relref "./docs/Developerguide/DROP ROLE.md >}}) + - [DROP SCHEMA]({{< relref "./docs/Developerguide/DROP SCHEMA.md >}}) + [DROP SEQUENCE]({{< relref "./docs/Developerguide/DROP SEQUENCE.md >}}) + - [DROP TABLE]({{< relref "./docs/Developerguide/DROP TABLE.md >}}) + - [DROP TABLESPACE]({{< relref "./docs/Developerguide/DROP TABLESPACE.md >}}) + - [DROP TEXT SEARCH CONFIGURATION]({{< relref "./docs/Developerguide/DROP TEXT SEARCH CONFIGURATION.md >}}) + - [DROP TEXT SEARCH DICTIONARY]({{< relref "./docs/Developerguide/DROP TEXT SEARCH DICTIONARY.md >}}) + - [DROP TRIGGER]({{< relref "./docs/Developerguide/DROP TRIGGER.md >}}) + - [DROP TYPE]({{< relref "./docs/Developerguide/DROP TYPE.md >}}) + - [DROP USER]({{< relref "./docs/Developerguide/DROP USER.md >}}) + - [DROP VIEW]({{< relref "./docs/Developerguide/DROP VIEW.md >}}) + - [EXECUTE]({{< relref "./docs/Developerguide/EXECUTE.md >}}) + - [EXPLAIN]({{< relref "./docs/Developerguide/EXPLAIN.md >}}) + - [EXPLAIN PLAN]({{< relref "./docs/Developerguide/EXPLAIN PLAN.md >}}) + - [FETCH]({{< relref "./docs/Developerguide/FETCH.md >}}) + - [GRANT]({{< relref "./docs/Developerguide/GRANT.md >}}) + - [INSERT]({{< relref "./docs/Developerguide/INSERT.md >}}) + - [LOCK]({{< relref "./docs/Developerguide/LOCK.md >}}) + - [MOVE]({{< relref "./docs/Developerguide/MOVE.md >}}) + - [MERGE INTO]({{< relref "./docs/Developerguide/MERGE INTO.md >}}) + - [PREPARE]({{< relref "./docs/Developerguide/PREPARE.md >}}) + - [PREPARE TRANSACTION]({{< relref "./docs/Developerguide/PREPARE TRANSACTION.md >}}) + - [REASSIGN OWNED]({{< relref "./docs/Developerguide/REASSIGN OWNED.md >}}) + - [REINDEX]({{< relref "./docs/Developerguide/REINDEX.md >}}) + - [RELEASE SAVEPOINT]({{< relref "./docs/Developerguide/RELEASE SAVEPOINT.md >}}) + - [RESET]({{< relref "./docs/Developerguide/RESET.md >}}) + - [REVOKE]({{< relref "./docs/Developerguide/REVOKE.md >}}) + - [ROLLBACK]({{< relref "./docs/Developerguide/ROLLBACK.md >}}) + - [ROLLBACK PREPARED]({{< relref "./docs/Developerguide/ROLLBACK PREPARED.md >}}) + - [ROLLBACK TO SAVEPOINT]({{< relref "./docs/Developerguide/ROLLBACK TO SAVEPOINT.md >}}) + - [SAVEPOINT]({{< relref "./docs/Developerguide/SAVEPOINT.md >}}) + - [SELECT]({{< relref "./docs/Developerguide/SELECT.md >}}) + - [SELECT INTO]({{< relref "./docs/Developerguide/SELECT INTO.md >}}) + - [SET]({{< relref "./docs/Developerguide/SET.md >}}) + - [SET CONSTRAINTS]({{< relref "./docs/Developerguide/SET CONSTRAINTS.md >}}) + - [SET ROLE]({{< relref "./docs/Developerguide/SET ROLE.md >}}) + - [SET SESSION AUTHORIZATION]({{< relref "./docs/Developerguide/SET SESSION AUTHORIZATION.md >}}) + - [SET TRANSACTION]({{< relref "./docs/Developerguide/SET TRANSACTION.md >}}) + - [SHOW]({{< relref "./docs/Developerguide/SHOW.md >}}) + - [START TRANSACTION]({{< relref "./docs/Developerguide/START TRANSACTION.md >}}) + - [TRUNCATE]({{< relref "./docs/Developerguide/TRUNCATE.md >}}) + - [UPDATE]({{< relref "./docs/Developerguide/UPDATE.md >}}) + - [VACUUM]({{< relref "./docs/Developerguide/VACUUM.md >}}) + - [VALUES]({{< relref "./docs/Developerguide/VALUES.md >}}) + - [附录]({{< relref "./docs/Developerguide/附录 16.md >}}) + - [GIN索引]({{< relref "./docs/Developerguide/GIN索引.md >}}) + - [介绍]({{< relref "./docs/Developerguide/介绍 17.md >}}) + - [扩展性]({{< relref "./docs/Developerguide/扩展性.md >}}) + - [实现]({{< relref "./docs/Developerguide/实现.md >}}) + - [GIN提示与技巧]({{< relref "./docs/Developerguide/GIN提示与技巧.md >}}) + - [扩展函数]({{< relref "./docs/Developerguide/扩展函数.md >}}) + - [扩展语法]({{< relref "./docs/Developerguide/扩展语法.md >}}) + - [系统表和系统视图]({{< relref "./docs/Developerguide/系统表和系统视图.md >}}) + - [系统表和系统视图概述]({{< relref "./docs/Developerguide/系统表和系统视图概述.md >}}) + - [系统表]({{< relref "./docs/Developerguide/系统表.md >}}) + - [GS\_OPT\_MODEL]({{< relref "./docs/Developerguide/GS_OPT_MODEL.md >}}) + - [GS\_WLM\_INSTANCE\_HISTORY]({{< relref "./docs/Developerguide/GS_WLM_INSTANCE_HISTORY.md >}}) + - [GS\_WLM\_OPERATOR\_INFO]({{< relref "./docs/Developerguide/GS_WLM_OPERATOR_INFO.md >}}) + - [GS\_WLM\_PLAN\_ENCODING\_TABLE]({{< relref "./docs/Developerguide/GS_WLM_PLAN_ENCODING_TABLE.md >}}) + - [GS\_WLM\_PLAN\_OPERATOR\_INFO]({{< relref "./docs/Developerguide/GS_WLM_PLAN_OPERATOR_INFO.md >}}) + - [GS\_WLM\_SESSION\_QUERY\_INFO\_ALL]({{< relref "./docs/Developerguide/GS_WLM_SESSION_QUERY_INFO_ALL.md >}}) + - [GS\_WLM\_USER\_RESOURCE\_HISTORY]({{< relref "./docs/Developerguide/GS_WLM_USER_RESOURCE_HISTORY.md >}}) + - [PG\_AGGREGATE]({{< relref "./docs/Developerguide/PG_AGGREGATE.md >}}) + - [PG\_AM]({{< relref "./docs/Developerguide/PG_AM.md >}}) + - [PG\_AMOP]({{< relref "./docs/Developerguide/PG_AMOP.md >}}) + - [PG\_AMPROC]({{< relref "./docs/Developerguide/PG_AMPROC.md >}}) + - [PG\_APP\_WORKLOADGROUP\_MAPPING]({{< relref "./docs/Developerguide/PG_APP_WORKLOADGROUP_MAPPING.md >}}) + - [PG\_ATTRDEF]({{< relref "./docs/Developerguide/PG_ATTRDEF.md >}}) + - [PG\_ATTRIBUTE]({{< relref "./docs/Developerguide/PG_ATTRIBUTE.md >}}) + - [PG\_AUTHID]({{< relref "./docs/Developerguide/PG_AUTHID.md >}}) + - [PG\_AUTH\_HISTORY]({{< relref "./docs/Developerguide/PG_AUTH_HISTORY.md >}}) + - [PG\_AUTH\_MEMBERS]({{< relref "./docs/Developerguide/PG_AUTH_MEMBERS.md >}}) + - [PG\_CAST]({{< relref "./docs/Developerguide/PG_CAST.md >}}) + - [PG\_CLASS]({{< relref "./docs/Developerguide/PG_CLASS.md >}}) + - [PG\_COLLATION]({{< relref "./docs/Developerguide/PG_COLLATION.md >}}) + - [PG\_CONSTRAINT]({{< relref "./docs/Developerguide/PG_CONSTRAINT.md >}}) + - [PG\_CONVERSION]({{< relref "./docs/Developerguide/PG_CONVERSION.md >}}) + - [PG\_DATABASE]({{< relref "./docs/Developerguide/PG_DATABASE.md >}}) + - [PG\_DB\_ROLE\_SETTING]({{< relref "./docs/Developerguide/PG_DB_ROLE_SETTING.md >}}) + - [PG\_DEFAULT\_ACL]({{< relref "./docs/Developerguide/PG_DEFAULT_ACL.md >}}) + - [PG\_DEPEND]({{< relref "./docs/Developerguide/PG_DEPEND.md >}}) + - [PG\_DESCRIPTION]({{< relref "./docs/Developerguide/PG_DESCRIPTION.md >}}) + - [PG\_DIRECTORY]({{< relref "./docs/Developerguide/PG_DIRECTORY.md >}}) + - [PG\_ENUM]({{< relref "./docs/Developerguide/PG_ENUM.md >}}) + - [PG\_EXTENSION]({{< relref "./docs/Developerguide/PG_EXTENSION.md >}}) + - [PG\_EXTENSION\_DATA\_SOURCE]({{< relref "./docs/Developerguide/PG_EXTENSION_DATA_SOURCE.md >}}) + - [PG\_FOREIGN\_DATA\_WRAPPER]({{< relref "./docs/Developerguide/PG_FOREIGN_DATA_WRAPPER.md >}}) + - [PG\_FOREIGN\_SERVER]({{< relref "./docs/Developerguide/PG_FOREIGN_SERVER.md >}}) + - [PG\_FOREIGN\_TABLE]({{< relref "./docs/Developerguide/PG_FOREIGN_TABLE.md >}}) + - [PG\_INDEX]({{< relref "./docs/Developerguide/PG_INDEX.md >}}) + - [PG\_INHERITS]({{< relref "./docs/Developerguide/PG_INHERITS.md >}}) + - [PG\_JOB]({{< relref "./docs/Developerguide/PG_JOB.md >}}) + - [PG\_JOB\_PROC]({{< relref "./docs/Developerguide/PG_JOB_PROC.md >}}) + - [PG\_LANGUAGE]({{< relref "./docs/Developerguide/PG_LANGUAGE.md >}}) + - [PG\_LARGEOBJECT]({{< relref "./docs/Developerguide/PG_LARGEOBJECT.md >}}) + - [PG\_LARGEOBJECT\_METADATA]({{< relref "./docs/Developerguide/PG_LARGEOBJECT_METADATA.md >}}) + - [PG\_NAMESPACE]({{< relref "./docs/Developerguide/PG_NAMESPACE.md >}}) + - [PG\_OBJECT]({{< relref "./docs/Developerguide/PG_OBJECT.md >}}) + - [PG\_OPCLASS]({{< relref "./docs/Developerguide/PG_OPCLASS.md >}}) + - [PG\_OPERATOR]({{< relref "./docs/Developerguide/PG_OPERATOR.md >}}) + - [PG\_OPFAMILY]({{< relref "./docs/Developerguide/PG_OPFAMILY.md >}}) + - [PG\_PARTITION]({{< relref "./docs/Developerguide/PG_PARTITION.md >}}) + - [PG\_PLTEMPLATE]({{< relref "./docs/Developerguide/PG_PLTEMPLATE.md >}}) + - [PG\_PROC]({{< relref "./docs/Developerguide/PG_PROC.md >}}) + - [PG\_RANGE]({{< relref "./docs/Developerguide/PG_RANGE.md >}}) + - [PG\_RESOURCE\_POOL]({{< relref "./docs/Developerguide/PG_RESOURCE_POOL.md >}}) + - [PG\_REWRITE]({{< relref "./docs/Developerguide/PG_REWRITE.md >}}) + - [PG\_RLSPOLICY]({{< relref "./docs/Developerguide/PG_RLSPOLICY.md >}}) + - [PG\_SECLABEL]({{< relref "./docs/Developerguide/PG_SECLABEL.md >}}) + - [PG\_SHDEPEND]({{< relref "./docs/Developerguide/PG_SHDEPEND.md >}}) + - [PG\_SHDESCRIPTION]({{< relref "./docs/Developerguide/PG_SHDESCRIPTION.md >}}) + - [PG\_SHSECLABEL]({{< relref "./docs/Developerguide/PG_SHSECLABEL.md >}}) + - [PG\_STATISTIC]({{< relref "./docs/Developerguide/PG_STATISTIC.md >}}) + - [PG\_STATISTIC\_EXT]({{< relref "./docs/Developerguide/PG_STATISTIC_EXT.md >}}) + - [PG\_TABLESPACE]({{< relref "./docs/Developerguide/PG_TABLESPACE.md >}}) + - [PG\_TRIGGER]({{< relref "./docs/Developerguide/PG_TRIGGER.md >}}) + - [PG\_TS\_CONFIG]({{< relref "./docs/Developerguide/PG_TS_CONFIG.md >}}) + - [PG\_TS\_CONFIG\_MAP]({{< relref "./docs/Developerguide/PG_TS_CONFIG_MAP.md >}}) + - [PG\_TS\_DICT]({{< relref "./docs/Developerguide/PG_TS_DICT.md >}}) + - [PG\_TS\_PARSER]({{< relref "./docs/Developerguide/PG_TS_PARSER.md >}}) + - [PG\_TS\_TEMPLATE]({{< relref "./docs/Developerguide/PG_TS_TEMPLATE.md >}}) + - [PG\_TYPE]({{< relref "./docs/Developerguide/PG_TYPE.md >}}) + - [PG\_USER\_MAPPING]({{< relref "./docs/Developerguide/PG_USER_MAPPING.md >}}) + - [PG\_USER\_STATUS]({{< relref "./docs/Developerguide/PG_USER_STATUS.md >}}) + - [PG\_WORKLOAD\_GROUP]({{< relref "./docs/Developerguide/PG_WORKLOAD_GROUP.md >}}) + - [PLAN\_TABLE\_DATA]({{< relref "./docs/Developerguide/PLAN_TABLE_DATA.md >}}) + - [系统视图]({{< relref "./docs/Developerguide/系统视图.md >}}) + - [GET\_GTM\_LITE\_STATUS]({{< relref "./docs/Developerguide/GET_GTM_LITE_STATUS.md >}}) + - [GS\_SESSION\_CPU\_STATISTICS]({{< relref "./docs/Developerguide/GS_SESSION_CPU_STATISTICS.md >}}) + - [GS\_SESSION\_MEMORY\_STATISTICS]({{< relref "./docs/Developerguide/GS_SESSION_MEMORY_STATISTICS.md >}}) + - [GS\_SQL\_COUNT]({{< relref "./docs/Developerguide/GS_SQL_COUNT.md >}}) + - [GS\_WLM\_OPERATOR\_HISTORY]({{< relref "./docs/Developerguide/GS_WLM_OPERATOR_HISTORY.md >}}) + - [GS\_WLM\_OPERATOR\_STATISTICS]({{< relref "./docs/Developerguide/GS_WLM_OPERATOR_STATISTICS.md >}}) + - [GS\_WLM\_PLAN\_OPERATOR\_HISTORY]({{< relref "./docs/Developerguide/GS_WLM_PLAN_OPERATOR_HISTORY.md >}}) + - [GS\_WLM\_REBUILD\_USER\_RESOURCE\_POOL]({{< relref "./docs/Developerguide/GS_WLM_REBUILD_USER_RESOURCE_POOL.md >}}) + - [GS\_WLM\_RESOURCE\_POOL]({{< relref "./docs/Developerguide/GS_WLM_RESOURCE_POOL.md >}}) + - [GS\_WLM\_SESSION\_HISTORY]({{< relref "./docs/Developerguide/GS_WLM_SESSION_HISTORY.md >}}) + - [GS\_WLM\_SESSION\_INFO\_ALL]({{< relref "./docs/Developerguide/GS_WLM_SESSION_INFO_ALL.md >}}) + - [GS\_WLM\_USER\_INFO]({{< relref "./docs/Developerguide/GS_WLM_USER_INFO.md >}}) + - [GS\_WLM\_SESSION\_STATISTICS]({{< relref "./docs/Developerguide/GS_WLM_SESSION_STATISTICS.md >}}) + - [GS\_STAT\_DB\_CU]({{< relref "./docs/Developerguide/GS_STAT_DB_CU.md >}}) + - [GS\_STAT\_SESSION\_CU]({{< relref "./docs/Developerguide/GS_STAT_SESSION_CU.md >}}) + - [MPP\_TABLES]({{< relref "./docs/Developerguide/MPP_TABLES.md >}}) + - [PG\_AVAILABLE\_EXTENSION\_VERSIONS]({{< relref "./docs/Developerguide/PG_AVAILABLE_EXTENSION_VERSIONS.md >}}) + - [PG\_AVAILABLE\_EXTENSIONS]({{< relref "./docs/Developerguide/PG_AVAILABLE_EXTENSIONS.md >}}) + - [PG\_CURSORS]({{< relref "./docs/Developerguide/PG_CURSORS.md >}}) + - [PG\_EXT\_STATS]({{< relref "./docs/Developerguide/PG_EXT_STATS.md >}}) + - [PG\_GET\_INVALID\_BACKENDS]({{< relref "./docs/Developerguide/PG_GET_INVALID_BACKENDS.md >}}) + - [PG\_GET\_SENDERS\_CATCHUP\_TIME]({{< relref "./docs/Developerguide/PG_GET_SENDERS_CATCHUP_TIME.md >}}) + - [PG\_GROUP]({{< relref "./docs/Developerguide/PG_GROUP.md >}}) + - [PG\_INDEXES]({{< relref "./docs/Developerguide/PG_INDEXES.md >}}) + - [PG\_LOCKS]({{< relref "./docs/Developerguide/PG_LOCKS.md >}}) + - [PG\_NODE\_ENV]({{< relref "./docs/Developerguide/PG_NODE_ENV.md >}}) + - [PG\_OS\_THREADS]({{< relref "./docs/Developerguide/PG_OS_THREADS.md >}}) + - [PG\_PREPARED\_STATEMENTS]({{< relref "./docs/Developerguide/PG_PREPARED_STATEMENTS.md >}}) + - [PG\_PREPARED\_XACTS]({{< relref "./docs/Developerguide/PG_PREPARED_XACTS.md >}}) + - [PG\_REPLICATION\_SLOTS]({{< relref "./docs/Developerguide/PG_REPLICATION_SLOTS.md >}}) + - [PG\_RLSPOLICIES]({{< relref "./docs/Developerguide/PG_RLSPOLICIES.md >}}) + - [PG\_ROLES]({{< relref "./docs/Developerguide/PG_ROLES.md >}}) + - [PG\_RULES]({{< relref "./docs/Developerguide/PG_RULES.md >}}) + - [PG\_RUNNING\_XACTS]({{< relref "./docs/Developerguide/PG_RUNNING_XACTS.md >}}) + - [PG\_SECLABELS]({{< relref "./docs/Developerguide/PG_SECLABELS.md >}}) + - [PG\_SESSION\_WLMSTAT]({{< relref "./docs/Developerguide/PG_SESSION_WLMSTAT.md >}}) + - [PG\_SESSION\_IOSTAT]({{< relref "./docs/Developerguide/PG_SESSION_IOSTAT.md >}}) + - [PG\_SETTINGS]({{< relref "./docs/Developerguide/PG_SETTINGS.md >}}) + - [PG\_SHADOW]({{< relref "./docs/Developerguide/PG_SHADOW.md >}}) + - [PG\_STATS]({{< relref "./docs/Developerguide/PG_STATS.md >}}) + - [PG\_STAT\_ACTIVITY]({{< relref "./docs/Developerguide/PG_STAT_ACTIVITY.md >}}) + - [PG\_STAT\_ALL\_INDEXES]({{< relref "./docs/Developerguide/PG_STAT_ALL_INDEXES.md >}}) + - [PG\_STAT\_ALL\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_ALL_TABLES.md >}}) + - [PG\_STAT\_BAD\_BLOCK]({{< relref "./docs/Developerguide/PG_STAT_BAD_BLOCK.md >}}) + - [PG\_STAT\_BGWRITER]({{< relref "./docs/Developerguide/PG_STAT_BGWRITER.md >}}) + - [PG\_STAT\_DATABASE]({{< relref "./docs/Developerguide/PG_STAT_DATABASE.md >}}) + - [PG\_STAT\_DATABASE\_CONFLICTS]({{< relref "./docs/Developerguide/PG_STAT_DATABASE_CONFLICTS.md >}}) + - [PG\_STAT\_USER\_FUNCTIONS]({{< relref "./docs/Developerguide/PG_STAT_USER_FUNCTIONS.md >}}) + - [PG\_STAT\_USER\_INDEXES]({{< relref "./docs/Developerguide/PG_STAT_USER_INDEXES.md >}}) + - [PG\_STAT\_USER\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_USER_TABLES.md >}}) + - [PG\_STAT\_REPLICATION]({{< relref "./docs/Developerguide/PG_STAT_REPLICATION.md >}}) + - [PG\_STAT\_SYS\_INDEXES]({{< relref "./docs/Developerguide/PG_STAT_SYS_INDEXES.md >}}) + - [PG\_STAT\_SYS\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_SYS_TABLES.md >}}) + - [PG\_STAT\_XACT\_ALL\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_XACT_ALL_TABLES.md >}}) + - [PG\_STAT\_XACT\_SYS\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_XACT_SYS_TABLES.md >}}) + - [PG\_STAT\_XACT\_USER\_FUNCTIONS]({{< relref "./docs/Developerguide/PG_STAT_XACT_USER_FUNCTIONS.md >}}) + - [PG\_STAT\_XACT\_USER\_TABLES]({{< relref "./docs/Developerguide/PG_STAT_XACT_USER_TABLES.md >}}) + - [PG\_STATIO\_ALL\_INDEXES]({{< relref "./docs/Developerguide/PG_STATIO_ALL_INDEXES.md >}}) + - [PG\_STATIO\_ALL\_SEQUENCES]({{< relref "./docs/Developerguide/PG_STATIO_ALL_SEQUENCES.md >}}) + - [PG\_STATIO\_ALL\_TABLES]({{< relref "./docs/Developerguide/PG_STATIO_ALL_TABLES.md >}}) + - [PG\_STATIO\_SYS\_INDEXES]({{< relref "./docs/Developerguide/PG_STATIO_SYS_INDEXES.md >}}) + - [PG\_STATIO\_SYS\_SEQUENCES]({{< relref "./docs/Developerguide/PG_STATIO_SYS_SEQUENCES.md >}}) + - [PG\_STATIO\_SYS\_TABLES]({{< relref "./docs/Developerguide/PG_STATIO_SYS_TABLES.md >}}) + - [PG\_STATIO\_USER\_INDEXES]({{< relref "./docs/Developerguide/PG_STATIO_USER_INDEXES.md >}}) + - [PG\_STATIO\_USER\_SEQUENCES]({{< relref "./docs/Developerguide/PG_STATIO_USER_SEQUENCES.md >}}) + - [PG\_STATIO\_USER\_TABLES]({{< relref "./docs/Developerguide/PG_STATIO_USER_TABLES.md >}}) + - [PG\_THREAD\_WAIT\_STATUS]({{< relref "./docs/Developerguide/PG_THREAD_WAIT_STATUS.md >}}) + - [PG\_TABLES]({{< relref "./docs/Developerguide/PG_TABLES.md >}}) + - [PG\_TDE\_INFO]({{< relref "./docs/Developerguide/PG_TDE_INFO.md >}}) + - [PG\_TIMEZONE\_NAMES]({{< relref "./docs/Developerguide/PG_TIMEZONE_NAMES.md >}}) + - [PG\_TOTAL\_MEMORY\_DETAIL]({{< relref "./docs/Developerguide/PG_TOTAL_MEMORY_DETAIL.md >}}) + - [PG\_TOTAL\_USER\_RESOURCE\_INFO]({{< relref "./docs/Developerguide/PG_TOTAL_USER_RESOURCE_INFO.md >}}) + - [PG\_USER]({{< relref "./docs/Developerguide/PG_USER.md >}}) + - [PG\_USER\_MAPPINGS]({{< relref "./docs/Developerguide/PG_USER_MAPPINGS.md >}}) + - [PG\_VIEWS]({{< relref "./docs/Developerguide/PG_VIEWS.md >}}) + - [PG\_WLM\_STATISTICS]({{< relref "./docs/Developerguide/PG_WLM_STATISTICS.md >}}) + - [PLAN\_TABLE]({{< relref "./docs/Developerguide/PLAN_TABLE.md >}}) + - [GS\_FILE\_STAT]({{< relref "./docs/Developerguide/GS_FILE_STAT.md >}}) + - [GS\_OS\_RUN\_INFO]({{< relref "./docs/Developerguide/GS_OS_RUN_INFO.md >}}) + - [GS\_REDO\_STAT]({{< relref "./docs/Developerguide/GS_REDO_STAT.md >}}) + - [GS\_SESSION\_MEMORY]({{< relref "./docs/Developerguide/GS_SESSION_MEMORY.md >}}) + - [GS\_SESSION\_MEMORY\_CONTEXT]({{< relref "./docs/Developerguide/GS_SESSION_MEMORY_CONTEXT.md >}}) + - [GS\_SESSION\_MEMORY\_DETAIL]({{< relref "./docs/Developerguide/GS_SESSION_MEMORY_DETAIL.md >}}) + - [GS\_SESSION\_STAT]({{< relref "./docs/Developerguide/GS_SESSION_STAT.md >}}) + - [GS\_SESSION\_TIME]({{< relref "./docs/Developerguide/GS_SESSION_TIME.md >}}) + - [GS\_THREAD\_MEMORY\_CONTEXT]({{< relref "./docs/Developerguide/GS_THREAD_MEMORY_CONTEXT.md >}}) + - [GS\_TOTAL\_MEMORY\_DETAIL]({{< relref "./docs/Developerguide/GS_TOTAL_MEMORY_DETAIL.md >}}) + - [PG\_TIMEZONE\_ABBREVS]({{< relref "./docs/Developerguide/PG_TIMEZONE_ABBREVS.md >}}) + - [PG\_TOTAL\_USER\_RESOURCE\_INFO\_OID]({{< relref "./docs/Developerguide/PG_TOTAL_USER_RESOURCE_INFO_OID.md >}}) + - [PG\_VARIABLE\_INFO]({{< relref "./docs/Developerguide/PG_VARIABLE_INFO.md >}}) + - [GS\_INSTANCE\_TIME]({{< relref "./docs/Developerguide/GS_INSTANCE_TIME.md >}}) + - [GUC参数说明]({{< relref "./docs/Developerguide/GUC参数说明.md >}}) + - [GUC使用说明]({{< relref "./docs/Developerguide/GUC使用说明.md >}}) + - [文件位置]({{< relref "./docs/Developerguide/文件位置.md >}}) + - [连接和认证]({{< relref "./docs/Developerguide/连接和认证.md >}}) + - [连接设置]({{< relref "./docs/Developerguide/连接设置.md >}}) + - [安全和认证(postgresql.conf)]({{< relref "./docs/Developerguide/安全和认证(postgresql conf).md >}}) + - [通信库参数]({{< relref "./docs/Developerguide/通信库参数.md >}}) + - [资源消耗]({{< relref "./docs/Developerguide/资源消耗.md >}}) + - [内存]({{< relref "./docs/Developerguide/内存.md >}}) + - [磁盘空间]({{< relref "./docs/Developerguide/磁盘空间.md >}}) + - [内核资源使用]({{< relref "./docs/Developerguide/内核资源使用.md >}}) + - [基于开销的清理延迟]({{< relref "./docs/Developerguide/基于开销的清理延迟.md >}}) + - [后端写进程]({{< relref "./docs/Developerguide/后端写进程.md >}}) + - [异步IO]({{< relref "./docs/Developerguide/异步IO.md >}}) + - [并行导入]({{< relref "./docs/Developerguide/并行导入.md >}}) + - [预写式日志]({{< relref "./docs/Developerguide/预写式日志.md >}}) + - [设置]({{< relref "./docs/Developerguide/设置.md >}}) + - [检查点]({{< relref "./docs/Developerguide/检查点.md >}}) + - [日志回放]({{< relref "./docs/Developerguide/日志回放.md >}}) + - [归档]({{< relref "./docs/Developerguide/归档.md >}}) + - [双机复制]({{< relref "./docs/Developerguide/双机复制.md >}}) + - [发送端服务器]({{< relref "./docs/Developerguide/发送端服务器.md >}}) + - [主服务器]({{< relref "./docs/Developerguide/主服务器.md >}}) + - [备服务器]({{< relref "./docs/Developerguide/备服务器.md >}}) + - [内存表]({{< relref "./docs/Developerguide/内存表.md >}}) + - [查询规划]({{< relref "./docs/Developerguide/查询规划.md >}}) + - [优化器方法配置]({{< relref "./docs/Developerguide/优化器方法配置.md >}}) + - [优化器开销常量]({{< relref "./docs/Developerguide/优化器开销常量.md >}}) + - [基因查询优化器]({{< relref "./docs/Developerguide/基因查询优化器.md >}}) + - [其他优化器选项]({{< relref "./docs/Developerguide/其他优化器选项.md >}}) + - [错误报告和日志]({{< relref "./docs/Developerguide/错误报告和日志.md >}}) + - [记录日志的位置]({{< relref "./docs/Developerguide/记录日志的位置.md >}}) + - [记录日志的时间]({{< relref "./docs/Developerguide/记录日志的时间.md >}}) + - [记录日志的内容]({{< relref "./docs/Developerguide/记录日志的内容.md >}}) + - [使用CSV格式写日志]({{< relref "./docs/Developerguide/使用CSV格式写日志.md >}}) + - [告警检测]({{< relref "./docs/Developerguide/告警检测.md >}}) + - [运行时统计]({{< relref "./docs/Developerguide/运行时统计.md >}}) + - [查询和索引统计收集器]({{< relref "./docs/Developerguide/查询和索引统计收集器.md >}}) + - [性能统计]({{< relref "./docs/Developerguide/性能统计.md >}}) + - [负载管理]({{< relref "./docs/Developerguide/负载管理.md >}}) + - [自动清理]({{< relref "./docs/Developerguide/自动清理.md >}}) + - [客户端连接缺省设置]({{< relref "./docs/Developerguide/客户端连接缺省设置.md >}}) + - [语句行为]({{< relref "./docs/Developerguide/语句行为.md >}}) + - [区域和格式化]({{< relref "./docs/Developerguide/区域和格式化.md >}}) + - [其他缺省]({{< relref "./docs/Developerguide/其他缺省.md >}}) + - [锁管理]({{< relref "./docs/Developerguide/锁管理.md >}}) + - [版本和平台兼容性]({{< relref "./docs/Developerguide/版本和平台兼容性.md >}}) + - [历史版本兼容性]({{< relref "./docs/Developerguide/历史版本兼容性.md >}}) + - [平台和客户端兼容性]({{< relref "./docs/Developerguide/平台和客户端兼容性.md >}}) + - [容错性]({{< relref "./docs/Developerguide/容错性.md >}}) + - [连接池参数]({{< relref "./docs/Developerguide/连接池参数.md >}}) + - [openGauss事务]({{< relref "./docs/Developerguide/openGauss事务.md >}}) + - [开发人员选项]({{< relref "./docs/Developerguide/开发人员选项.md >}}) + - [审计]({{< relref "./docs/Developerguide/审计.md >}}) + - [审计开关]({{< relref "./docs/Developerguide/审计开关.md >}}) + - [用户和权限审计]({{< relref "./docs/Developerguide/用户和权限审计.md >}}) + - [操作审计]({{< relref "./docs/Developerguide/操作审计.md >}}) + - [事务监控]({{< relref "./docs/Developerguide/事务监控.md >}}) + - [升级参数]({{< relref "./docs/Developerguide/升级参数.md >}}) + - [其它选项]({{< relref "./docs/Developerguide/其它选项.md >}}) + - [等待事件]({{< relref "./docs/Developerguide/等待事件.md >}}) + - [Query]({{< relref "./docs/Developerguide/Query.md >}}) + - [系统性能快照]({{< relref "./docs/Developerguide/系统性能快照.md >}}) + - [常见故障定位指南]({{< relref "./docs/Developerguide/常见故障定位指南.md >}}) + - [core问题定位]({{< relref "./docs/Developerguide/core问题定位.md >}}) + - [磁盘满故障引起的core问题]({{< relref "./docs/Developerguide/磁盘满故障引起的core问题.md >}}) + - [GUC参数log\_directory设置不正确引起的core问题]({{< relref "./docs/Developerguide/GUC参数log_directory设置不正确引起的core问题.md >}}) -- [工具参考]({{< relref "./docs/Toolreference/Toolreference.md" >}}) - - [工具一览表]({{< relref "./docs/Toolreference/工具一览表.md" >}}) - - [客户端工具]({{< relref "./docs/Toolreference/客户端工具.md" >}}) - - [gsql]({{< relref "./docs/Toolreference/gsql.md" >}}) - - [gsql概述]({{< relref "./docs/Toolreference/gsql概述.md" >}}) - - [使用指导]({{< relref "./docs/Toolreference/使用指导.md" >}}) - - [获取帮助]({{< relref "./docs/Toolreference/获取帮助.md" >}}) - - [命令参考]({{< relref "./docs/Toolreference/命令参考.md" >}}) - - [元命令参考]({{< relref "./docs/Toolreference/元命令参考.md" >}}) - - [常见问题处理]({{< relref "./docs/Toolreference/常见问题处理.md" >}}) - - [X-Tuner]({{< relref "./docs/Toolreference/X-Tuner.md" >}}) - - [概述]({{< relref "./docs/Toolreference/概述.md" >}}) - - [使用指导]({{< relref "./docs/Toolreference/使用指导-0.md" >}}) - - [获取帮助]({{< relref "./docs/Toolreference/获取帮助-1.md" >}}) - - [命令参考]({{< relref "./docs/Toolreference/命令参考-2.md" >}}) - - [常见问题处理]({{< relref "./docs/Toolreference/常见问题处理-3.md" >}}) - - [Sqldiag]({{< relref "./docs/Toolreference/Sqldiag.md" >}}) - - [概述]({{< relref "./docs/Toolreference/概述-4.md" >}}) - - [使用指导]({{< relref "./docs/Toolreference/使用指导-5.md" >}}) - - [获取帮助]({{< relref "./docs/Toolreference/获取帮助-6.md" >}}) - - [命令参考]({{< relref "./docs/Toolreference/命令参考-7.md" >}}) - - [常见问题处理]({{< relref "./docs/Toolreference/常见问题处理-8.md" >}}) - - [Predictor]({{< relref "./docs/Toolreference/Predictor.md" >}}) - - [概述]({{< relref "./docs/Toolreference/概述-9.md" >}}) - - [使用指导]({{< relref "./docs/Toolreference/使用指导-10.md" >}}) - - [常见问题处理]({{< relref "./docs/Toolreference/常见问题处理-11.md" >}}) - - [服务端工具]({{< relref "./docs/Toolreference/服务端工具.md" >}}) - - [gs\_check]({{< relref "./docs/Toolreference/gs_check.md" >}}) - - [gs\_checkos]({{< relref "./docs/Toolreference/gs_checkos.md" >}}) - - [gs\_checkperf]({{< relref "./docs/Toolreference/gs_checkperf.md" >}}) - - [gs\_collector]({{< relref "./docs/Toolreference/gs_collector.md" >}}) - - [gs\_dump]({{< relref "./docs/Toolreference/gs_dump.md" >}}) - - [gs\_dumpall]({{< relref "./docs/Toolreference/gs_dumpall.md" >}}) - - [gs\_guc]({{< relref "./docs/Toolreference/gs_guc.md" >}}) - - [gs\_om]({{< relref "./docs/Toolreference/gs_om.md" >}}) - - [gs\_restore]({{< relref "./docs/Toolreference/gs_restore.md" >}}) - - [gs\_ssh]({{< relref "./docs/Toolreference/gs_ssh.md" >}}) - - [系统内部使用的工具]({{< relref "./docs/Toolreference/系统内部使用的工具.md" >}}) - - [gaussdb]({{< relref "./docs/Toolreference/gaussdb.md" >}}) - - [gs\_backup]({{< relref "./docs/Toolreference/gs_backup.md" >}}) - - [gs\_basebackup]({{< relref "./docs/Toolreference/gs_basebackup.md" >}}) - - [gs\_ctl]({{< relref "./docs/Toolreference/gs_ctl.md" >}}) - - [gs\_install]({{< relref "./docs/Toolreference/gs_install.md" >}}) - - [gs\_postuninstall]({{< relref "./docs/Toolreference/gs_postuninstall.md" >}}) - - [gs\_preinstall]({{< relref "./docs/Toolreference/gs_preinstall.md" >}}) - - [gs\_sshexkey]({{< relref "./docs/Toolreference/gs_sshexkey.md" >}}) - - [gs\_uninstall]({{< relref "./docs/Toolreference/gs_uninstall.md" >}}) - - [gs\_upgradectl]({{< relref "./docs/Toolreference/gs_upgradectl.md" >}}) - - [gstrace]({{< relref "./docs/Toolreference/gstrace.md" >}}) - - [kdb5\_util]({{< relref "./docs/Toolreference/kdb5_util.md" >}}) - - [kadmin.local]({{< relref "./docs/Toolreference/kadmin-local.md" >}}) - - [kinit]({{< relref "./docs/Toolreference/kinit.md" >}}) - - [klist]({{< relref "./docs/Toolreference/klist.md" >}}) - - [krb5kdc]({{< relref "./docs/Toolreference/krb5kdc.md" >}}) - - [kdestroy]({{< relref "./docs/Toolreference/kdestroy.md" >}}) - - [pg\_config]({{< relref "./docs/Toolreference/pg_config.md" >}}) - - [pg\_controldata]({{< relref "./docs/Toolreference/pg_controldata.md" >}}) - - [pg\_resetxlog]({{< relref "./docs/Toolreference/pg_resetxlog.md" >}}) - - [FAQ]({{< relref "./docs/Toolreference/FAQ.md" >}}) - - [执行命令报错“Failed to obtain the GPHOME”]({{< relref "./docs/Toolreference/执行命令报错-Failed-to-obtain-the-GPHOME.md" >}}) -- [gs\_collector工具支持收集的系统表和视图列表]({{< relref "./docs/Toolreference/gs_collector工具支持收集的系统表和视图列表.md" >}}) +- [工具参考]({{< relref "./docs/Toolreference/Toolreference.md >}}) + - [工具一览表]({{< relref "./docs/Toolreference/工具一览表.md >}}) + - [客户端工具]({{< relref "./docs/Toolreference/客户端工具.md >}}) + - [gsql]({{< relref "./docs/Toolreference/gsql.md >}}) + - [gsql概述]({{< relref "./docs/Toolreference/gsql概述.md >}}) + - [使用指导]({{< relref "./docs/Toolreference/使用指导.md >}}) + - [获取帮助]({{< relref "./docs/Toolreference/获取帮助.md >}}) + - [命令参考]({{< relref "./docs/Toolreference/命令参考.md >}}) + - [元命令参考]({{< relref "./docs/Toolreference/元命令参考.md >}}) + - [常见问题处理]({{< relref "./docs/Toolreference/常见问题处理.md >}}) + - [X Tuner]({{< relref "./docs/Toolreference/X Tuner.md >}}) + - [概述]({{< relref "./docs/Toolreference/概述.md >}}) + - [使用指导]({{< relref "./docs/Toolreference/使用指导 0.md >}}) + - [获取帮助]({{< relref "./docs/Toolreference/获取帮助 1.md >}}) + - [命令参考]({{< relref "./docs/Toolreference/命令参考 2.md >}}) + - [常见问题处理]({{< relref "./docs/Toolreference/常见问题处理 3.md >}}) + - [Sqldiag]({{< relref "./docs/Toolreference/Sqldiag.md >}}) + - [概述]({{< relref "./docs/Toolreference/概述 4.md >}}) + - [使用指导]({{< relref "./docs/Toolreference/使用指导 5.md >}}) + - [获取帮助]({{< relref "./docs/Toolreference/获取帮助 6.md >}}) + - [命令参考]({{< relref "./docs/Toolreference/命令参考 7.md >}}) + - [常见问题处理]({{< relref "./docs/Toolreference/常见问题处理 8.md >}}) + - [Predictor]({{< relref "./docs/Toolreference/Predictor.md >}}) + - [概述]({{< relref "./docs/Toolreference/概述 9.md >}}) + - [使用指导]({{< relref "./docs/Toolreference/使用指导 10.md >}}) + - [常见问题处理]({{< relref "./docs/Toolreference/常见问题处理 11.md >}}) + - [服务端工具]({{< relref "./docs/Toolreference/服务端工具.md >}}) + - [gs\_check]({{< relref "./docs/Toolreference/gs_check.md >}}) + - [gs\_checkos]({{< relref "./docs/Toolreference/gs_checkos.md >}}) + - [gs\_checkperf]({{< relref "./docs/Toolreference/gs_checkperf.md >}}) + - [gs\_collector]({{< relref "./docs/Toolreference/gs_collector.md >}}) + - [gs\_dump]({{< relref "./docs/Toolreference/gs_dump.md >}}) + - [gs\_dumpall]({{< relref "./docs/Toolreference/gs_dumpall.md >}}) + - [gs\_guc]({{< relref "./docs/Toolreference/gs_guc.md >}}) + - [gs\_om]({{< relref "./docs/Toolreference/gs_om.md >}}) + - [gs\_restore]({{< relref "./docs/Toolreference/gs_restore.md >}}) + - [gs\_ssh]({{< relref "./docs/Toolreference/gs_ssh.md >}}) + - [系统内部使用的工具]({{< relref "./docs/Toolreference/系统内部使用的工具.md >}}) + - [gaussdb]({{< relref "./docs/Toolreference/gaussdb.md >}}) + - [gs\_backup]({{< relref "./docs/Toolreference/gs_backup.md >}}) + - [gs\_basebackup]({{< relref "./docs/Toolreference/gs_basebackup.md >}}) + - [gs\_ctl]({{< relref "./docs/Toolreference/gs_ctl.md >}}) + - [gs\_install]({{< relref "./docs/Toolreference/gs_install.md >}}) + - [gs\_postuninstall]({{< relref "./docs/Toolreference/gs_postuninstall.md >}}) + - [gs\_preinstall]({{< relref "./docs/Toolreference/gs_preinstall.md >}}) + - [gs\_sshexkey]({{< relref "./docs/Toolreference/gs_sshexkey.md >}}) + - [gs\_uninstall]({{< relref "./docs/Toolreference/gs_uninstall.md >}}) + - [gs\_upgradectl]({{< relref "./docs/Toolreference/gs_upgradectl.md >}}) + - [gstrace]({{< relref "./docs/Toolreference/gstrace.md >}}) + - [kdb5\_util]({{< relref "./docs/Toolreference/kdb5_util.md >}}) + - [kadmin.local]({{< relref "./docs/Toolreference/kadmin local.md >}}) + - [kinit]({{< relref "./docs/Toolreference/kinit.md >}}) + - [klist]({{< relref "./docs/Toolreference/klist.md >}}) + - [krb5kdc]({{< relref "./docs/Toolreference/krb5kdc.md >}}) + - [kdestroy]({{< relref "./docs/Toolreference/kdestroy.md >}}) + - [pg\_config]({{< relref "./docs/Toolreference/pg_config.md >}}) + - [pg\_controldata]({{< relref "./docs/Toolreference/pg_controldata.md >}}) + - [pg\_resetxlog]({{< relref "./docs/Toolreference/pg_resetxlog.md >}}) + - [FAQ]({{< relref "./docs/Toolreference/FAQ.md >}}) + - [执行命令报错“Failed to obtain the GPHOME”]({{< relref "./docs/Toolreference/执行命令报错 Failed to obtain the GPHOME.md >}}) + - [gs\_collector工具支持收集的系统表和视图列表]({{< relref "./docs/Toolreference/gs_collector工具支持收集的系统表和视图列表.md >}}) + +- [编译指导书]({{< relref "./docs/Compilationguide/Compilation.md >}}) + - [搭建编译环境]({{< relref "./docs/Compilationguide/搭建编译环境.md >}}) + - [硬件要求]({{< relref "./docs/Compilationguide/硬件要求.md >}}) + - [软件要求]({{< relref "./docs/Compilationguide/软件要求.md >}}) + - [操作系统要求]({{< relref "./docs/Compilationguide/操作系统要求.md >}}) + - [软件依赖要求]({{< relref "./docs/Compilationguide/软件依赖要求.md >}}) + - [环境变量配置]({{< relref "./docs/Compilationguide/环境变量配置.md >}}) + - [版本编译]({{< relref "./docs/Compilationguide/版本编译.md >}}) + - [编译前准备]({{< relref "./docs/Compilationguide/编译前准备.md >}}) + - [代码下载]({{< relref "./docs/Compilationguide/代码下载.md >}}) + - [软件安装编译]({{< relref "./docs/Compilationguide/软件安装编译.md >}}) + - [产品安装包编译]({{< relref "./docs/Compilationguide/产品安装包编译.md >}}) + - [FAQ]({{< relref "./docs/Compilationguide/FAQ.md >}}) + - [如何清除编译过程中生成的临时文件]({{< relref "./docs/Compilationguide/如何清除编译过程中生成的临时文件.md >}}) + - [如何解决“Configure error: Ccompiler cannot create executables”报错]({{< relref "./docs/Compilationguide/如何解决Configure error Ccompiler cannot create executables报错.md >}}) + + + -- Gitee