- 关于MogDB
- 快速入门
- MogDB实训平台
- 容器化安装
- 单节点安装
- 访问数据库
- 使用命令行访问MogDB
- 使用图形工具访问MogDB
- 使用中间件访问MogDB
- 使用编程语言访问MogDB
- 使用样本数据集Mogila
- 特性描述
- 概览
- 高性能
- 高可用
- 维护性
- 数据库安全
- 企业级特性
- 应用开发接口
- AI能力
- AI4DB:数据库自治运维
- DB4AI:数据库驱动AI
- AI in DB:数据库内AI功能
- 中间件
- 安装指南
- 管理指南
- AI特性指南
- AI特性概述
- AI4DB:数据库自治运维
- DB4AI:数据库驱动AI
- AI in DB:数据库内AI功能
- 安全指南
- 开发者指南
- 应用程序开发教程
- 开发规范
- 基于JDBC开发
- 概述
- JDBC包、驱动类和环境类
- 开发流程
- 加载驱动
- 连接数据库
- 连接数据库(以SSL方式)
- 执行SQL语句
- 处理结果集
- 关闭连接
- 日志管理
- 示例:常用操作
- 示例:重新执行应用SQL
- 示例:通过本地文件导入导出数据
- 示例:从MY向MogDB进行数据迁移
- 示例:逻辑复制代码示例
- 示例:不同场景下连接数据库参数配置
- JDBC接口参考
- java.sql.Connection
- java.sql.CallableStatement
- java.sql.DatabaseMetaData
- java.sql.Driver
- java.sql.PreparedStatement
- java.sql.ResultSet
- java.sql.ResultSetMetaData
- java.sql.Statement
- javax.sql.ConnectionPoolDataSource
- javax.sql.DataSource
- javax.sql.PooledConnection
- javax.naming.Context
- javax.naming.spi.InitialContextFactory
- CopyManager
- 基于ODBC开发
- 基于libpq开发
- libpq使用依赖的头文件
- 开发流程
- 示例
- 链接参数
- libpq接口参考
- 数据库连接控制函数
- 数据库执行语句函数
- 异步命令处理
- 取消正在处理的查询
- 基于Psycopg开发
- 调试
- 存储过程
- 用户自定义函数
- PL/pgSQL-SQL过程语言
- 定时任务
- 自治事务
- 逻辑复制
- Foreign Data Wrapper
- 物化视图
- 分区管理
- 应用程序开发教程
- 性能优化指南
- 参考指南
- 系统表及系统视图
- 系统表和系统视图概述
- 系统表
- GS_ASP
- GS_AUDITING_POLICY
- GS_AUDITING_POLICY_ACCESS
- GS_AUDITING_POLICY_FILTERS
- GS_AUDITING_POLICY_PRIVILEGES
- GS_CLIENT_GLOBAL_KEYS
- GS_CLIENT_GLOBAL_KEYS_ARGS
- GS_COLUMN_KEYS
- GS_COLUMN_KEYS_ARGS
- GS_DB_PRIVILEGE
- GS_ENCRYPTED_COLUMNS
- GS_ENCRYPTED_PROC
- GS_GLOBAL_CHAIN
- GS_GLOBAL_CONFIG
- GS_MASKING_POLICY
- GS_MASKING_POLICY_ACTIONS
- GS_MASKING_POLICY_FILTERS
- GS_MATVIEW
- GS_MATVIEW_DEPENDENCY
- GS_MODEL_WAREHOUSE
- GS_OPT_MODEL
- GS_PACKAGE
- GS_POLICY_LABEL
- GS_RECYCLEBIN
- GS_TXN_SNAPSHOT
- GS_UID
- GS_WLM_EC_OPERATOR_INFO
- GS_WLM_INSTANCE_HISTORY
- GS_WLM_OPERATOR_INFO
- GS_WLM_PLAN_ENCODING_TABLE
- GS_WLM_PLAN_OPERATOR_INFO
- GS_WLM_SESSION_QUERY_INFO_ALL
- GS_WLM_USER_RESOURCE_HISTORY
- PG_AGGREGATE
- PG_AM
- PG_AMOP
- PG_AMPROC
- PG_APP_WORKLOADGROUP_MAPPING
- PG_ATTRDEF
- PG_ATTRIBUTE
- PG_AUTH_HISTORY
- PG_AUTH_MEMBERS
- PG_AUTHID
- PG_CAST
- PG_CLASS
- PG_COLLATION
- PG_CONSTRAINT
- PG_CONVERSION
- PG_DATABASE
- PG_DB_ROLE_SETTING
- PG_DEFAULT_ACL
- PG_DEPEND
- PG_DESCRIPTION
- PG_DIRECTORY
- PG_ENUM
- PG_EXTENSION
- PG_EXTENSION_DATA_SOURCE
- PG_FOREIGN_DATA_WRAPPER
- PG_FOREIGN_SERVER
- PG_FOREIGN_TABLE
- PG_HASHBUCKET
- PG_INDEX
- PG_INHERITS
- PG_JOB
- PG_JOB_PROC
- PG_LANGUAGE
- PG_LARGEOBJECT
- PG_LARGEOBJECT_METADATA
- PG_NAMESPACE
- PG_OBJECT
- PG_OPCLASS
- PG_OPERATOR
- PG_OPFAMILY
- PG_PARTITION
- PG_PLTEMPLATE
- PG_PROC
- PG_PUBLICATION
- PG_PUBLICATION_REL
- PG_RANGE
- PG_REPLICATION_ORIGIN
- PG_RESOURCE_POOL
- PG_RLSPOLICY
- PG_SECLABEL
- PG_SHDEPEND
- PG_SHDESCRIPTION
- PG_SHSECLABEL
- PG_STATISTIC
- PG_STATISTIC_EXT
- PG_SUBSCRIPTION
- PG_SYNONYM
- PG_TABLESPACE
- PG_TRIGGER
- PG_TS_CONFIG
- PG_TS_CONFIG_MAP
- PG_TS_DICT
- PG_TS_PARSER
- PG_TS_TEMPLATE
- PG_TYPE
- PG_USER_MAPPING
- PG_USER_STATUS
- PG_WORKLOAD_GROUP
- PGXC_CLASS
- PGXC_GROUP
- PGXC_NODE
- PGXC_SLICE
- PLAN_TABLE_DATA
- STATEMENT_HISTORY
- 系统视图
- DV_SESSION_LONGOPS
- DV_SESSIONS
- GET_GLOBAL_PREPARED_XACTS(废弃)
- GS_AUDITING
- GS_AUDITING_ACCESS
- GS_AUDITING_PRIVILEGE
- GS_ASYNC_SUBMIT_SESSIONS_STATUS
- GS_CLUSTER_RESOURCE_INFO
- GS_DB_PRIVILEGES
- GS_FILE_STAT
- GS_GSC_MEMORY_DETAIL
- GS_INSTANCE_TIME
- GS_LABELS
- GS_LSC_MEMORY_DETAIL
- GS_MASKING
- GS_MATVIEWS
- GS_OS_RUN_INFO
- GS_REDO_STAT
- GS_SESSION_CPU_STATISTICS
- GS_SESSION_MEMORY
- GS_SESSION_MEMORY_CONTEXT
- GS_SESSION_MEMORY_DETAIL
- GS_SESSION_MEMORY_STATISTICS
- GS_SESSION_STAT
- GS_SESSION_TIME
- GS_SQL_COUNT
- GS_STAT_SESSION_CU
- GS_THREAD_MEMORY_CONTEXT
- GS_TOTAL_MEMORY_DETAIL
- GS_WLM_CGROUP_INFO
- GS_WLM_EC_OPERATOR_STATISTICS
- GS_WLM_OPERATOR_HISTORY
- GS_WLM_OPERATOR_STATISTICS
- GS_WLM_PLAN_OPERATOR_HISTORY
- GS_WLM_REBUILD_USER_RESOURCE_POOL
- GS_WLM_RESOURCE_POOL
- GS_WLM_SESSION_HISTORY
- GS_WLM_SESSION_INFO
- GS_WLM_SESSION_INFO_ALL
- GS_WLM_SESSION_STATISTICS
- GS_WLM_USER_INFO
- GS_WRITE_TERM_LOG
- MPP_TABLES
- PG_AVAILABLE_EXTENSION_VERSIONS
- PG_AVAILABLE_EXTENSIONS
- PG_COMM_DELAY
- PG_COMM_RECV_STREAM
- PG_COMM_SEND_STREAM
- PG_COMM_STATUS
- PG_CONTROL_GROUP_CONFIG
- PG_CURSORS
- PG_EXT_STATS
- PG_GET_INVALID_BACKENDS
- PG_GET_SENDERS_CATCHUP_TIME
- PG_GROUP
- PG_GTT_ATTACHED_PIDS
- PG_GTT_RELSTATS
- PG_GTT_STATS
- PG_INDEXES
- PG_LOCKS
- PG_NODE_ENV
- PG_OS_THREADS
- PG_PREPARED_STATEMENTS
- PG_PREPARED_XACTS
- PG_PUBLICATION_TABLES
- PG_REPLICATION_ORIGIN_STATUS
- PG_REPLICATION_SLOTS
- PG_RLSPOLICIES
- PG_ROLES
- PG_RULES
- PG_RUNNING_XACTS
- PG_SECLABELS
- PG_SESSION_IOSTAT
- PG_SESSION_WLMSTAT
- PG_SETTINGS
- PG_SHADOW
- PG_STAT_ACTIVITY
- PG_STAT_ACTIVITY_NG
- PG_STAT_ALL_INDEXES
- PG_STAT_ALL_TABLES
- PG_STAT_BAD_BLOCK
- PG_STAT_BGWRITER
- PG_STAT_DATABASE
- PG_STAT_DATABASE_CONFLICTS
- PG_STAT_REPLICATION
- PG_STAT_SUBSCRIPTION
- PG_STAT_SYS_INDEXES
- PG_STAT_SYS_TABLES
- PG_STAT_USER_FUNCTIONS
- PG_STAT_USER_INDEXES
- PG_STAT_USER_TABLES
- PG_STAT_XACT_ALL_TABLES
- PG_STAT_XACT_SYS_TABLES
- PG_STAT_XACT_USER_FUNCTIONS
- PG_STAT_XACT_USER_TABLES
- PG_STATIO_ALL_INDEXES
- PG_STATIO_ALL_SEQUENCES
- PG_STATIO_ALL_TABLES
- PG_STATIO_SYS_INDEXES
- PG_STATIO_SYS_SEQUENCES
- PG_STATIO_SYS_TABLES
- PG_STATIO_USER_INDEXES
- PG_STATIO_USER_SEQUENCES
- PG_STATIO_USER_TABLES
- PG_STATS
- PG_TABLES
- PG_TDE_INFO
- PG_THREAD_WAIT_STATUS
- PG_TIMEZONE_ABBREVS
- PG_TIMEZONE_NAMES
- PG_TOTAL_MEMORY_DETAIL
- PG_TOTAL_USER_RESOURCE_INFO
- PG_TOTAL_USER_RESOURCE_INFO_OID
- PG_USER
- PG_USER_MAPPINGS
- PG_VARIABLE_INFO
- PG_VIEWS
- PG_WLM_STATISTICS
- PGXC_PREPARED_XACTS
- PLAN_TABLE
- 系统函数
- 逻辑操作符
- 比较操作符
- 字符处理函数和操作符
- 二进制字符串函数和操作符
- 位串函数和操作符
- 模式匹配操作符
- 数字操作函数和操作符
- 时间和日期处理函数和操作符
- 类型转换函数
- 几何函数和操作符
- 网络地址函数和操作符
- 文本检索函数和操作符
- JSON/JSONB函数和操作符
- HLL函数和操作符
- SEQUENCE函数
- 数组函数和操作符
- 范围函数和操作符
- 聚集函数
- 窗口函数(分析函数)
- 安全函数
- 账本数据库的函数
- 密态等值的函数
- 返回集合的函数
- 条件表达式函数
- 系统信息函数
- 系统管理函数
- 统计信息函数
- 触发器函数
- HashFunc函数
- 提示信息函数
- 全局临时表函数
- 故障注入系统函数
- AI特性函数
- 动态数据脱敏函数
- 其他系统函数
- 内部函数
- Global SysCache特性函数
- 数据损坏检测修复函数
- 废弃函数
- 支持的数据类型
- SQL语法
- ABORT
- ALTER AGGREGATE
- ALTER AUDIT POLICY
- ALTER DATABASE
- ALTER DATA SOURCE
- ALTER DEFAULT PRIVILEGES
- ALTER DIRECTORY
- ALTER EXTENSION
- ALTER FOREIGN TABLE
- ALTER FUNCTION
- ALTER GLOBAL CONFIGURATION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER LARGE OBJECT
- ALTER MASKING POLICY
- ALTER MATERIALIZED VIEW
- ALTER PACKAGE
- ALTER PROCEDURE
- ALTER PUBLICATION
- ALTER RESOURCE LABEL
- ALTER RESOURCE POOL
- ALTER ROLE
- ALTER ROW LEVEL SECURITY POLICY
- ALTER RULE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER SERVER
- ALTER SESSION
- ALTER SUBSCRIPTION
- ALTER SYNONYM
- ALTER SYSTEM KILL SESSION
- ALTER SYSTEM SET
- ALTER TABLE
- ALTER TABLE PARTITION
- ALTER TABLE SUBPARTITION
- ALTER TABLESPACE
- ALTER TEXT SEARCH CONFIGURATION
- ALTER TEXT SEARCH DICTIONARY
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ALTER USER MAPPING
- ALTER VIEW
- ANALYZE | ANALYSE
- BEGIN
- CALL
- CHECKPOINT
- CLEAN CONNECTION
- CLOSE
- CLUSTER
- COMMENT
- COMMIT | END
- COMMIT PREPARED
- CONNECT BY
- COPY
- CREATE AGGREGATE
- CREATE AUDIT POLICY
- CREATE CAST
- CREATE CLIENT MASTER KEY
- CREATE COLUMN ENCRYPTION KEY
- CREATE DATABASE
- CREATE DATA SOURCE
- CREATE DIRECTORY
- CREATE EXTENSION
- CREATE FOREIGN TABLE
- CREATE FUNCTION
- CREATE GROUP
- CREATE INCREMENTAL MATERIALIZED VIEW
- CREATE INDEX
- CREATE LANGUAGE
- CREATE MASKING POLICY
- CREATE MATERIALIZED VIEW
- CREATE MODEL
- CREATE OPERATOR
- CREATE PACKAGE
- CREATE PROCEDURE
- CREATE PUBLICATION
- CREATE RESOURCE LABEL
- CREATE RESOURCE POOL
- CREATE ROLE
- CREATE ROW LEVEL SECURITY POLICY
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE SERVER
- CREATE SUBSCRIPTION
- CREATE SYNONYM
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLE PARTITION
- CREATE TABLE SUBPARTITION
- CREATE TABLESPACE
- CREATE TEXT SEARCH CONFIGURATION
- CREATE TEXT SEARCH DICTIONARY
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE USER MAPPING
- CREATE VIEW
- CREATE WEAK PASSWORD DICTIONARY
- CURSOR
- DEALLOCATE
- DECLARE
- DELETE
- DO
- DROP AGGREGATE
- DROP AUDIT POLICY
- DROP CAST
- DROP CLIENT MASTER KEY
- DROP COLUMN ENCRYPTION KEY
- DROP DATABASE
- DROP DATA SOURCE
- DROP DIRECTORY
- DROP EXTENSION
- DROP FOREIGN TABLE
- DROP FUNCTION
- DROP GLOBAL CONFIGURATION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP MASKING POLICY
- DROP MATERIALIZED VIEW
- DROP MODEL
- DROP OPERATOR
- DROP OWNED
- DROP PACKAGE
- DROP PROCEDURE
- DROP PUBLICATION
- DROP RESOURCE LABEL
- DROP RESOURCE POOL
- DROP ROLE
- DROP ROW LEVEL SECURITY POLICY
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP SERVER
- DROP SUBSCRIPTION
- DROP SYNONYM
- DROP TABLE
- DROP TABLESPACE
- DROP TEXT SEARCH CONFIGURATION
- DROP TEXT SEARCH DICTIONARY
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP USER MAPPING
- DROP VIEW
- DROP WEAK PASSWORD DICTIONARY
- EXECUTE
- EXECUTE DIRECT
- EXPLAIN
- EXPLAIN PLAN
- FETCH
- GRANT
- INSERT
- LOCK
- MERGE INTO
- MOVE
- PREDICT BY
- PREPARE
- PREPARE TRANSACTION
- PURGE
- REASSIGN OWNED
- REFRESH INCREMENTAL MATERIALIZED VIEW
- REFRESH MATERIALIZED VIEW
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- SHUTDOWN
- SNAPSHOT
- START TRANSACTION
- TIMECAPSULE TABLE
- TRUNCATE
- UPDATE
- VACUUM
- VALUES
- SQL参考
- GUC参数说明
- Schema
- Information Schema
- DBE_PERF
- 概述
- OS
- Instance
- Memory
- File
- Object
- STAT_USER_TABLES
- SUMMARY_STAT_USER_TABLES
- GLOBAL_STAT_USER_TABLES
- STAT_USER_INDEXES
- SUMMARY_STAT_USER_INDEXES
- GLOBAL_STAT_USER_INDEXES
- STAT_SYS_TABLES
- SUMMARY_STAT_SYS_TABLES
- GLOBAL_STAT_SYS_TABLES
- STAT_SYS_INDEXES
- SUMMARY_STAT_SYS_INDEXES
- GLOBAL_STAT_SYS_INDEXES
- STAT_ALL_TABLES
- SUMMARY_STAT_ALL_TABLES
- GLOBAL_STAT_ALL_TABLES
- STAT_ALL_INDEXES
- SUMMARY_STAT_ALL_INDEXES
- GLOBAL_STAT_ALL_INDEXES
- STAT_DATABASE
- SUMMARY_STAT_DATABASE
- GLOBAL_STAT_DATABASE
- STAT_DATABASE_CONFLICTS
- SUMMARY_STAT_DATABASE_CONFLICTS
- GLOBAL_STAT_DATABASE_CONFLICTS
- STAT_XACT_ALL_TABLES
- SUMMARY_STAT_XACT_ALL_TABLES
- GLOBAL_STAT_XACT_ALL_TABLES
- STAT_XACT_SYS_TABLES
- SUMMARY_STAT_XACT_SYS_TABLES
- GLOBAL_STAT_XACT_SYS_TABLES
- STAT_XACT_USER_TABLES
- SUMMARY_STAT_XACT_USER_TABLES
- GLOBAL_STAT_XACT_USER_TABLES
- STAT_XACT_USER_FUNCTIONS
- SUMMARY_STAT_XACT_USER_FUNCTIONS
- GLOBAL_STAT_XACT_USER_FUNCTIONS
- STAT_BAD_BLOCK
- SUMMARY_STAT_BAD_BLOCK
- GLOBAL_STAT_BAD_BLOCK
- STAT_USER_FUNCTIONS
- SUMMARY_STAT_USER_FUNCTIONS
- GLOBAL_STAT_USER_FUNCTIONS
- Workload
- Session/Thread
- SESSION_STAT
- GLOBAL_SESSION_STAT
- SESSION_TIME
- GLOBAL_SESSION_TIME
- SESSION_MEMORY
- GLOBAL_SESSION_MEMORY
- SESSION_MEMORY_DETAIL
- GLOBAL_SESSION_MEMORY_DETAIL
- SESSION_STAT_ACTIVITY
- GLOBAL_SESSION_STAT_ACTIVITY
- THREAD_WAIT_STATUS
- GLOBAL_THREAD_WAIT_STATUS
- LOCAL_THREADPOOL_STATUS
- GLOBAL_THREADPOOL_STATUS
- SESSION_CPU_RUNTIME
- SESSION_MEMORY_RUNTIME
- STATEMENT_IOSTAT_COMPLEX_RUNTIME
- LOCAL_ACTIVE_SESSION
- Transaction
- Query
- STATEMENT
- SUMMARY_STATEMENT
- STATEMENT_COUNT
- GLOBAL_STATEMENT_COUNT
- SUMMARY_STATEMENT_COUNT
- GLOBAL_STATEMENT_COMPLEX_HISTORY
- GLOBAL_STATEMENT_COMPLEX_HISTORY_TABLE
- GLOBAL_STATEMENT_COMPLEX_RUNTIME
- STATEMENT_RESPONSETIME_PERCENTILE
- STATEMENT_USER_COMPLEX_HISTORY
- STATEMENT_COMPLEX_RUNTIME
- STATEMENT_COMPLEX_HISTORY_TABLE
- STATEMENT_COMPLEX_HISTORY
- STATEMENT_WLMSTAT_COMPLEX_RUNTIME
- STATEMENT_HISTORY
- Cache/IO
- STATIO_USER_TABLES
- SUMMARY_STATIO_USER_TABLES
- GLOBAL_STATIO_USER_TABLES
- STATIO_USER_INDEXES
- SUMMARY_STATIO_USER_INDEXES
- GLOBAL_STATIO_USER_INDEXES
- STATIO_USER_SEQUENCES
- SUMMARY_STATIO_USER_SEQUENCES
- GLOBAL_STATIO_USER_SEQUENCES
- STATIO_SYS_TABLES
- SUMMARY_STATIO_SYS_TABLES
- GLOBAL_STATIO_SYS_TABLES
- STATIO_SYS_INDEXES
- SUMMARY_STATIO_SYS_INDEXES
- GLOBAL_STATIO_SYS_INDEXES
- STATIO_SYS_SEQUENCES
- SUMMARY_STATIO_SYS_SEQUENCES
- GLOBAL_STATIO_SYS_SEQUENCES
- STATIO_ALL_TABLES
- SUMMARY_STATIO_ALL_TABLES
- GLOBAL_STATIO_ALL_TABLES
- STATIO_ALL_INDEXES
- SUMMARY_STATIO_ALL_INDEXES
- GLOBAL_STATIO_ALL_INDEXES
- STATIO_ALL_SEQUENCES
- SUMMARY_STATIO_ALL_SEQUENCES
- GLOBAL_STATIO_ALL_SEQUENCES
- GLOBAL_STAT_DB_CU
- GLOBAL_STAT_SESSION_CU
- Utility
- REPLICATION_STAT
- GLOBAL_REPLICATION_STAT
- REPLICATION_SLOTS
- GLOBAL_REPLICATION_SLOTS
- BGWRITER_STAT
- GLOBAL_BGWRITER_STAT
- GLOBAL_CKPT_STATUS
- GLOBAL_DOUBLE_WRITE_STATUS
- GLOBAL_PAGEWRITER_STATUS
- GLOBAL_RECORD_RESET_TIME
- GLOBAL_REDO_STATUS
- GLOBAL_RECOVERY_STATUS
- CLASS_VITAL_INFO
- USER_LOGIN
- SUMMARY_USER_LOGIN
- GLOBAL_GET_BGWRITER_STATUS
- GLOBAL_SINGLE_FLUSH_DW_STATUS
- GLOBAL_CANDIDATE_STATUS
- Lock
- Wait Events
- Configuration
- Operator
- Workload Manager
- Global Plancache
- RTO
- DBE_PLDEBUGGER Schema
- DBE_PLDEBUGGER Schema概述
- DBE_PLDEBUGGER.turn_on
- DBE_PLDEBUGGER.turn_off
- DBE_PLDEBUGGER.local_debug_server_info
- DBE_PLDEBUGGER.attach
- DBE_PLDEBUGGER.info_locals
- DBE_PLDEBUGGER.next
- DBE_PLDEBUGGER.continue
- DBE_PLDEBUGGER.abort
- DBE_PLDEBUGGER.print_var
- DBE_PLDEBUGGER.info_code
- DBE_PLDEBUGGER.step
- DBE_PLDEBUGGER.add_breakpoint
- DBE_PLDEBUGGER.delete_breakpoint
- DBE_PLDEBUGGER.info_breakpoints
- DBE_PLDEBUGGER.backtrace
- DBE_PLDEBUGGER.disable_breakpoint
- DBE_PLDEBUGGER.enable_breakpoint
- DBE_PLDEBUGGER.finish
- DBE_PLDEBUGGER.set_var
- DB4AI Schema
- DBE_PLDEVELOPER
- 工具参考
- 工具一览表
- 客户端工具
- 服务端工具
- 系统内部使用的工具
- mogdb
- gs_backup
- gs_basebackup
- gs_ctl
- gs_initdb
- gs_install
- gs_install_plugin
- gs_install_plugin_local
- gs_preinstall
- gs_sshexkey
- gs_tar
- gs_uninstall
- gs_upgradectl
- gs_expansion
- gs_dropnode
- gs_probackup
- gstrace
- kdb5_util
- kadmin.local
- kinit
- klist
- krb5kdc
- kdestroy
- pg_config
- pg_controldata
- pg_recvlogical
- pg_resetxlog
- pg_archivecleanup
- pssh
- pscp
- transfer.py
- 统一数据库管理工具
- FAQ
- MogDB可运行脚本功能说明
- gs_collector工具支持收集的系统表和视图列表
- 插件
- 数据库报错信息
- SQL标准错误码说明
- 第三方库错误码说明
- GAUSS-00001 - GAUSS-00100
- GAUSS-00101 - GAUSS-00200
- GAUSS 00201 - GAUSS 00300
- GAUSS 00301 - GAUSS 00400
- GAUSS 00401 - GAUSS 00500
- GAUSS 00501 - GAUSS 00600
- GAUSS 00601 - GAUSS 00700
- GAUSS 00701 - GAUSS 00800
- GAUSS 00801 - GAUSS 00900
- GAUSS 00901 - GAUSS 01000
- GAUSS 01001 - GAUSS 01100
- GAUSS 01101 - GAUSS 01200
- GAUSS 01201 - GAUSS 01300
- GAUSS 01301 - GAUSS 01400
- GAUSS 01401 - GAUSS 01500
- GAUSS 01501 - GAUSS 01600
- GAUSS 01601 - GAUSS 01700
- GAUSS 01701 - GAUSS 01800
- GAUSS 01801 - GAUSS 01900
- GAUSS 01901 - GAUSS 02000
- GAUSS 02001 - GAUSS 02100
- GAUSS 02101 - GAUSS 02200
- GAUSS 02201 - GAUSS 02300
- GAUSS 02301 - GAUSS 02400
- GAUSS 02401 - GAUSS 02500
- GAUSS 02501 - GAUSS 02600
- GAUSS 02601 - GAUSS 02700
- GAUSS 02701 - GAUSS 02800
- GAUSS 02801 - GAUSS 02900
- GAUSS 02901 - GAUSS 03000
- GAUSS 03001 - GAUSS 03100
- GAUSS 03101 - GAUSS 03200
- GAUSS 03201 - GAUSS 03300
- GAUSS 03301 - GAUSS 03400
- GAUSS 03401 - GAUSS 03500
- GAUSS 03501 - GAUSS 03600
- GAUSS 03601 - GAUSS 03700
- GAUSS 03701 - GAUSS 03800
- GAUSS 03801 - GAUSS 03900
- GAUSS 03901 - GAUSS 04000
- GAUSS 04001 - GAUSS 04100
- GAUSS 04101 - GAUSS 04200
- GAUSS 04201 - GAUSS 04300
- GAUSS 04301 - GAUSS 04400
- GAUSS 04401 - GAUSS 04500
- GAUSS 04501 - GAUSS 04600
- GAUSS 04601 - GAUSS 04700
- GAUSS 04701 - GAUSS 04800
- GAUSS 04801 - GAUSS 04900
- GAUSS 04901 - GAUSS 05000
- GAUSS 05001 - GAUSS 05100
- GAUSS 05101 - GAUSS 05200
- GAUSS 05201 - GAUSS 05300
- GAUSS 05301 - GAUSS 05400
- GAUSS 05401 - GAUSS 05500
- GAUSS 05501 - GAUSS 05600
- GAUSS 05601 - GAUSS 05700
- GAUSS 05701 - GAUSS 05800
- GAUSS 05801 - GAUSS 05900
- GAUSS 05901 - GAUSS 06000
- GAUSS 06001 - GAUSS 06100
- GAUSS 06101 - GAUSS 06200
- GAUSS 06201 - GAUSS 06300
- GAUSS 06301 - GAUSS 06400
- GAUSS 06401 - GAUSS 06500
- GAUSS 06501 - GAUSS 06600
- GAUSS 06601 - GAUSS 06700
- GAUSS 06701 - GAUSS 06800
- GAUSS 06801 - GAUSS 06900
- GAUSS 06901 - GAUSS 07000
- GAUSS 07001 - GAUSS 07100
- GAUSS 07101 - GAUSS 07200
- GAUSS 07201 - GAUSS 07300
- GAUSS 07301 - GAUSS 07400
- GAUSS 07401 - GAUSS 07480
- GAUSS 50000 - GAUSS 50999
- GAUSS 51000 - GAUSS 51999
- GAUSS 52000 - GAUSS 52999
- GAUSS 53000 - GAUSS 53699
- 错误日志信息参考
- 系统表及系统视图
- 故障诊断指南
- 常见故障定位手段
- 常见故障定位案例
- core问题定位
- 权限/会话/数据类型问题定位
- 服务/高可用/并发问题定位
- 表/分区表问题定位
- 文件系统/磁盘/内存问题定位
- SQL问题定位
- 索引问题定位
- 源码解析
- 常见问题解答 (FAQs)
- 术语表
- Mogeaver
开发规范
如果用户在APP的开发中,使用了连接池机制,那么需要遵循如下规范:
- 如果在连接中设置了GUC参数,那么在将连接归还连接池之前,必须使用"SET SESSION AUTHORIZATION DEFAULT;RESET ALL;"将连接的状态清空。
- 如果使用了临时表,那么在将连接归还连接池之前,必须将临时表删除。
否则,连接池里面的连接就是有状态的,会对用户后续使用连接池进行操作的正确性带来影响。
兼容性原则:
新驱动前向兼容数据库,若需使用驱动与数据库同步增加的新特性,必须升级数据库。
概述
简介
尽管ISO针对SQL已经发布SQL-92、SQL:1999、SQL:2006等标准,但由于不同数据库自身的特性,使得同样功能在各自产品的实现上不尽相同,这也使得相关的语法规则各有千秋。因此,在制定具体开发规范的时候,需要针对不同数据库来编写相应的规范。
本规范强调实用性、可操作性,根据开发人员在编码过程中常见的问题和易犯的错误,对代码编写的各方面均进行了详细明确的规范和约束。主要包括下列内容:
- 命名规范
- 设计规范
- 语法规范
- 优化相关
- PG兼容性
除此之外,对规范的每条细则均给出具体的范例。
适用范围
本规范适用于MogDB 1.0.0及以上版本。
命名规范
对象命名统一规范
数据库对象,如database、schema、table、column、view、index、constraint、sequence、function、trigger等命名统一标准如下:
-
长度不能超过63个字符
-
命名尽量采用富有意义英文词汇
-
建议使用小写字母、数字、下划线的组合
-
建议不使用双引号即"包围,除非必须包含大写字母或空格等特殊字符
-
不建议以PG、GS开头(避免与系统DB object混淆),不建议以数字开头
-
禁止使用保留字,保留关键字参考官方文档
-
table能包含的column数目,根据字段类型的不同,数目在250到1600之间
临时及备份对象命名
- 临时或备份的数据库对象名,如table,建议添加日期,如
dba.trade_record_1970_01_01
(其中dba 为DBA专用schema,trade_record为表名,1970_01_01为备份日期)。
表空间命名
- 数据库的用户表空间用
ts_<表空间名>
来表现,其中,表空间名分为:- 数据空间:对于用户的缺省表空间,用
default
来表现。对于其他的表空间,根据寄存在表空间上的表的类别来表现。如放代码的表,用code
来表现。放客户资料的表,用customer
来表现。尽量用一个表空间来寄存该类的表。如果某表特殊大,可考虑单独使用一个表空间。 - 索引空间:在相应的数据表空间的名字前加idx_。如对用户缺省表空间的索引空间,用
ts_idx_default
来表现。对代码表的索引表空间,用ts_idx_code
来表现。
- 数据空间:对于用户的缺省表空间,用
索引命名
-
Index对象命名规则为:
表名_列名_idx
,如student_name_idx
,该索引命名方式为MogDB数据库在创建索引时没有明确指定索引名称时的默认命名方式。因此建议创建索引时,不显式给出index name,使用DBMS默认值。
create unique index on departments(department_id);
CREATE INDEX
\di
+----------+-------------------------------+--------+---------+
| Schema | Name | Type | Owner |
|----------+-------------------------------+--------+---------|
| mogdb | departments_department_id_idx | index | mogdb |
+----------+-------------------------------+--------+---------+
SELECT 1
变量命名
-
命名应该使用英文单词,避免使用拼音,特别不应该使用拼音简写。命名不允许使用中文或者特殊字符。
-
如果不涉及复杂运算,一律用number定义计数等简单应用。
分区表命名
-
分区表的表名遵循普通表的正常命名规则。
-
按时间范围分区(每月一个分区),分区名字为
PART_YYYYMM
。举例: PART_201901、PART_201902
函数命名
-
名称应与其实际功能保持一致。导致发生某动作应以动词为前缀命令。
示例:以下命名符合规范:
func_addgroups(增加多个群组) func_addgroup(增加一个群组)
设计规范
database设计
-
建议以业务功能来命名数据库,简单直观。
-
业务数据库推荐以兼容PG的方式来创建。
-
数据库编码推荐用utf8。
tablespace设计
-
频繁使用的表和索引单独存放在一个表空间,此表空间应在性能好的磁盘上创建。
-
以历史数据为主,或活跃度较低的表和索引可以存放在磁盘性能较差的表空间。
-
表和索引可以单独存放在不同的表空间。
-
表空间也可以按数据库分、按schema分或按业务功能来分。
-
每个database/schema对应一个表空间和一个相应索引表空间。
schema设计
- 在一个数据库下执行创建用户时,默认会在该数据库下创建一个同名schema。
- 不建议在默认public schema下创建数据库对象。
- 创建一个与用户名不同的schema给业务使用。
table设计
-
设计表结构时,应该规划好,避免经常添加字段,或者修改字段类型或长度。
-
必须为表添加注释信息,表名与注释信息相匹配。
-
禁止使用unlogged/ temp/temporary关键字创建业务表。
-
作为表间连接关系的字段,数据类型必须保持严格一致,避免索引无法正常使用。
-
禁止使用VARCHAR或其他字符类型来存储日期值,如果使用,则不能在此字段上做运算,需要在数据规范中严格定义。
-
对于频繁更新的astore表,建议建表时指定表的fillfactor=85,给HOT预留空间。
-
频繁更新使用的表应该单独放在存储性能好的表空间。
-
数据量超过亿级或占用磁盘超过10GB的表,建议考虑分区。
-
表结构中字段定义的数据类型与应用程序中的定义保持一致,表之间字段校对规则一致,避免报错或无法使用索引的情况发生。
说明:比如A表user_id字段数据类型定义为varchar,但是SQL语句查询为
where user_id=1234;
partition table设计
-
分区表的个数不建议超过1000个。
-
分区表可以按使用频度选择不同的表空间。
-
主键或唯一索引必须要包含分区键。
-
对于数据量比较大的表,根据表数据的属性进行分区,以得到较好的性能。
-
普通表若要转成分区表,需要新建分区表,然后把普通表中的数据导入到新建的分区表中。因此在初始设计表时,请根据业务提前规划是否使用分区表。
-
建议有定期历史数据删除需求的业务,表按时间分区,删除时不要使用DELETE操作,而是DROP或者TRUNCATE对应的表。
-
在分区表中不建议使用全局索引,因为做分区维护操作时可能会导致全局索引失效,造成难以维护。
分区表的使用
按照以下方式对范围分区表进行操作。
- 创建表空间
MogDB=# CREATE TABLESPACE example1 RELATIVE LOCATION 'tablespace1/tablespace_1';
MogDB=# CREATE TABLESPACE example2 RELATIVE LOCATION 'tablespace2/tablespace_2';
MogDB=# CREATE TABLESPACE example3 RELATIVE LOCATION 'tablespace3/tablespace_3';
MogDB=# CREATE TABLESPACE example4 RELATIVE LOCATION 'tablespace4/tablespace_4';
当结果显示为如下信息,则表示创建成功。
CREATE TABLESPACE
- 创建分区表
MogDB=# CREATE TABLE mogdb_usr.customer_address
(
ca_address_sk integer NOT NULL ,
ca_address_id character(16) NOT NULL ,
ca_street_number character(10) ,
ca_street_name character varying(60) ,
ca_street_type character(15) ,
ca_suite_number character(10) ,
ca_city character varying(60) ,
ca_county character varying(30) ,
ca_state character(2) ,
ca_zip character(10) ,
ca_country character varying(20) ,
ca_gmt_offset numeric(5,2) ,
ca_location_type character(20)
)
TABLESPACE example1
PARTITION BY RANGE (ca_address_sk)
(
PARTITION P1 VALUES LESS THAN(5000),
PARTITION P2 VALUES LESS THAN(10000),
PARTITION P3 VALUES LESS THAN(15000),
PARTITION P4 VALUES LESS THAN(20000),
PARTITION P5 VALUES LESS THAN(25000),
PARTITION P6 VALUES LESS THAN(30000),
PARTITION P7 VALUES LESS THAN(40000),
PARTITION P8 VALUES LESS THAN(MAXVALUE) TABLESPACE example2
)
ENABLE ROW MOVEMENT;
当结果显示为如下信息,则表示创建成功。
CREATE TABLE
创建列存分区表的数量建议不超过1000个。
- 插入数据
将表mogdb_usr.customer_address的数据插入到表mogdb_usr.customer_address_bak中。例如在数据库中创建了一个表mogdb_usr.customer_address的备份表mogdb_usr.customer_address_bak,现在需要将表mogdb_usr.customer_address中的数据插入到表mogdb_usr.customer_address_bak中,则可以执行如下命令。
MogDB=# CREATE TABLE mogdb_usr.customer_address_bak
(
ca_address_sk integer NOT NULL ,
ca_address_id character(16) NOT NULL ,
ca_street_number character(10) ,
ca_street_name character varying(60) ,
ca_street_type character(15) ,
ca_suite_number character(10) ,
ca_city character varying(60) ,
ca_county character varying(30) ,
ca_state character(2) ,
ca_zip character(10) ,
ca_country character varying(20) ,
ca_gmt_offset numeric(5,2) ,
ca_location_type character(20)
)
TABLESPACE example1
PARTITION BY RANGE (ca_address_sk)
(
PARTITION P1 VALUES LESS THAN(5000),
PARTITION P2 VALUES LESS THAN(10000),
PARTITION P3 VALUES LESS THAN(15000),
PARTITION P4 VALUES LESS THAN(20000),
PARTITION P5 VALUES LESS THAN(25000),
PARTITION P6 VALUES LESS THAN(30000),
PARTITION P7 VALUES LESS THAN(40000),
PARTITION P8 VALUES LESS THAN(MAXVALUE) TABLESPACE example2
)
ENABLE ROW MOVEMENT;
CREATE TABLE
MogDB=# INSERT INTO mogdb_usr.customer_address_bak SELECT * FROM mogdb_usr.customer_address;
INSERT 0 0
- 修改分区表行迁移属性
MogDB=# ALTER TABLE mogdb_usr.customer_address_bak DISABLE ROW MOVEMENT;
ALTER TABLE
- 删除分区
删除分区P8。
MogDB=# ALTER TABLE mogdb_usr.customer_address_bak DROP PARTITION P8;
ALTER TABLE
- 增加分区
增加分区P8,范围为 40000<= P8<=MAXVALUE。
MogDB=# ALTER TABLE mogdb_usr.customer_address_bak ADD PARTITION P8 VALUES LESS THAN (MAXVALUE);
ALTER TABLE
- 重命名分区
重命名分区P8为P_9。
MogDB=# ALTER TABLE mogdb_usr.customer_address_bak RENAME PARTITION P8 TO P_9;
ALTER TABLE
重命名分区P_9为P8。
MogDB=# ALTER TABLE mogdb_usr.customer_address_bak RENAME PARTITION FOR (40000) TO P8;
ALTER TABLE
- 修改分区的表空间
修改分区P6的表空间为example3。
MogDB=# ALTER TABLE mogdb_usr.customer_address_bak MOVE PARTITION P6 TABLESPACE example3;
ALTER TABLE
修改分区P4的表空间为example4。
MogDB=# ALTER TABLE mogdb_usr.customer_address_bak MOVE PARTITION P4 TABLESPACE example4;
ALTER TABLE
- 查询分区
查询分区P6。
MogDB=# SELECT * FROM mogdb_usr.customer_address_bak PARTITION (P6);
MogDB=# SELECT * FROM mogdb_usr.customer_address_bak PARTITION FOR (35888);
- 删除分区表和表空间
MogDB=# DROP TABLE mogdb_usr.customer_address_bak;
DROP TABLE
MogDB=# DROP TABLESPACE example1;
MogDB=# DROP TABLESPACE example2;
MogDB=# DROP TABLESPACE example3;
MogDB=# DROP TABLESPACE example4;
DROP TABLESPACE
column设计
-
避免与系统表的列名重复。
-
字段含义及数据类型要与程序代码设计保持一致。
-
所有字段必须要添加comment注释信息。
-
能使用数值类型,就不要使用字符类型。
-
禁止用字符类型存储日期数据。
-
时间类型字段统一使用timestamptz。
-
字段尽量要求not null,为字段提供默认值。
-
MogDB新建数据库默认兼容oracle,not null约束不允许传入空字符串,空字符串默认会转换为null,兼容PG模式的数据库不会有这个问题。
序列设计
-
禁止手动创建与表相关的序列,应指定serial/bingserial类型方式创建。
-
序列的步长建议设置为1。
-
不建议设置minvalue和maxvalue。
-
不建议设置cache,设置cache后序列号不连续。
-
禁止开启cycle。
-
序列应与代码中变量定义类型及范围一致,防止无法插入数据。
constraint设计
主键约束
-
每个table必须包含主键。
-
建议不要用有业务含义的名称作为主键,比如身份证或者国家名称,尽管其是unique的。
-
建议主键的一步到位的写法:
id serial primary key
或id bigserial primary key
。 -
建议内容系统中size较大的table主键的等效写法如下,便于后续维护。
create table test(id serial not null ); create unique index CONCURRENTLY ON test (id);
唯一约束
除主键外,需存在唯一性约束的,可通过创建以“uk_”为前缀的唯一索引实现。
外键约束
-
存在外键关系的表上尽量创建外键约束。
-
性能要求高而安全性自己控制的系统不建议使用外键。
-
使用外键时,一定要设置fk的action,例如cascade、set null、set default。
非空列
- 所有非空列必须添加not null约束
检查约束
- 对于字段有检查性约束,一般要求指定check规则。例如:性别、状态等字段。
index设计
- 频繁DML操作的表索引数量不建议超过5个。
- create/drop index时添加concurrently参数。
- 真正创建索引前可以使用虚拟索引确定索引的有效性。
- 经常出现在关键字order by、group by、distinct后面的字段,建立索引。
- 经常用作查询选择的字段,建立索引。
- 经常用作表连接的属性上,建立索引。
- 复合索引的字段数不建议超过3个。
- 复合索引得一个字段是常用检索条件。
- 复合索引第一个字段不应存在单字段索引。
- 对数据很少被更新的表,经常只查询其中的几个字段,考虑使用索引覆盖。
- 不要在有大量相同取值的字段上建立索引。
- 建议用unique index代替unique constraints便于后续维护。
- 建议对where中带多个字段and条件的高频query,参考数据分布情况,建多个字段的复合index。
- 无用的索引以及重复索引应删除,避免对执行计划及数据库性能造成负面影响。
view设计
-
尽量使用简单视图,尽可能少使用复杂视图。
简单视图定义:数据来自单个表,且无分组(DISTINCT/GROUP BY)、无函数。
复杂视图定义:数据来自多个表,或有分组,有函数,表的个数不能超过3个。
-
尽量不要使用嵌套视图,如果必须使用,不能超过2层嵌套。
function设计
-
函数必须检索数据库表记录或数据库其他对象,甚至修改(执行Insert、Delete、Update、Drop、Create等操作)数据库信息。
-
如果某项功能不需要和数据库打交道,则不得通过数据库函数的方式实现。
-
在函数中避免采用DML或DDL语句。
语法规范
关于NULL
-
说明:
NULL
的判断:IS NULL
、IS NOT NULL
。 -
说明:注意
boolean
类型取值true
、false
、NULL
。 -
说明:小心
NOT IN
集合中带有NULL
元素。 -
建议:使用
count(1)
或count(*)
来统计行数,而不建议使用count(col)
来统计行数,因为NULL
值不会计入。 -
规则:
count(多列列名)
时,多列列名必须使用括号,例如count( (col1,col2,col3) )
。 -
注意:多列的
count
,即使所有列都为NULL
,该行也被计数,所以效果与count(*)
一致。 -
注意:
count(distinct col)
计算某列的非NULL
不重复数量,NULL
不被计数;count(distinct (col1,col2,...) )
计算多列的唯一值时,NULL
会被计数,同时NULL
与NULL
会被认为是相同的。 -
注意:
NULL
的count
与sum
select count(1), count(a), sum(a) from (SELECT * FROM (VALUES (NULL), (2) ) v(a)) as foo where a is NULL; count | count | sum -------+-------+----- 1 | 0 | (1 row)
-
判断两个值是否相同(将
NULL
视为相同的值)select null is distinct from null; ?column? \--------- f (1 row) select null is distinct from 1; ?column? \--------- t (1 row) select null is not distinct from null; ?column? \--------- t (1 row) select null is not distinct from 1; ?column? \--------- f (1 row)
关于索引失效
-
在书写SQL语句时经常会在查询中使用函数及表达式,建议尽量不要在条件列上使用函数及表达式。在条件列上使用函数或者表达式的时候会导致使用不上该条件列上的索引,从而影响SQL的查询效率。尽量把函数或者表达式用在条件值上,避免使用在条件列上。示例:
select name from tab where id+100>1000;
可以改写为如下形式:
select name from tab where id>1000-100;
-
查询语句中尽量不要使用左模糊查询。示例:
select id from tab where name like '%ly';
-
查询中尽量不要使用负向查询,如
not in/like
,示例:select id from tab where name not in ('ly','ty');
确保使用到所有变量和参数
- 声明变量也会产生一定的系统开销,并会显得代码不够严谨,在编译时未使用的变量会有告警,需修改以确保没有任何告警。
Query操作
DDL操作
-
业务高峰期禁止对已存在的表执行任何DDL操作
-
所有生产DDL操作必须经过开发测试环境验证
-
维护索引时应采用concurrently的方式
-
应该使用pg_repack替换vacuum full来重建表
-
大表添加带默认值的字段时,应拆分为:添加字段、填补默认值及添加非空约束三部分,如将
alter table t add column col datatype not null default xxx;
分解为如下,避免填充default
值导致的过长时间锁表alter table t add column col datatype ; alter table t alter column col set default xxx; update table t set column= DEFAULT where id in ( select id from t where column is null limit 1000 ) ; \watch 3 alter table t alter column col set not null;
DML操作
-
更新数据的SQL语句禁止出现
where 1=1
-
单条DML语句操作的数据量不超过10万
-
清空表中的数据时,应使用
truncate
-
对于风险性较高的操作,应该显示的开启事务,确认无误后在提交
-
事务中SQL逻辑尽量简单,操作执行完后要及时提交,避免
idle in transaction
状态 -
大批数据入库时应使用
copy
替换insert
-
数据导入前考虑先删除索引,导入完成后重建
DQL操作
-
禁止使用
select *
,应用具体所需字段替换 -
禁止使用
where 1=1
,避免全表扫描或笛卡尔积 -
检索条件值应该与字段类型保持一致,防止不走索引
-
等号左边的字段应该与索引保持一致,尤其是条件索引或函数索引
-
关注慢SQL的执行计划,如与预期不一致,尽快修改
-
使用
count(*)
或count(1)
来统计行数,count(column)
不会统计null
行 -
限制
join
的数量,不建议超过3个 -
递归查询需要做好限制,防止无限循环
-
对于or运算,应该使用
union all
或union
替换
数据导入
-
建议大批量的数据入库时,使用
copy
,不建议使用insert
,以提高写入速度 -
导入数据前需要先删除相关索引,导入完成后重建,提高数据导入速度
事务操作
-
事务中的sql逻辑尽可能的简单,让每个事务的粒度尽可能小,尽量lock少的资源,避免lock、deadlock的产生,事务执行完及时提交
-
执行CRAETE、DROP、ALTER等DDL操作,尤其多条,不要显式的开transaction,因为加lock的mode非常高,极易产生deadlock
-
state为
idle in transaction
的连接,如果出现在Master,会无谓的lock住相应的资源,可导致后续产生lock,甚至deadlock;出现在Slave,可导致卡住主从同步
其他
-
建议运行在SSD上的实例,random_page_cost(默认值为4)设置为1.0~2.0之间,使查询规划器更倾向于使用索引扫描
-
建议在需要使用
explain analyze
查看实际真正执行计划与时间时,如果是写入query,强烈建议先开启事务,然后回滚。 -
对于频繁更新,膨胀率较高的表,应找窗口期执行表重组,降低高水位
PostgreSQL兼容性
建库规范
MogDB创建数据库使用PG兼容模式方法如下:
create database dbnam DBCOMPATIBILITY='PG' encoding=’utf8’;
数据类型
数值类型
在开发使用中,MogDB只允许使用smallint、integer、bigint、numeric[(p[,s])]、serial、bigserial这几种类型。
类型 | PostgreSQL | MogDB | 存储尺寸 | 备注 |
---|---|---|---|---|
tinyint | / | 支持 | 1字节 | 0 ~ 255 |
smallint | 支持 | 支持 | 2字节 | -32,768 ~ +32,767 |
integer | 支持 | 支持 | 4字节 | -2,147,483,648 ~ +2,147,483,647 |
binary_integer | / | 支持 | / | integer别名 |
bigint | 支持 | 支持 | 8字节 | -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 |
decimal[(p[,s])] | 支持 | 支持 | 可变字节 | 最高小数点前131072位,以及小数点后16383位 |
numeric[(p[,s])] | 支持 | 支持 | 可变字节 | 最高小数点前131072位,以及小数点后16383位 |
number[(p[,s])] | / | 支持 | / | numeric别名 |
real | 支持 | 支持 | 4字节 | 6位十进制数字精度 |
float4 | / | 支持 | 4字节 | 6位十进制数字精度 |
double precision | 支持 | 支持 | 8字节 | 15位十进制数字精度 |
binary_double | / | 支持 | 8字节 | double precision别名 |
float8 | / | 支持 | 8字节 | 15位十进制数字精度 |
float[(p )] | / | 支持 | 4字节或8字节 | |
dec[(p,[s])] | / | 支持 | / | 最高小数点前131072位,以及小数点后16383位 |
integer[(p,[s])] | / | 支持 | / | 最高小数点前131072位,以及小数点后16383位 |
smallserial | 支持 | 支持 | 2字节 | 1 ~ 32,767 |
serial | 支持 | 支持 | 4字节 | 1 ~ 2,147,483,647 |
bigserial | 支持 | 支持 | 8字节 | 1 ~ 9,223,372,036,854,775,807 |
tinyint | / | 支持 | 1字节 | 0 ~ 255 |
字符类型
在开发使用中,MogDB只允许使用char(n)、varchar(n)、text字符类型。
类型 | PostgreSQL | MogDB | 存储尺寸 | 备注 |
---|---|---|---|---|
char(n) | 支持 | 支持 | pg中最大为1GB,og中最大为10MB | pg中n指字符数量,og中n指字节数量,兼容pg模式配置下n代表字符数量 |
nchar(n) | / | 支持 | 最大为10MB | n指字节数量,兼容pg模式配置下n代表字符数量 |
varchar(n) | 支持 | 支持 | pg中最大为1GB,og中最大为10MB | pg中n指字符数量,og中n指字节数量,兼容pg模式配置下n代表字符数量 |
varchar2(n) | / | 支持 | 最大为10MB | varchar(n)别名 |
nvarchar2(n) | / | 支持 | 最大为10MB | n指字符数量 |
text | 支持 | 支持 | 1GB - 1 | |
clob | / | 支持 | 1GB - 1 | text别名 |
时间类型
在开发使用中,MogDB只允许使用timestamp[(p)][with time zone]
、date
期类型。
类型 | PostgreSQL | MogDB | 存储尺寸 | 备注 |
---|---|---|---|---|
timestamp[(p )][without time zone] | 支持 | 支持 | 8字节 | 4713 BC - 294276 AD |
timestamp[(p )][with time zone] | 支持 | 支持 | 8字节 | 4713 BC - 294276 AD |
date | 支持 | 支持 | 4字节 | 4713 BC - 5874897 AD (og实际存储空间大小为8字节) |
time[(p )][without time zone] | 支持 | 支持 | 8字节 | 00:00:00 - 24:00:00 |
time[(p )][with time zone] | 支持 | 支持 | 12字节 | 00:00:00+1459 - 24:00:00-1459 |
interval[fields][(p )] | 支持 | 支持 | 16字节 | -178000000年 - 178000000年 |
smalldatetime | / | 支持 | 8字节 | 日期和时间,不带时区,精确到分钟,秒位大于等于30秒进一位 |
interval day(1) to second(p) | / | 支持 | 16字节 | |
reltime | / | 支持 | 4字节 |
json类型
MogDB只允许使用json类型。
类型 | PostgreSQL | MogDB | 存储尺寸 | 备注 |
---|---|---|---|---|
json | 支持 | 支持 | / | |
jsonb | 支持 | 2.1开始支持 | / |
关键字
PostgreSQL与MogDB数据库中关键字差异化说明,保留是指数据库保留关键字,不允许自定义使用;非保留或空是指可以自定义使用,MogDB保留字详情,请参考此页面。
关键字 | MogDB | PostgreSQL |
---|---|---|
AUTHID | 保留 | #N/A |
BUCKETS | 保留 | #N/A |
COMPACT | 保留 | #N/A |
DATE | 非保留(不能是函数或类型) | |
DELTAMERGE | 保留 | #N/A |
EXCLUDED | 保留 | #N/A |
FENCED | 保留 | #N/A |
GROUPING | 非保留(不能是函数或类型) | |
HDFSDIRECTORY | 保留 | #N/A |
IS | 保留 | 保留(可以是函数或类型) |
ISNULL | 非保留 | 保留(可以是函数或类型) |
LATERAL | 保留 | |
LESS | 保留 | #N/A |
MAXVALUE | 保留 | 非保留 |
MINUS | 保留 | #N/A |
MODIFY | 保留 | #N/A |
NLSSORT | 保留 | #N/A |
NUMBER | 非保留(不能是函数或类型) | |
PERFORMANCE | 保留 | #N/A |
PROCEDURE | 保留 | 非保留 |
REJECT | 保留 | #N/A |
ROWNUM | 保留 | #N/A |
SYSDATE | 保留 | #N/A |
VERIFY | 保留 | #N/A |
隐式转换异同
input_type | target_type | MogDB | PG |
---|---|---|---|
bool | int2、int4、int8 | 支持 | int4不支持,其它无 |
int2 | bool、text、bpchar、varchar、interval | 支持(bpchar无) | 无 |
int4 | bool、int2、text、bpchar、varchar、interval | 支持(bpchar无) | bool不支持,int2为in assignment,其它无 |
int8 | bool、text、bpchar、varchar | 支持(bpchar无) | 无 |
text | int8、int4、int2、float4、float8、date、timestamp、nemeric | 支持 | 无 |
float4 | int8、int4、int2、text、bpchar、varchar | 支持(bpchar无) | 前三in assignment,后无 |
float8 | int8、int4、int2、text、float4、bpchar、varchar、interval、numeric | 支持(bpchar无) | int8、int4、int2、float4、numeric为in assignment,其它无 |
bpchar | int8、int4、date、timestamp、numeric | ||
date | text、bpchar、varchar | 支持(bpchar无) | 无 |
timestamp | text、varchar | 支持 | 无 |
timestamptz | text | 支持 | 无 |
numeric | int8、int4、int2、text、bpchar、varchar、interval | 支持(bpchar无) | 前三in assignment,后无 |