华为云用户手册

  • 注意事项 如果没有参数,VACUUM处理当前数据库里用户拥有相应权限的每个表。如果参数指定了一个表,VACUUM只处理指定的表。 要对一个表进行VACUUM操作,通常用户必须是表的所有者或者被授予了指定表VACUUM权限的用户,三权分立开关关闭时,默认系统管理员有该权限。数据库的所有者允许对数据库中除了共享目录以外的所有表进行VACUUM操作(该限制意味着只有系统管理员才能真正对一个数据库进行VACUUM操作)。VACUUM命令会跳过那些用户没有权限的表进行垃圾回收操作。 VACUUM不能在事务块内执行。 建议生产数据库经常清理(至少每晚一次),以保证不断地删除失效的行。尤其是在增删了大量记录之后,对受影响的表执行VACUUM ANALYZE命令是一个很好的习惯。这样将更新系统目录为最近的更改,并且允许查询优化器在规划用户查询时有更好地选择。 不建议日常使用FULL选项,但是可以在特殊情况下使用。例如在用户删除了一个表的大部分行之后,希望从物理上缩小该表以减少磁盘空间占用。VACUUM FULL通常要比单纯的VACUUM收缩更多的表尺寸。FULL选项并不清理索引,所以推荐周期性的运行REINDEX命令。如果执行此命令后所占用物理空间无变化(未减少),请确认是否有其他活跃事务(删除数据事务开始之前开始的事务,并在VACUUM FULL执行前未结束)存在,如果有等其他活跃事务退出进行重试。 VACUUM FULL通过重建表的方式将表内空闲空间归还给表空间,重建过程需要额外申请表中有效数据相当的存储空间。对于非段页式表,VACUUM FULL执行结束后,原表所占物理文件会被删除,原表所占的物理文件的空间会归还给操作系统;对于段页式表,VACUUM FULL执行结束后,原表所占的物理空间,会被归还给段页式数据文件,不会归还给操作系统。 VACUUM会导致I/O流量的大幅增加,这可能会影响其他活动会话的性能。因此,有时候会建议使用基于开销的VACUUM延迟特性。 如果指定了VERBOSE选项,VACUUM将打印处理过程中的信息,以表明当前正在处理的表。各种有关当前表的统计信息也会打印出来。 当含有带括号的选项列表时,选项可以以任何顺序写入。如果没有括号,则选项必须按语法显示的顺序给出。 VACUUM和VACUUM FULL时,会根据参数vacuum_defer_cleanup_age延迟清理行存表记录,即不会立即清理刚刚删除的元组。 VACUUM ANALYZE先执行一个VACUUM操作,然后给每个选定的表执行一个ANALYZE。对于日常维护脚本而言,这是一个很方便的组合。 简单的VACUUM(不带FULL选项)只是简单地回收空间并且令其可以再次使用。这种形式的命令可以和对表的普通读写并发操作,因为没有请求排他锁。VACUUM FULL执行更广泛的处理,包括跨块移动行,以便把表压缩到最少的磁盘块数目里。这种形式要慢许多并且在处理的时候需要在表上施加一个排他锁。 同时执行多个VACUUM FULL可能出现死锁。 如果没有打开xc_maintenance_mode参数,那么VACUUM FULL操作将跳过所有系统表。 执行DELETE后立即执行VACUUM FULL命令不会回收空间。执行DELETE后再执行1000个非SELECT事务,或者等待1s后再执行1个事务,之后再执行VACUUM FULL命令空间才会回收。 VACUUM FULL期间会对表加排他锁,不建议在业务高峰期运行VACUUM FULL,可能导致等待时间过长或者业务中断。 Ustore手动VACUUM与Astore手动VACUUM行为一致、会对堆表、索引等进行加锁清理;而Ustore的AUTOVACUUM仅做分区表GPI清理、堆表FSM更新以及索引页面回收。 VACUUM FULL分区表时,会遍历分区进行清理,并在分区清理后重建GPI,因此当分区较多时,建议先删除GPI,在VACUUM FULL执行完成后重新创建索引,以此降低VACUUM FULL的执行时间。 在线VACUUM FULL不支持对于数据库级、索引级、分区表、二级分区表、段页式表、hash bucket表、临时表、unlogged表、HTAP表对象执行在线VACUUM FULL。如对象涉及以上不支持的类型,ONLINE关键字将不会生效,VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句不支持在线执行。 执行在线VACUUM FULL操作时,需预留足够的磁盘空间,即剩余空间是所操作的表(及其上索引等附属品)总和的1倍。 如果用户取消在线VACUUM FULL执行过程,首先进入残留清理流程,如果用户再次取消,则会结束清理流程导致残留。 在线VACUUM FULL与用户业务之间存在资源争抢,不适合大业务背景下做在线VACUUM FULL。对于资源有限的场景,建议采用细粒度资源管控进行操作,且不建议使用并行加速功能。 M-Compatibility模式下不支持在线VACUUM FULL操作。 在线VACUUM FULL不支持FREEZE关键字,若同时指定FREEZE关键字与ONLINE关键字,VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句不支持在线执行。 在线VACUUM FULL不支持在事务内执行,不支持在存储过程中执行。 若在线VACUUM FULL操作失败,表上可能会有明显存储空间膨胀。其中膨胀程度与在线VACUUM FULL执行时长以及并发写操作量成正比。长事务可能会阻塞在线VACUUM FULL,建议避免在长事务存在时进行在线VACUUM FULL。 在线VACUUM FULL执行后期将阻塞DQL操作,对并发的DML操作报错。 在线VACUUM FULL执行期间,应尽量避免与其他DDL并发执行,否则可能会出现死锁、报错等;若出现此类情况,可以重新连接客户端进行重试。 在线VACUUM FULL过程中会生成名为online$$ddl$$[hash值]的模式。 模式的属主默认为初始用户,不建议在线VACUUM FULL执行中操作此模式,可能会导致中止在线VACUUM FULL并产生未知错误。不建议用户对此模式下的表格进行查询。 用户不可创建online$$为前缀的模式,会有报错提示。若已存在同名模式冲突,在线VACUUM FULL将不会生效,在线VACUUM FULL默认以离线方式执行,并提示当前VACUUM FULL语句是因为模式名冲突不可在线。 -
  • 语法格式 回收空间并更新统计信息,对关键字顺序无要求。 VACUUM [ ( { FULL | FREEZE | VERBOSE | { ANALYZE | ANALYSE } } [, ... ] ) ] [ table_name [ (column_name [, ... ] ) ] [ PARTITION ( partition_name ) | SUBPARTITION ( subpartition_name ) ] ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ]; 仅回收空间,不更新统计信息。 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] [ table_name [ PARTITION ( partition_name ) | SUBPARTITION ( subpartition_name ) ] ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ]; 回收空间并更新统计信息,且对关键字顺序有要求。 VACUUM [ FULL ] [ FREEZE ] [ VERBOSE ] { ANALYZE | ANALYSE } [ VERBOSE ] [ table_name [ ( column_name [, ... ] ) ] ] [ PARTITION ( partition_name ) ] [ OFFLINE | [ ONLINE [ WITH ( { online_parameter = value } [, ... ] ) ] ] ];
  • 操作步骤 使用gsql连接到 GaussDB 服务器。 gsql工具使用-d参数指定目标数据库名、-U参数指定数据库用户名、-h参数指定主机名、-p参数指定端口号信息。 若未指定数据库名称,则使用初始化时默认生成的数据库名称;若未指定数据库用户名,则默认使用当前操作系统用户作为数据库用户名;当某个值没有前面的参数(-d、-U等)时,若连接的命令中没有指定数据库名(-d)则该参数会被解释成数据库名;如果已经指定数据库名(-d)而没有指定数据库用户名(-U)时,该参数则会被解释成数据库用户名。 示例1,使用omm用户连接到postgres数据库的8000端口。 gsql -d postgres -p 8000 示例2,使用jack用户连接到远程主机postgres数据库的8000端口。 gsql -h 10.180.123.163 -d postgres -U jack -p 8000 集中式数据库实例中,连接主DataNode时可以把DataNode的IP地址使用逗号分隔全部添加到-h后,gsql将依次从前往后连接每个IP地址,查询当前DataNode是否为主DataNode,如果不是则断开连接尝试下一个IP地址,直到找到主DataNode为止。 gsql -h 10.180.123.163,10.180.123.164,10.180.123.165 -d postgres -U jack -p 8000 示例3,参数postgres和omm不属于任何选项时,分别被解释成了数据库名和用户名。 gsql postgres omm -p 8000 等效于 gsql -d postgres -U omm -p 8000 详细的gsql参数请参见命令参考。 执行SQL语句。 以创建数据库human_staff为例。 1 2 gaussdb=# CREATE DATABASE human_staff; CREATE DATABASE 通常,输入的命令行在遇到分号的时候结束。如果输入的命令行没有错误,结果就会输出到屏幕上。 执行gsql元命令。 以列出GaussDB中所有的数据库和描述信息为例。 1 2 3 4 5 6 7 8 9 10 11 12 gaussdb=# \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges ----------------+----------+-----------+---------+-------+----------------------- human_resource | omm | SQL_ASCII | C | C | postgres | omm | SQL_ASCII | C | C | template0 | omm | SQL_ASCII | C | C | =c/omm + | | | | | omm=CTc/omm template1 | omm | SQL_ASCII | C | C | =c/omm + | | | | | omm=CTc/omm human_staff | omm | SQL_ASCII | C | C | (5 rows) 更多gsql元命令请参见元命令参考。
  • 示例 以把一个查询分成多行输入为例。注意提示符的变化: 1 2 3 4 5 gaussdb=# CREATE TABLE HR.areaS( gaussdb(# area_ID NUMBER, gaussdb(# area_NAME VARCHAR2(25) gaussdb-# )tablespace EXAMPLE; CREATE TABLE 查看表的定义: 1 2 3 4 5 6 gaussdb=# \d HR.areaS Table "hr.areas" Column | Type | Modifiers -----------+-----------------------+----------- area_id | numeric | not null area_name | character varying(25) | 向HR.areaS表插入四行数据: 1 2 3 4 5 6 7 8 gaussdb=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (1, 'Europe'); INSERT 0 1 gaussdb=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (2, 'Americas'); INSERT 0 1 gaussdb=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (3, 'Asia'); INSERT 0 1 gaussdb=# INSERT INTO HR.areaS (area_ID, area_NAME) VALUES (4, 'Middle East and Africa'); INSERT 0 1 切换提示符: 1 2 gaussdb=# \set PROMPT1 '%n@%m %~%R%#' omm@[local] gaussdb=# 查看表: 1 2 3 4 5 6 7 8 omm@[local] gaussdb=# SELECT * FROM HR.areaS; area_id | area_name ---------+------------------------ 1 | Europe 4 | Middle East and Africa 2 | Americas 3 | Asia (4 rows) 可以用\pset命令以不同的方法显示表: 1 2 3 4 5 6 7 8 9 10 11 12 omm@[local] gaussdb=# \pset border 2 Border style is 2. omm@[local] gaussdb=# SELECT * FROM HR.areaS; +---------+------------------------+ | area_id | area_name | +---------+------------------------+ | 1 | Europe | | 2 | Americas | | 3 | Asia | | 4 | Middle East and Africa | +---------+------------------------+ (4 rows) 1 2 3 4 5 6 7 8 9 10 omm@[local] gaussdb=# \pset border 0 Border style is 0. omm@[local] gaussdb=# SELECT * FROM HR.areaS; area_id area_name ------- ---------------------- 1 Europe 2 Americas 3 Asia 4 Middle East and Africa (4 rows) 使用元命令: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 omm@[local] gaussdb=# \a \t \x Output format is unaligned. Showing only tuples. Expanded display is on. omm@[local] gaussdb=# SELECT * FROM HR.areaS; area_id|2 area_name|Americas area_id|1 area_name|Europe area_id|4 area_name|Middle East and Africa area_id|3 area_name|Asia omm@[local] gaussdb=#
  • 控制文件 语法说明: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 LOAD [ DATA ] [CHARACTERSET char_set_name] [INFILE [directory_path] [filename ] ] [BADFILE [directory_path] [filename ] ] [OPTIONS(name=value)] [{ INSERT | APPEND | REPLACE | TRUNCATE }] INTO TABLE table_name [{ INSERT | APPEND | REPLACE | TRUNCATE }] [FIELDS CS V] [TERMINATED [BY] { 'string' }] [OPTIONALLY ENCLOSED BY { 'string' }] [TRAILING NULLCOLS] [ WHEN { (start:end) | column_name } {= | !=} ‘string’ ] [( col_name [ [ POSITION ({ start:end }) ] ["sql_string"] ] | [ FILLER [column_type [external] ] ] | [ CONSTANT "string" ] | [ SEQUENCE ( { COUNT | MAX | integer } [, incr] ) ]|[NULLIF (COL=BLANKS)] [, ...] )]
  • 安装部署 在存放数据源文件的服务器上,安装并配置gs_loader客户端工具,方便使用gs_loader工具进行数据的导入。 创建用于存放gs_loader工具包的目录。 mkdir -p /opt/bin 将gsql工具包上传至新创建的目录中。 以上传EULER Linux版本的工具包为例,将软件安装包中的gsql工具包“GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_gsql.tar.gz”上传至新创建的目录中。 在工具包所在的目录下,解压工具包。 cd /opt/bin tar -zxvf GaussDB-Kernel_数据库版本号_操作系统版本号_64bit_gsql.tar.gz source gsql_env.sh 验证工具位置及版本信息。 which gs_loader 验证客户端版本信息。 gs_loader工具版本与gsql工具版本相对应,直接查询gsql客户端版本即可验证客户端版本信息。 gsql -V 验证数据库版本信息,确保与客户端工具版本保持一致。 使用gsql工具成功连接数据库后输入: select version();
  • 概述 gs_loader工具用于进行数据导入。gs_loader将控制文件支持的语法转换为\COPY语法,然后利用已有的\COPY功能,做主要数据导入工作,同时gs_loader将\COPY结果记录到日志中。 使用gs_loader前请确保gs_loader版本与gsql版本、数据库版本保持一致。 gs_loader工具当前不支持M-Compatibility数据库。 gs_loader工具当前支持PDB。
  • 使用权限 使用场景分为三权分立场景下及非三权分立场景下的使用。使用者可以选择将guc参数enableSeparationOfDuty设置为on或者off来控制三权分立功能的开启或关闭。 GUC参数enable_copy_error_log是控制是否使用错误表pgxc_copy_error_log的参数,默认为off、即不使用错误表,错误记录直接记录到gs_loader的bad文件中。如果该参数设置为on,则会使用错误表pgxc_copy_error_log,将错误记录插入错误表。 默认场景,不开启三权分立(即enableSeparationOfDuty=off)时,使用者可以是数据库普通用户或管理员用户。当使用者为普通用户的时候,需要管理员用户对普通用户赋权。管理员账户可以直接使用。错误表pgxc_copy_error_log通过GUC参数enable_copy_error_log控制开启和关闭,默认关闭。 使用管理员用户创建新的用户: CREATE USER load_user WITH PASSWORD '************'; 给新用户授权pg_catalog.gs_copy_summary表: gs_loader使用的public.gs_copy_summary变更为pg_catalog.gs_copy_summary,原public.gs_copy_summary表废弃。由于public.gs_copy_summary可能与用户表同名,因此需要用户进行识别,确认不是用户表后,将数据迁移到pg_catalog.gs_copy_summary表里之后,删除public.gs_copy_summary。由于存在pg_catalog.gs_copy_summary,gsql元命令\d(+)优先找到pg_catalog.gs_copy_summary,而因为是系统表的缘故不显示,因此列表中找不到gs_copy_summary,但是实际上public.gs_copy_summary是存在的。可以直接通过public.gs_copy_summary引用。 GRANT INSERT,SELECT ON pg_catalog.gs_copy_summary To load_user; (可选)给新用户授权错误表pgxc_copy_error_log: gs_loader使用的public.pgxc_copy_error_log变更为pg_catalog.pgxc_copy_error_log,原public.pgxc_copy_error_log表废弃。由于public.pgxc_copy_error_log可能与用户表同名,因此需要用户进行识别,确认不是用户表后,将数据迁移到pg_catalog.pgxc_copy_error_log表里之后,删除public.pgxc_copy_error_log。由于存在pg_catalog.pgxc_copy_error_log,gsql元命令\d(+)优先找到pg_catalog.pgxc_copy_error_log,而因为是系统表的缘故不显示,因此列表中找不到pgxc_copy_error_log,但是实际上public.pgxc_copy_error_log是存在的。可以直接通过public.pgxc_copy_error_log引用。 GRANT INSERT,SELECT,DELETE ON pg_catalog.pgxc_copy_error_log To load_user; 开启三权分立(即enableSeparationOfDuty=on)时,使用者可以是数据库普通用户或管理员用户。使用前需要到各自的schema下创建pgxc_copy_error_log表以及gs_copy_summary这两张表并添加索引,不需要再进行授权。 因为pg_catalog模式下始终存在pgxc_copy_error_log以及gs_copy_summary两张表,而pg_catalog模式在search_path中优先级高于用户模式,因此在三权分立场景下无法直接通过gsql元命令\d(+)查询到,使用这两张表需要显式指定用户模式。 使用初始用户创建新用户: CREATE USER load_user WITH PASSWORD '********'; 从初始用户切换为新用户: \c - load_user 创建gs_copy_summary表并添加索引: CREATE TABLE load_user.gs_copy_summary(relname varchar, begintime timestamptz, endtime timestamptz, id bigint, pid bigint, readrows bigint, skiprows bigint, loadrows bigint, errorrows bigint, whenrows bigint, allnullrows bigint, detail text); CREATE INDEX gs_copy_summary_idx ON load_user.gs_copy_summary(id); (可选)创建pgxc_copy_error_log表并添加索引: 如果guc参数enable_copy_error_log未设置(默认为off),或者设置为off,则无需使用错误表,无需创建。否则需要创建该错误表。 CREATE TABLE load_user.pgxc_copy_error_log (relname varchar, begintime timestamptz, filename varchar, lineno int8, rawrecord text, detail text); CREATE INDEX copy_error_log_relname_idx ON load_user.pgxc_copy_error_log(relname);
  • 使用指导 (非三权分立)仅对于普通用户。 (在管理员用户下)创建用户: CREATE USER load_user WITH PASSWORD '************'; (在管理员用户下)给用户授权gs_copy_summary表: GRANT INSERT,SELECT ON pg_catalog.gs_copy_summary To load_user; 切换用户。 \c - load_user (三权分立)对于普通用户和管理员用户。 (在初始用户下)创建用户: CREATE USER load_user WITH PASSWORD '********'; (在初始用户下)切换为load_user用户: \c - load_user 创建gs_copy_summary表并添加索引。 CREATE TABLE load_user.gs_copy_summary(relname varchar, begintime timestamptz, endtime timestamptz, id bigint, pid bigint, readrows bigint, skiprows bigint, loadrows bigint, errorrows bigint, whenrows bigint, allnullrows bigint, detail text); CREATE INDEX gs_copy_summary_idx ON load_user.gs_copy_summary(id); 创建表和控制文件,准备数据文件。 创建表loader_tbl。 1 2 3 4 5 6 7 CREATE TABLE loader_tbl ( ID NUMBER, NAME VARCHAR2(20), CON VARCHAR2(20), DT DATE ); (在gs_loader客户端机器上)创建控制文件loader.ctl。 1 2 3 4 5 6 7 8 9 10 11 LOAD DATA truncate into table loader_tbl WHEN (2:2) = ',' fields terminated by ',' trailing nullcols ( id integer external, name char(32), con ":id || '-' || :name", dt date ) (在gs_loader客户端机器上)创建guc参数文件guc.txt。 1 set a_format_copy_version='s1'; (在gs_loader客户端机器上)创建数据文件data.csv。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1,OK,,2007-07-8 2,OK,,2008-07-8 3,OK,,2009-07-8 4,OK,,2007-07-8 43,DISCARD,,2007-07-8 ,,, 32,DISCARD,,2007-07-8 a,ERROR int,,2007-07-8 8,ERROR date,,2007-37-8 ,,,, , 8,ERROR fields,,2007-37-8 ,,, 5,OK,,2021-07-30 进行导入。 (在gs_loader客户端机器上)执行导入前,先确认gs_loader工具有可执行权限。确保当前路径有文件写入权限(gs_loader在处理过程中会生成一些临时文件,导入完成后自动删除)。 1 gs_loader control=loader.ctl data=data.csv db=testdb bad=loader.bad guc_param=guc.txt errors=5 port=8000 passwd=************ user=load_user 执行结果: 1 2 3 4 5 6 gs_loader: version 0.1 5 Rows successfully loaded. log file is: loader.log gs_copy_summary用于记录调用的copy语法及其详细情况,[badfile]_bad.log文件用于记录错误数据及其详细情况。为防止上一次导入时记录的错误数据以及详细情况被覆盖,建议每次执行导入时使用不同的bad参数。如果使用错误表pgxc_copy_error_log记录错误数据以及详细情况,请开启GUC参数enable_copy_error_log。如需删除表中的数据,可以对上述表执行truncate或者delete操作。
  • 功能描述 根据查询结果创建表。 CREATE TABLE AS创建一个表并且用来自SELECT命令的结果填充该表。该表的字段和SELECT输出字段的名称及数据类型相关。不过用户可以通过明确地给出一个字段名称列表来覆盖SELECT输出字段的名称。 CREATE TABLE AS和创建视图有些相似,CREATE TABLE AS会创建一个新表并且只计算该查询一次用来将数据写入新表中。这个表之后将不会根据源表变化而改变。相反视图只要被查询,它的定义SELECT语句将会被重新计算。
  • 语法格式 CREATE [ [ GLOBAL | LOCAL ] [ TEMPORARY | TEMP ] | UN LOG GED ] TABLE [ IF NOT EXISTS ] table_name [ (column_name [, ...] ) ] [ { ENGINE [ = ] { InnoDB | 'InnoDB' | "InnoDB" } } [ [ , ] ... ] ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ ON COMMIT { PRESERVE ROWS | DELETE ROWS } ] [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] [ TABLESPACE tablespace_name ] AS query [ WITH [ NO ] DATA ];
  • 参数说明 UNLOGGED 指定表为非日志表。在非日志表中写入的数据不会被写入到预写日志中,这样就会比普通表快很多。但是,非日志表在冲突或异常关机后会被自动删截,非日志表中的内容也不会被复制到备用服务器中,在该类表中创建的索引也不会被自动记录。 使用场景:非日志表不能保证数据的安全性,用户应该在确保数据已经做好备份的前提下使用,例如系统升级时进行数据的备份。 故障处理:当异常关机等操作导致非日志表上的索引发生数据丢失时,用户应该对发生错误的索引进行重建。 GLOBAL | LOCAL 创建临时表时可以在TEMP或TEMPORARY前指定GLOBAL或LOCAL关键字。如果指定GLOBAL关键字,GaussDB会创建全局临时表,否则GaussDB会创建本地临时表。 TEMPORARY | TEMP 如果指定TEMP或TEMPORARY关键字,则创建的表为临时表。临时表分为全局临时表和本地临时表两种类型。创建临时表时如果指定GLOBAL关键字则为全局临时表,否则为本地临时表。 全局临时表的元数据对所有会话可见,会话结束后元数据继续存在。会话与会话之间的用户数据、索引和统计信息相互隔离,每个会话只能看到和更改自己提交的数据。全局临时表有两种模式:一种是基于会话级别的(ON COMMIT PRESERVE ROWS), 当会话结束时自动清空用户数据;一种是基于事务级别的(ON COMMIT DELETE ROWS), 当执行COMMIT或ROLLBACK时自动清空用户数据。建表时如果没有指定ON COMMIT选项,则缺省为会话级别。与本地临时表不同,全局临时表建表时可以指定非pg_temp开头的SCHEMA。 本地临时表只在当前会话可见,本会话结束后会自动删除。因此,在除当前会话连接的数据库节点故障时,仍然可以在当前会话上创建和使用临时表。由于临时表只在当前会话创建,对于涉及对临时表操作的DDL语句,会产生DDL失败的报错。因此,建议DDL语句中不要对临时表进行操作。TEMP和TEMPORARY等价。 本地临时表通过每个会话独立的以pg_temp开头的SCHEMA来保证只对当前会话可见,因此,不建议用户在日常操作中手动删除以pg_temp,pg_toast_temp开头的SCHEMA。 如果建表时不指定TEMPORARY/TEMP关键字,而指定表的SCHEMA为当前会话的pg_temp开头的SCHEMA,则此表会被创建为临时表。 ALTER/DROP全局临时表和索引,如果其它会话正在使用它,禁止操作。 全局临时表的DDL只会影响当前会话的用户数据和索引。例如TRUNCATE、REINDEX、ANALYZE只对当前会话有效。 IF NOT EXISTS 如果指定IF NOT EXISTS关键字,创建表前会在当前SCHEMA中查找是否已有名字相同的relation。若已有同名relation存在,则不会新建,返回NOTICE提示。未指定IF NOT EXISTS关键字时,若SCHEMA中存在同名relation,返回ERROR告警。 table_name 要创建的表名。 取值范围:字符串,要符合标识符命名规范。 column_name 可选。新表中要创建的字段名。如果没有指定字段名,那么新表的字段名和SELECT语句输入的字段名一致。 取值范围:字符串,要符合标识符命名规范。 ENGINE B模式下支持,仅语法适配,且只支持设置InnoDB,无实际效果。 WITH ( storage_parameter [= value] [, ... ] ) 这个子句为表或索引指定一个可选的存储参数。参数的详细说明如下所示。 FILLFACTOR 一个表的填充因子(fillfactor)是一个介于10和100之间的百分数。在Ustore存储引擎下,该值得默认值为92,在Astore存储引擎下默认值为100(完全填充)。如果指定了较小的填充因子,INSERT操作仅按照填充因子指定的百分率填充表页。每个页上的剩余空间将用于在该页上更新行,这就使得UPDATE有机会在同一页上放置同一条记录的新版本,这比把新版本放置在其他页上更有效。对于一个从不更新的表将填充因子设为100是最佳选择,但是对于频繁更新的表,选择较小的填充因子则更加合适。该参数只对行存表有效。 取值范围:10~100 ORIENTATION 取值范围: ROW(缺省值):表的数据将以行式存储。 COMPRESSION 指定表数据的压缩级别,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。 取值范围: 该参数仅支持列存压缩。 autovacuum_enabled 自动清理功能是否对该表启用。 取值范围:on/off 默认值:on autovacuum_vacuum_threshold 自动清理功能中,指定在该表中触发VACUUM所需的更新或删除的最小元组数(仅对Astore表生效)。 取值范围:0-2147483647 默认值:-1,缺省时与GUC参数autovacuum_vacuum_threshold一致。 autovacuum_analyze_threshold 自动清理功能中,指定在该表中触发ANALYZE所需的插入、更新或删除的最小元组数。 取值范围:0-2147483647 默认值:-1,缺省时与GUC参数autovacuum_analyze_threshold一致。 autovacuum_vacuum_scale_factor 自动清理功能中,指定在该表中触发VACUUM所需的插入、更新或删除元组的比例(仅对Astore表生效)。 取值范围:0.0-100.0 默认值:-1,缺省时与GUC参数autovacuum_vacuum_scale_factor一致。 autovacuum_analyze_scale_factor 自动清理功能中,指定在该表中触发ANALYZE所需的插入、更新或删除元组的比例。 取值范围:0.0-100.0 默认值:-1,缺省时与GUC参数autovacuum_analyze_scale_factor一致。 autovacuum_freeze_min_age 自动清理功能中,指定在该表参数指定了一个行版本的最小年龄,超过这个年龄的行才会被冻结。 取值范围:0-1000000000 默认值:-1,缺省时与GUC参数vacuum_freeze_min_age一致。 autovacuum_freeze_max_age 自动清理功能中,该表pg_class.relfrozenxid字段在超过多少个事务后,就会强制执行VACUUM操作。即使自动清理被禁用,系统也会启动AUTOVACUUM进程。清理操作还允许从pg_clog/子目录中删除旧文件(仅对ASTORE表生效)。 取值范围:100000-2000000000 默认值:-1,缺省时与GUC参数autovacuum_freeze_max_age一致。 autovacuum_freeze_table_age 自动清理功能中,该表被标记为不需要自动清理时,它将保持不变的时间。(仅对Astore表生效)。 取值范围:0-2000000000 默认值:-1,缺省时与GUC参数vacuum_freeze_table_age一致。 ON COMMIT { PRESERVE ROWS | DELETE ROWS } ON COMMIT选项决定在事务中执行创建临时表操作,当事务提交时,此临时表的后续操作。当前仅支持PRESERVE ROWS和DELETE ROWS选项。 PRESERVE ROWS(缺省值):提交时不对临时表执行任何操作,临时表及其表数据保持不变。 DELETE ROWS:提交时删除临时表中数据。 [ ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW AFTER n { day | month | year } OF NO MODIFICATION [ ON ( EXPR )]] 创建新表时,可以调用ILM ADD POLICY ROW STORE COMPRESS ADVANCED ROW给行存添加高级压缩策略。 AFTER n { day | month | year } OF NO MODIFICATION :表示n天/月/年没有修改的行。 ON ( EXPR ):行级表达式,用于判断行的冷热。 TABLESPACE tablespace_name 指定新表将要在tablespace_name表空间内创建。如果没有声明,将使用默认表空间。 AS query 一个SELECT VALUES命令或者一个运行预备好的SELECT或VALUES查询的EXECUTE命令。 [ WITH [ NO ] DATA ] 创建表时,是否也插入查询到的数据。默认是要数据,选择“NO”参数时,则不要数据。
  • 示例 特例:执行gsql程序,使用如下选项导入由gs_dump/gs_dumpall生成导出文件夹(纯文本格式)的MPPDB_backup.sql文件到testdb数据库。 gsql -d testdb -p 8000 -f /home/omm/test/MPPDB_backup.sql SET SET SET SET SET ALTER TABLE ALTER TABLE ALTER TABLE ALTER TABLE ALTER TABLE CREATE INDEX CREATE INDEX CREATE INDEX SET CREATE INDEX REVOKE REVOKE GRANT GRANT total time: 30476 ms 示例中“-f”后的是导出的文件,“8000”表示数据库服务器端口;“testdb”表示要访问的数据库名。 gs_restore用来导入由gs_dump生成的导出文件。 示例1:执行gs_restore,将导出的MPPDB_backup.dmp文件(自定义归档格式)导入到testdb数据库。 gs_restore backup/MPPDB_backup.dmp -p 8000 -d testdb restore operation successful total time: 13053 ms 示例2:执行gs_restore,将导出的MPPDB_backup.tar文件(tar格式)导入到testdb数据库。 gs_restore backup/MPPDB_backup.tar -p 8000 -d testdb restore operation successful total time: 21203 ms 示例3:执行gs_restore,将导出的MPPDB_backup文件(目录格式)导入到testdb数据库。 gs_restore backup/MPPDB_backup -p 8000 -d testdb restore operation successful total time: 21003 ms 示例4:执行gs_restore,使用自定义归档格式的MPPDB_backup.dmp文件来进行如下导入操作。 导入PUBLIC模式下所有对象的定义和数据。在导入时会先删除已经存在的对象,如果原对象存在跨模式的依赖则需手工强制干预。 gs_restore backup/MPPDB_backup.dmp -p 8000 -d testdb -e -c -n PUBLIC Error while PRO CES SING TOC: Error from TOC entry 313; 1259 337399 TABLE table1 gaussdba could not execute query: ERROR: cannot drop table table1 because other objects depend on it DETAIL: view t1.v1 depends on table table1 HINT: Use DROP ... CASCADE to drop the dependent objects too. Command was: DROP TABLE IF EXISTS public.table1; 手工删除依赖,导入完成后再重新创建。 gs_restore backup/MPPDB_backup.dmp -p 8000 -d testdb -e -c -n PUBLIC restore operation successful total time: 2203 ms 示例5:执行gs_restore,使用自定义归档格式的MPPDB_backup.dmp文件来进行如下导入操作。只导入PUBLIC模式下表table1的定义。 gs_restore backup/MPPDB_backup.dmp -p 8000 -d testdb -e -c -s -n PUBLIC -t table1 restore operation successful total time: 21000 ms 示例6:执行gs_restore,使用自定义归档格式的MPPDB_backup.dmp文件来进行如下导入操作。只导入PUBLIC模式下表table1的数据。 gs_restore backup/MPPDB_backup.dmp -p 8000 -d testdb -e -a -n PUBLIC -t table1 restore operation successful total time: 20203 ms 示例7:在多租场景下,执行gs_restore,导入指定PDB_backup.dmp文件(自定义归档格式)到名称为testpdb的PDB。 gs_restore backup/PDB_backup.dmp -p 20000 -d testpdb restore operation successful total time: 371 ms 示例8:在多租场景下,执行gs_restore,导入指定PDB_backup.tar文件(tar归档格式)到名称为testpdb的PDB。 gs_restore backup/PDB_backup.tar -p 20000 -d testpdb restore operation successful total time: 367 ms 示例9:在多租场景下,执行gs_restore,导入指定PDB_backup目录文件(目录归档格式)到名称为testpdb的PDB。 gs_restore backup/PDB_backup -p 20000 -d testpdb restore operation successful total time: 370 ms 示例10:在多租场景下,执行gs_retsore,使用-C, --create选项来进行导入操作,gs_restore报错退出。 gs_restore backup/PDB_backup -C -p 20000 -d testpdb gs_restore unsupport the '-C, --create' option for pdb.
  • 命令格式 gs_restore [OPTION]... FILE FILE没有短选项或长选项。用来指定归档文件所处的位置。 作为前提条件,需输入dbname或-l选项。不允许用户同时输入dbname和-l选项。 gs_restore默认是以追加的方式进行数据导入。为避免多次导入造成数据异常,在进行导入时,建议选择使用“-c”和“-e”参数。“-c”表示在重新创建数据库对象前,清理(删除)已存在于将要还原的数据库中的数据库对象;“-e”表示当发送SQL语句到数据库时如果出现错误请退出,默认状态下会继续,且在导入后会显示一系列错误信息。 在进行导入时,如果schema对象的owner拥有OPRADMIN的系统权限,那么在导入时需要使用初始用户。 在进行导入时,如果数据中存在非法编码的数据并且不需要进行转码,可以配置数据库兼容性参数copy_special_character_version为'no_error'将非法编码的数据进行导入,否则会报错,但不会中断导入。
  • 背景信息 gs_restore是GaussDB提供的针对gs_dump导出数据的导入工具。通过此工具可将gs_dump导出生成的文件进行导入。 主要功能包含: 导入到数据库 如果连接参数中指定了数据库,则数据将被导入到指定的数据库中。其中,并行导入必须指定连接的密码。导入时生成列会自动更新,并像普通列一样保存。 如果连接参数中指定了PDB,则数据将被导入到指定的PDB中。 如果导入至指定的PDB,则不支持使用-C, --create选项。 如果导入指定的PDB处于close状态时,导入操作会执行失败。 如果导入指定的PDB设置事务为只读事务时,导入操作会执行失败。 M-Compatibility模式数据库下,禁止在lower_case_table_names参数不同的实例之间进行导入导出,否则可能引起数据丢失。 导入到归档文件 如果参数指定"-l",则生成归档文件,其中包含简略的数据总结。 gs_restore支持SSL加密通信,使用方式同gsql方式。 使用gs_restore前请确保gs_restore版本与gs_dump版本、数据库版本保持一致。
  • 功能描述 在当前数据库中定义一种新的数据类型。定义数据类型的用户将成为该数据类型的拥有者。类型只适用于行存表。 有五种形式的CREATE TYPE,分别为:复合类型、基本类型、shell类型、枚举类型和集合类型。 复合类型 复合类型由一个属性名和数据类型的列表指定。如果属性的数据类型是可排序的,也可以指定该属性的排序规则。复合类型本质上和表的行类型相同,但是如果只想定义一种类型,使用CREATE TYPE避免了创建一个实际的表。单独的复合类型也是很有用的,例如可以作为函数的参数或者返回类型。 为了能够创建复合类型,必须拥有在其所有属性类型上的USAGE特权。 基本类型 用户可以自定义一种新的基本类型(标量类型)。通常来说这些函数必须是底层语言所编写。 shell类型 shell类型是一种用于后面要定义的类型的占位符,通过发出一个不带除类型名之外其他参数的CREATE TYPE命令可以创建这种类型。在创建基本类型时,需要shell类型作为一种向前引用。 枚举类型 由若干个标签构成的列表,每一个标签值都是一个非空字符串,且字符串长度必须不超过63个字节。 集合类型 类似数组,但是没有长度限制,主要在存储过程中使用。 被授予CREATE ANY TYPE权限的用户,可以在public模式和用户模式下创建类型。
  • 语法格式 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' [, ... ] ] ); CREATE TYPE name AS TABLE OF data_type;
  • 示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 --开启事务。 gaussdb=# START TRANSACTION; --设置保存点my_savepoint。 gaussdb=# SAVEPOINT my_savepoint; --回滚至保存点my_savepoint。 gaussdb=# ROLLBACK TO SAVEPOINT my_savepoint; --游标位置不受保存点回滚的影响。 gaussdb=# DECLARE foo CURSOR FOR SELECT 1 UNION SELECT 2; --设置保存点foo。 gaussdb=# SAVEPOINT foo; --读取一条数据,为第一条数据。 gaussdb=# FETCH 1 FROM foo; ?column? ---------- 1 --回滚至保存点foo。 gaussdb=# ROLLBACK TO SAVEPOINT foo; --读取一条数据,为第二条数据。 gaussdb=# FETCH 1 FROM foo; ?column? ---------- 2 --释放保存点。 gaussdb=# RELEASE SAVEPOINT my_savepoint; --结束事务。 gaussdb=# COMMIT;
  • 注意事项 不能回滚到一个未定义的保存点,语法上会报错。 在保存点方面,游标有一些非事务性的行为。任何在保存点里打开的游标都会在回滚掉这个保存点之后关闭。如果一个前面打开了的游标在保存点里面,并且游标被一个FETCH命令影响,而这个保存点稍后回滚了,那么这个游标的位置仍然在FETCH让它指向的位置(FETCH不会被回滚)。关闭一个游标的行为也不会被回滚给撤消掉。如果一个游标的操作导致事务回滚,那么这个游标就会置于不可执行状态,所以,尽管一个事务可以用ROLLBACK TO SAVEPOINT重新恢复,但是游标不能再使用了。 使用ROLLBACK TO SAVEPOINT回滚到一个保存点。使用RELEASE SAVEPOINT删除一个保存点,但是保留该保存点建立后执行的命令的效果。
  • 示例 插入一条数据 示例: --建表。 gaussdb=# CREATE TABLE test_t1(col1 INT,col2 VARCHAR); --插入数据。 gaussdb=# INSERT INTO test_t1 (col1, col2) VALUES (1,'AB'); --只给表中部分列插入数据。 gaussdb=# INSERT INTO test_t1 (col1) VALUES (2); --VALUES关键字左边没有括号,右边括号里面必须严格按照表结构的顺序给所有的字段添加值。 gaussdb=# INSERT INTO test_t1 VALUES (3,'AC'); --查询表。 gaussdb=# SELECT * FROM test_t1; col1 | col2 ------+------ 1 | AB 2 | 3 | AC (3 rows) --删除表。 gaussdb=# DROP TABLE test_t1; 插入多条数据 示例: --建表。 gaussdb=# CREATE TABLE test_t2(col1 INT,col2 VARCHAR); gaussdb=# CREATE TABLE test_t3(col1 INT,col2 VARCHAR); --插入多条数据。 gaussdb=# INSERT INTO test_t2 (col1, col2) VALUES (10,'AA'),(20,'BB'),(30,'CC'); --查询表。 gaussdb=# SELECT * FROM test_t2; col1 | col2 ------+------ 10 | AA 20 | BB 30 | CC (3 rows) --把test_t2中的数据插入到test_t3中。 gaussdb=# INSERT INTO test_t3 SELECT * FROM test_t2; --查询表。 gaussdb=# SELECT * FROM test_t3; col1 | col2 ------+------ 10 | AA 20 | BB 30 | CC (3 rows) --删除表。 gaussdb=# DROP TABLE test_t2; gaussdb=# DROP TABLE test_t3; ON DUPLICATE KEY UPDATE 示例: --建表。 gaussdb=# CREATE TABLE test_t4 (id INT PRIMARY KEY, info VARCHAR(10)); gaussdb=# INSERT INTO test_t4 VALUES (1, 'AA'), (2,'BB'), (3, 'CC'); --使用ON DUPLICATE KEY UPDATE关键字。 gaussdb=# INSERT INTO test_t4 VALUES (3, 'DD'), (4, 'EE') ON DUPLICATE KEY UPDATE info = VALUES(info); --查询表。 gaussdb=# SELECT * FROM test_t4; id | info ----+------ 1 | AA 2 | BB 4 | EE 3 | DD --删除表。 gaussdb=# DROP TABLE test_t4; INSERT IGNORE 示例1:破坏NOT NULL约束 --创建B兼容模式数据库。 gaussdb=# CREATE DATABASE test DBCOMPATIBILITY ='B'; gaussdb=# \c test --设置前置参数。 test=# set b_format_version = '5.7'; test=# set b_format_dev_version = 's1'; --建表。 test=# CREATE TABLE test_t5(f1 INT NOT NULL); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t5 VALUES(NULL); WARNING: null value in column "f1" violates not-null constraint DETAIL: Failing row contains (null). INSERT 0 1 --查询表。 test=# SELECT * FROM test_t5; f1 ---- 0 (1 row) --删除表。 test=# DROP TABLE test_t5; 示例2:唯一键冲突 --建表。 test=# CREATE TABLE test_t6(f1 INT PRIMARY KEY); NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "test_t6_pkey" for table "test_t6" CREATE TABLE --插入数据。 test=# INSERT INTO test_t6 VALUES(1); INSERT 0 1 --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t6 VALUES(1); WARNING: duplicate key value violates unique constraint "test_t6_pkey" INSERT 0 0 --查询表。 test=# SELECT * FROM test_t6; f1 ---- 1 (1 row) --删除表。 test=# DROP TABLE test_t6; DROP TABLE 示例3:插入的值没有找到对应的分区 --建表。 test=# CREATE TABLE test_t7(f1 INT, f2 INT) PARTITION BY LIST(f1) (PARTITION p0 VALUES(1, 4, 7), PARTITION p1 VALUES (2, 5, 8)); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t7 VALUES(3, 5); WARNING: inserted partition key does not map to any table partition INSERT 0 0 --查询表。 test=# SELECT * FROM test_t7; f1 | f2 ----+---- (0 rows) --删除表。 test=# DROP TABLE test_t7; DROP TABLE 示例4:指定分区插入时,插入的数据与指定的分区不匹配 --建表。 test=# CREATE TABLE test_t8(f1 INT NOT NULL, f2 TEXT, f3 INT) PARTITION BY RANGE(f1)(PARTITION p0 VALUES LESS THAN(5), PARTITION p1 VALUES LESS THAN(10), PARTITION p2 VALUES LESS THAN(15), PARTITION p3 VALUES LESS THAN(MAXVALUE)); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t8 PARTITION(p2) VALUES(20, 'Jan', 1); WARNING: inserted partition key does not map to the table partition DETAIL: N/A. INSERT 0 0 --查询表。 test=# SELECT * FROM test_t8; f1 | f2 | f3 ----+----+---- (0 rows) --删除表。 test=# DROP TABLE test_t8; DROP TABLE 示例5:子查询返回多行 --建表。 test=# CREATE TABLE test_t9(f1 INT, f2 INT); CREATE TABLE --插入数据。 test=# INSERT INTO test_t9 VALUES(1, 1), (2, 2), (3, 3); INSERT 0 3 --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t9 VALUES((SELECT f1 FROM test_t9), 0); WARNING: more than one row returned by a subquery used as an expression CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 test=# SELECT * FROM test_t9 WHERE f2 = 0; f1 | f2 ----+---- | 0 (1 row) --删除表。 test=# DROP TABLE test_t9; DROP TABLE 示例6:数据过长 --建表。 test=# CREATE TABLE test_t10(f1 VARCHAR(5)); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t10 VALUES('aaaaaaaaa'); WARNING: value too long for type character varying(5) CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 test=# SELECT * FROM test_t10; f1 ------- aaaaa (1 row) --删除表。 test=# DROP TABLE test_t10; DROP TABLE 示例7:时间函数溢出 --建表。 test=# CREATE TABLE test_t11(f1 DATETIME); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t11 VALUES(date_sub('2000-01-01', INTERVAL 2001 YEAR)); WARNING: Datetime function: datetime field overflow CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 test=# SELECT * FROM test_t11; f1 ---- (1 row) --删除表。 test=# DROP TABLE test_t11; DROP TABLE 示例8:被0除 --建表。 test=# CREATE TABLE test_t12(f1 INT); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t12 VALUES(1/0); WARNING: division by zero CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 test=# SELECT * FROM test_t12; f1 ---- (1 row) --删除表。 test=# DROP TABLE test_t12; DROP TABLE 示例9:值不正确 --建表。 test=# CREATE TABLE test_t13(f1 FLOAT); CREATE TABLE --使用IGNORE关键字。 test=# INSERT IGNORE INTO test_t13 VALUES('1.11aaa'); WARNING: invalid input syntax for type real: "1.11aaa" LINE 1: INSERT IGNORE INTO test_t13 VALUES('1.11aaa'); ^ CONTEXT: referenced column: f1 INSERT 0 1 --查询表。 test=# SELECT * FROM test_t13; f1 ------ 1.11 (1 row) --删除表。 test=# DROP TABLE test_t13; --删除数据库(请根据实际情况修改数据库名)。 test=# \c test; test=# DROP DATABASE test; 示例10:使用表别名插入一条数据 --建表。 gaussdb=# create table tb1 (va int , vb int); NOTICE: The 'DISTRIBUTE BY' clause is not specified. Using 'va' as the distribution column by default. HINT: Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column. CREATE TABLE --使用表别名 gaussdb=# insert into tb1 as tt(tt.va, tt.vb) values (1,2); INSERT 0 1 gaussdb=# insert into tb1 tt(tt.va, tt.vb) values (3,4); INSERT 0 1 --查询表。 gaussdb=# select * from tb1; va | vb ----+---- 1 | 2 3 | 4 (2 rows) --删除表。 gaussdb=# DROP TABLE tb1; DROP TABLE WITH [ RECURSIVE ] with_query [, ...] 示例: --成绩表。 gaussdb=# CREATE TABLE grade ( sid INT, course VARCHAR(20), score FLOAT ); --学生表。 gaussdb=# CREATE TABLE student( sid INT PRIMARY KEY, class INT, name VARCHAR(50), sex INT CHECK (sex = 0 or sex = 1) ); --插入数据。 gaussdb=# WITH student_sid AS ( INSERT INTO student ( sid, CLASS, NAME, sex ) VALUES ( 1, 1, 'Scott', 1 ) RETURNING sid ) INSERT INTO grade ( sid, course, score ) VALUE ( ( SELECT sid FROM student_sid ), 'math', '96' ), ( ( SELECT sid FROM student_sid ), 'chinese', '82' ), ( ( SELECT sid FROM student_sid ), 'english', '86' ); --查询表。 gaussdb=# SELECT * FROM student; sid | class | name | sex -----+-------+-------+----- 1 | 1 | scott | 1 (1 row) gaussdb=# SELECT * FROM grade; sid | course | score -----+---------+------- 1 | math | 96 1 | chinese | 82 1 | english | 86 (3 rows) --删除表。 gaussdb=# DROP TABLE student; gaussdb=# DROP TABLE grade;
  • 语法格式 [ WITH [ RECURSIVE ] with_query [, ...] ] INSERT [/*+ plan_hint */] [ IGNORE ] INTO table_name [ { [alias_name] [ ( column_name [, ...] ) ] } | { [partition_clause] [ AS alias ] [ ( column_name [, ...] ) ] } ] { DEFAULT VALUES | { VALUES | VALUE } {( { expression | DEFAULT } [, ...] ) }[, ...] | query } [ ON DUPLICATE KEY UPDATE { NOTHING | { column_name = { expression | DEFAULT } } [, ...] [ WHERE condition ] }] [ RETURNING {* | {output_expression [ [ AS ] output_name ] }[, ...]} ];
  • 注意事项 只有拥有表INSERT权限的用户,才可以向表中插入数据。用户被授予INSERT ANY TABLE权限,相当于用户对除系统模式之外的任何模式具有USAGE权限,并且拥有这些模式下表的INSERT权限。 如果使用RETURNING子句,用户必须要有该表的SELECT权限。 如果使用ON DUPLICATE KEY UPDATE,用户必须要有该表的INSERT、UPDATE权限,UPDATE子句中列的SELECT权限。 如果使用query子句插入来自查询里的数据行,用户还需要拥有在查询里使用的表的SELECT权限。 生成列不能被直接写入。在INSERT命令中不能为生成列指定值,但是可以指定关键字DEFAULT。 当连接到TD兼容的数据库时,td_compatible_truncation参数设置为on时,将启用超长字符串自动截断功能,在后续的INSERT语句中(不包含外表的场景下),对目标表中CHAR和VARCHAR类型的列上插入超长字符串时,系统会自动按照目标表中相应列定义的最大长度对超长字符串进行截断。 如果向字符集为字节类型编码(SQL_ASCII,LATIN1等)的数据库中插入多字节字符数据(如汉字等),且字符数据跨越截断位置,这种情况下,按照字节长度自动截断,自动截断后会在尾部产生非预期结果。如果用户有对于截断结果正确性的要求,建议用户采用UTF8等能够按照字符截断的输入字符集作为数据库的编码集。
  • 日期和时间函数 以下为 GaussDB数据库 M-Compatibility兼容性日期时间函数公共说明,与MySQL行为一致。 函数入参为时间类型表达式的情况: 时间类型表达式主要包括TEXT、DATETIME、DATE或TIME,但所有可以隐式转换为时间表达式的类型都可以作为入参,比如数字类型可以通过先隐式转化为TEXT,再作为时间类型表达式生效。 但是,不同函数的具体生效情况会有所不同。例如:DATEDIFF函数仅计算日期之间的差值,因此时间表达式会被解析为日期;而TIMESTAMPDIFF函数在计算时间差值时,会根据UNIT参数来决定将时间表达式解析为DATE、TIME或 DATETIME。 函数入参为无效日期的情况: 一般而言,日期时间函数支持DATE、DATETIME的范围和MySQL保持一致。DATE支持的范围为'0000-01-01'到'9999-12-31',DATETIME支持的范围为'0000-01-01 00:00:00'到'9999-12-31 23:59:59'。虽然GaussDB支持的DATE、DATETIME范围大于MySQL,但是越界仍然算无效日期。 大部分时间函数对于入参为无效时间时,会告警并返回NULL,只有能通过cast正常转换的日期,才是正常合理的日期。 GaussDB M-Compatibility兼容性框架下的大部分日期时间函数与MySQL一致,一些函数的差异如下表所示: 表1 日期与和时间函数列表 MySQL数据库 GaussDB数据库 差异 ADDDATE() 支持 - ADDTIME() 支持 - CONVERT_TZ() 支持 - CURDATE() 支持 - CURRENT_DATE()/CURRENT_DATE 支持 - CURRENT_TIME()/CURRENT_TIME 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIME(257) == SELECT CURRENT_TIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 CURRENT_TIMESTAMP()/CURRENT_TIMESTAMP 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIMESTAMP(257) == SELECT CURRENT_TIMESTAMP(1))。 GaussDB只支持[0,6]合法值,其他值报错。 CURTIME() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURTIME(257) == SELECT CURTIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 DATE() 支持 - DATE_ADD() 支持 - DATE_FORMAT() 支持 - DATE_SUB() 支持 - DATEDIFF() 支持 - DAY() 支持 - DAYNAME() 支持 - DAYOFMONTH() 支持 - DAYOFWEEK() 支持 - DAYOFYEAR() 支持 - EXTRACT() 支持 - FROM_DAYS() 支持 - FROM_UNIXTIME() 支持 - GET_FORMAT() 支持 - HOUR() 支持 - LAST_DAY() 支持 - LOCALTIME()/LOCALTIME 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIME(257) == SELECT LOCALTIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 LOCALTIMESTAMP/LOCALTIMESTAMP() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIMESTAMP(257) == SELECT LOCALTIMESTAMP(1))。 GaussDB只支持[0,6]合法值,其他值报错。 MAKEDATE() 支持 - MAKETIME() 支持,存在差异 分布式下推场景下当TIME类型秒位无精度时,MYSQL默认补齐6个0,GaussDB不做补齐。 MICROSECOND() 支持 - MINUTE() 支持 - MONTH() 支持 - MONTHNAME() 支持 - NOW() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT NOW(257)==SELECT NOW(1))。 GaussDB只支持[0,6]合法值,其他值报错。 PERIOD_ADD() 支持,存在差异 整数溢出处理的行为: MySQL在5.7版本,此函数入参和结果的最大值都为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 负数period的表现: MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 period月份越界的表现: MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。GaussDB会对越界月份进行报错。在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 PERIOD_DIFF() 支持,存在差异 整数溢出处理的行为: MySQL在5.7版本,此函数入参和结果的最大值都为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 负数period的表现: MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 period月份越界的表现: MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。GaussDB会对越界月份进行报错。在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 QUARTER() 支持 - SEC_TO_TIME() 支持 - SECOND() 支持 - STR_TO_DATE() 支持,存在差异 返回值类型与MySQL有差异,GaussDB返回的是text,MySQL返回的是datetime、date。 SUBDATE() 支持 - SUBTIME() 支持 - SYSDATE() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕。 GaussDB不回绕。 TIME() 支持 - TIME_FORMAT() 支持 - TIME_TO_SEC() 支持 - TIMEDIFF() 支持 - TIMESTAMP() 支持 - TIMESTAMPADD() 支持 - TIMESTAMPDIFF() 支持 - TO_DAYS() 支持 - TO_SECONDS() 支持 - UNIX_TIMESTAMP() 支持,存在差异 MySQL会根据入参是否存在小数位,决定返回定点型还是整型。当前GaussDB在内层嵌套操作符或函数时,返回的类型与MySQL可能存在不同。当内层节点返回定点、浮点、字符型、时间类型(不包括DATE类型)时,MySQL可能返回整型,GaussDB会返回定点型。 UTC_DATE() 支持 - UTC_TIME() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。 UTC_TIMESTAMP() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。 WEEK() 支持 - WEEKDAY() 支持 - WEEKOFYEAR() 支持 - YEAR() 支持 - YEARWEEK() 支持 - 父主题: 系统函数
  • 日期和时间函数 以下为GaussDB数据库M-Compatibility兼容性日期时间函数公共说明,与MySQL行为一致。 函数入参为时间类型表达式的情况: 时间类型表达式主要包括TEXT、DATETIME、DATE或TIME,但所有可以隐式转换为时间表达式的类型都可以作为入参,比如数字类型可以通过先隐式转化为TEXT,再作为时间类型表达式生效。 但是,不同函数的具体生效情况会有所不同。例如:DATEDIFF函数仅计算日期之间的差值,因此时间表达式会被解析为日期;而TIMESTAMPDIFF函数在计算时间差值时,会根据UNIT参数来决定将时间表达式解析为DATE、TIME或 DATETIME。 当SELECT子查询中包含且仅包含时间函数,且函数入参包含表中的列时,使用算数运算符(如+、-、*、/、取反等)对结果进行运算时,会截断日期与时间函数返回值后再进行算数运算。 m_db=# CREATE TABLE t1(int_var int); CREATE TABLE m_db=# INSERT INTO t1 VALUES(100); INSERT 0 1 m_db=# SELECT (SELECT (1 * DATE_ADD('2020-10-20', interval int_var microsecond))) AS a FROM t1; -- 不进行截断处理。 a ---------------- 20201020000000 (1 row) m_db=# SELECT (1 * (SELECT DATE_ADD('2020-10-20', interval int_var microsecond))) AS a FROM t1; -- 进行截断处理。 a ------ 2020 (1 row) m_db=# SELECT 1 * a FROM (SELECT (SELECT 1 * DATE_ADD('2020-10-20', interval int_var microsecond)) AS a FROM t1) AS t2; -- 不进行截断处理。 1 * a ---------------- 20201020000000 (1 row) m_db=# SELECT 1 * a FROM (SELECT (SELECT DATE_ADD('2020-10-20', interval int_var microsecond)) AS a FROM t1) AS t2; -- 进行截断处理。 1 * a ------- 2020 (1 row) 函数入参为无效日期的情况: 一般而言,日期时间函数支持DATE、DATETIME的范围和MySQL保持一致。DATE支持的范围为'0000-01-01'到'9999-12-31',DATETIME支持的范围为'0000-01-01 00:00:00'到'9999-12-31 23:59:59'。虽然GaussDB支持的DATE、DATETIME范围大于MySQL,但是越界仍然算无效日期。 大部分时间函数会告警并返回NULL,只有能通过cast正常转换的日期,才是正常合理的日期。 GaussDB M-Compatibility兼容性框架下GaussDB的大部分日期时间函数与MySQL一致,一些函数的差异如下表所示: 表1 日期与和时间函数列表 MySQL数据库 GaussDB数据库 差异 ADDDATE() 支持 - ADDTIME() 支持 - CONVERT_TZ() 支持 - CURDATE() 支持 - CURRENT_DATE()/CURRENT_DATE 支持 - CURRENT_TIME()/CURRENT_TIME 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIME(257) == SELECT CURRENT_TIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 CURRENT_TIMESTAMP()/CURRENT_TIMESTAMP 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURRENT_TIMESTAMP(257) == SELECT CURRENT_TIMESTAMP(1))。 GaussDB只支持[0,6]合法值,其他值报错。 CURTIME() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例:SELECT CURTIME(257) == SELECT CURTIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 DATE() 支持 - DATE_ADD() 支持 - DATE_FORMAT() 支持 - DATE_SUB() 支持 - DATEDIFF() 支持 - DAY() 支持 - DAYNAME() 支持 - DAYOFMONTH() 支持 - DAYOFWEEK() 支持 - DAYOFYEAR() 支持 - EXTRACT() 支持 - FROM_DAYS() 支持 - FROM_UNIXTIME() 支持 - GET_FORMAT() 支持 - HOUR() 支持 - LAST_DAY() 支持 - LOCALTIME()/LOCALTIME 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIME(257) == SELECT LOCALTIME(1))。 GaussDB只支持[0,6]合法值,其他值报错。 LOCALTIMESTAMP/LOCALTIMESTAMP() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT LOCALTIMESTAMP(257) == SELECT LOCALTIMESTAMP(1))。 GaussDB只支持[0,6]合法值,其他值报错。 MAKEDATE() 支持 - MAKETIME() 支持 - MICROSECOND() 支持 - MINUTE() 支持 - MONTH() 支持 - MONTHNAME() 支持 - NOW() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕(例SELECT NOW(257)==SELECT NOW(1))。 GaussDB只支持[0,6]合法值,其他值报错。 PERIOD_ADD() 支持,存在差异 整数溢出处理的行为。 MySQL在5.7版本,此函数入参和结果的最大值都为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 负数period的表现。 MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 period月份越界的表现。 MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。在MySQL 8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 PERIOD_DIFF() 支持,存在差异 整数溢出处理的行为。 MySQL在5.7版本,此函数入参和结果的最大值都为2^32=4294967296,在入参或结果的period对应的月份累加值以及month_number超过uint32范围时存在整数回绕问题;在MySQL 8.0中已修复此问题。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 负数period的表现。 MySQL在5.7版本,会将负数年份解析为异常值而不是报错。GaussDB入参或结果(如100年1月减去10000月)出现负数时报错。在MySQL 8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 period月份越界的表现。 MySQL在5.7版本中,若月份大于12或等于0,例如200013、199900,会将其顺延到之后的年份,或者将0月作为上一年12月处理。在MySQL 8.0中已修复此问题,对越界月份报错。GaussDB下此函数的表现与MySQL 8.0版本保持一致。 QUARTER() 支持 - SEC_TO_TIME() 支持 - SECOND() 支持 - STR_TO_DATE() 支持,存在差异 返回值类型与MySQL有差异,GaussDB返回的是text,MySQL返回的是datetime、date。 SUBDATE() 支持 - SUBTIME() 支持 - SYSDATE() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕。 GaussDB不回绕。 TIME() 支持 - TIME_FORMAT() 支持 - TIME_TO_SEC() 支持 - TIMEDIFF() 支持 - TIMESTAMP() 支持 - TIMESTAMPADD() 支持 - TIMESTAMPDIFF() 支持 - TO_DAYS() 支持 - TO_SECONDS() 支持,存在差异 在MySQL 5.7版本中,此函数的精度信息有误。 开启精度传递参数下,GaussDB精度信息正常,和MySQL 8.0版本保持一致。 UNIX_TIMESTAMP() 支持,存在差异 MySQL会根据入参是否存在小数位,决定返回定点型还是整型。当前GaussDB在内层嵌套操作符或函数时,返回的类型与MySQL可能存在不同。当内层节点返回定点、浮点、字符型、时间类型(不包括DATE类型)时,MySQL可能返回整型,GaussDB会返回定点型。 UTC_DATE() 支持 - UTC_TIME() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。 UTC_TIMESTAMP() 支持,存在差异 MySQL入参整型值会按照一字节最大值255整数回绕,GaussDB只支持[0,6]合法值,其他值报错。 WEEK() 支持 - WEEKDAY() 支持 - WEEKOFYEAR() 支持 - YEAR() 支持 - YEARWEEK() 支持 - 父主题: 系统函数
  • SDK列表 在开始使用之前,请确保您安装的是最新版本的SDK。使用过时的版本可能会导致兼容性问题或无法使用最新功能。您可以在 SDK中心 查询版本信息。 表1提供了GaussDB支持的SDK列表,您可以在GitHub仓库查看SDK更新历史、获取安装包以及查看指导文档。 表1 SDK列表 编程语言 Github地址 参考文档 Java huaweicloud-sdk-java-v3 Java SDK使用指导 Python huaweicloud-sdk-python-v3 Python SDK使用指导 Go huaweicloud-sdk-go-v3 Go SDK使用指导
  • 创建MySQL连接 登录CodeArts Link控制台。 在左侧导航栏选择“连接器”,在连接器页面单击“新建连接”。 选择“MySql”连接器。 在弹窗中配置连接器信息,完成后单击“测试连接”,测试通过后,单击“确定”,保存配置。 参数 说明 连接名称 填写连接器实例名称。 连接与安全 选择数据库的连接模式。 默认:由系统根据用户配置自动拼接数据源连接字符串。 专业:由用户自己输入数据源连接字符串。 主机IP地址 仅当“连接与安全”选择“默认”时需要配置。 填写数据库的连接IP地址。 端口 仅当“连接与安全”选择“默认”时需要配置。 填写数据库的连接端口号。 数据库名 仅当“连接与安全”选择“默认”时需要配置。 填写要连接的数据库名。 连接字符串 仅当“连接与安全”选择“专业”时需要配置。 填写MySQL数据库的JDBC格式连接串,例如:jdbc:mysql://{hostname}:{port}/{dbname}。 用户名 连接数据库的用户名。 密码 连接数据库的用户密码。 描述 填写连接器的描述信息,用于识别不同的连接器。
  • 配置参数 表1 获取记录 参数 说明 表名 单击表名后弹出下拉框和搜索框,可以根据搜索或下拉选择连接的数据库中的表名。 字段名 选择表名后,单击字段名框弹出下拉框和搜索框,可以根据搜索或下拉勾选对应的字段。 WHERE条件 单击后弹出下拉框和搜索框,可以根据搜索或下拉勾选对应的字段,然后在对应的字段上填写要查询数据的条件值(注意值要用英文单引号包住)。 Order by字段 填写返回结果的排序字段。 Limit条数 填写返回结果的每页数据条数。 Offset偏移量 填写分页查询的偏移量。 表2 添加记录 参数 说明 表名 单击后弹出下拉框和搜索框,可以根据搜索或下拉选择连接的数据库中要插入数据的表名。 插入数据 单击后弹出下拉框和搜索框,可以根据搜索或下拉勾选对应的字段,然后在对应的字段上填写插入操作中目标字段的值(注意值要用英文单引号包住)。 表3 更新记录 参数 说明 表名 单击后弹出下拉框和搜索框,可以根据搜索或下拉选择连接的数据库中要更新数据的表名。 更新数据 单击后弹出下拉框和搜索框,可以根据搜索或下拉勾选对应的字段,然后在对应的字段上填写更新操作中目标字段的值(注意值要用英文单引号包住)。 WHERE条件 单击后弹出下拉框和搜索框,可以根据搜索或下拉勾选对应的字段,然后在对应的字段上填写要更新数据的条件值(注意值要用英文单引号包住)。 表4 删除记录 参数 说明 表名 单击后弹出下拉框和搜索框,可以根据搜索或下拉选择连接的数据库中要删除数据的表名。 WHERE条件 单击后弹出下拉框和搜索框,可以根据搜索或下拉勾选对应的字段,然后在对应的字段上填写要删除数据的条件值(注意值要用英文单引号包住)。 表5 自定义SQL 参数 说明 执行语句 填写操作数据库的原生SQL语句。 须知: 执行语句内容会明文展示所输入信息,请防止信息泄露。 请谨慎使用drop、truncate等非查询类语句
  • 一站式接入 场景介绍 一站式接入购买物理连接,指华为云向用户提供整合基础运营商网络资源和端口的一站式上云服务。 整体接入流程请参考图5 一站式接入功能目前已开通区域:华北-北京一、华北-北京四、华东-上海一、华东-上海二、华南-广州、华南-深圳、西南-贵阳一。 图5 一站式物理连接接入流程 操作步骤 提交需求信息。 进入云专线物理连接列表页。 在页面左上角单击,选择区域和项目。 在物理连接列表页,单击“创建物理连接”,进入自建专线购买页面。 登录控制台,选择并进入云专线服务,在物理连接页面单击 “一站式接入”,进入物理连接需求信息页面。 根据界面提示,在物理连接需求信息页面配置机房信息、华为云接入点等信息,详细请参照表2输入相关参数。 图6 一站式接入 表2 购买物理连接参数 参数 示例 说明 您的机房地址 - 用户填写机房地址,需要精确到房间和机柜号。例如上海市浦东新区华京路xx号xx楼xx机房xx机柜。 可进线的专线运营商 中国电信 用户机房允许进线的运营商。 设备端口类型 GE 用户机房出口设备的端口类型,物理线路会连接到此端口。 区域 - 物理连接开通的区域。用户可以在管理控制台左上角或购买页面切换区域。 华为云接入点 - 物理连接接入点的位置。 端口类型 1GE 物理连接接入端口的类型:1GE,10GE、40GE、100GE。 物理连接名称 dc-123 用户将要创建的物理连接的名称(可自定义)。 专线带宽 1000Mbit/s 物理连接的带宽大小,请在下拉框中选择对应的带宽。 计费模式 - 专线服务付费方式,目前仅支持包年方式付费。 购买时长 1年 购买服务的时长。 企业项目 default 将物理连接加入已有的企业项目内,支持按企业项目维度管理资源。 联系人姓名/手机/Email 张三 中国 13912345678, Zhangsan@163.com 用户可以在此提供用户侧专线负责人信息。 注意: 如不提供负责人信息,将只能通过账号信息查询,会增加需求确认时长。 单击“提交”。 华为云工勘。 华为云评估用户需求和运营商资源,与用户确认可满足用户需求的产品信息,回填信息后将订单返回给用户。 华为云工勘一般需要3个工作日。 确认配置支付订单。 在物理连接页面,单击目标物理连接“操作”列的“确认配置”。 在确认配置页面,确认物理连接配置方案和费用信息,单击“立即支付”。 用户在购买前须阅读并接受《一站式接入服务声明》,并在确认配置页面中勾选。 在购买页面,选择付款方式,单击“确认付款”。 用户选择“申请线上合同请款”时,前往合同页面中申请并下载合同,线下申请款项后再完成支付,您已选择的折扣优惠会保存至相应的待支付订单。 华为云施工。 运营商线路施工。 华为云与用户侧进线对接。 机房楼内线施工。 工勘回填信息为一站式接入高级且包括楼内线产品时涉及机房楼内线施工。 端口开通。 开通确认。 在物理连接页面,单击目标物理连接“操作”列的“确认施工完成”。 在弹窗中,单击“确认”。确认物理连接已创建完成,华为云开始计费。
  • 自建专线接入 场景介绍 物理连接由“专线”与“端口”组成,您需要向运营商购买专线,华为云仅提供端口资源。通过运营商的专线将本地数据中心连接至接入点,构建混合云。 用户自助购买物理连接,华为云直接向用户提供专线接入的端口,需要您向运营商采购和部署,以完成物理连接接入。 整体接入流程请参考图2。 图2 自建专线物理连接接入流程 操作步骤 进入云专线物理连接列表页。 在页面左上角单击,选择区域和项目。 在物理连接列表页,单击“创建物理连接”,进入自建专线购买页面。 根据界面提示配置机房地址、华为云接入点、物理连接端口等信息,详细请参见表1输入相关参数。 图3 自建专线接入 表1 购买物理连接参数 参数 示例 说明 计费模式 包年/包月 专线服务付费方式,目前仅支持包年/包月方式付费。 区域 华北-北京四 物理连接开通的区域。用户可以在管理控制台左上角或购买页面切换区域。 物理连接名称 dc-123 用户将要创建的物理连接的名称(可自定义)。 华为云接入点 北京-亚太 物理连接接入点的位置。 运营商 中国电信 提供物理连接的运营商。 端口类型 1GE 物理连接接入端口的类型:1GE,10GE、40GE、100GE。 专线带宽 100Mbit/s 物理连接的带宽大小,请在下拉框中选择对应的带宽。仅作为运营商接入带宽描述。 您的机房地址 xx市xx区xx路xx号xx楼xx机房。 用户填写机房地址,可精确到楼层。 标签 example_key1 example_value1 为物理连接绑定标签,用来标识资源,支持修改。 描述 - 用户可以对物理连接添加备注信息。 联系人姓名/手机/Email 张三 中国 13912345678, Zhangsan@163.com 用户可以在此提供用户侧专线负责人信息。 注意: 如不提供负责人信息,将只能通过账号信息查询,会增加需求确认时长。 购买时长 5个月 购买服务的时长。 自动续费 5个月 自动续费时长与购买时长相同。 例如:用户购买时长为三个月,当勾选该项后,将自动续费三个月,以此类推。 企业项目 default 将物理连接加入已有的企业项目内,支持按企业项目维度管理资源。 单击“确认配置”。 确认物理连接信息,单击“提交需求”。 用户提交需求后请联系专线经理与华为云侧确认专线需求。 如果用户提交的需求未通过审核 ,请根据审核意见重复操作3~6,重新提交需求。 系统审核通过需求后,请用户自行联系运营商施工。 运营商施工完成后,在控制台物理连接列表页,选择物理连接并单击“操作”列的“确认施工完成”。 图4 确认运营商施工完成 在确认运营商施工完成的弹窗中,单击“确认”。 在物理连接列表页,选择物理连接并单击“操作”列的“确认配置”。 确认物理连接配置信息,单击“立即支付”。 确认订单信息,选择支付方式,单击“确认”。 支付完成后,等待华为云施工。 预计两个工作日内,华为驻场工程师会根据客户信息将专线对接到华为云的网关端口。 施工完成后,物理连接接入状态显示为“正常”时,表示完成物理连接接入,同时开始计费。 物理连接购买完成之后,您还需要在虚拟网关页面创建虚拟网关关联VPC。 在虚拟接口页面创建虚拟接口关联物理连接与虚拟网关,将对端数据中心通过物理连接接入VPC,完成云上VPC与云下对端数据中心的接通。
  • CodeArts Build服务首页功能总览 CodeArts Build提供多种外观主题,本节以“无限+经典”主题为例介绍导航栏内容。 表2 首页功能总览说明 菜单项 说明 单击下拉列表可切换服务所属区域。 每个区域之间数据及资源不互通,请选择您已购买的区域进行使用。 单击下拉列表,可选择“编译构建”,进入编译构建服务首页。 该页面展示当前租户创建的所有项目的所有构建任务。 如果以项目入口访问CodeArts Build服务,单击此处的下拉列表,可切换至其它项目。 单击可在下拉列表中访问自定义模板、自定义构建环境、文件管理、构建任务回收站和构建资源池管理。 单击可执行构建任务。 单击可收藏构建任务。 单击可在下拉框中编辑、复制、禁用和删除构建任务。
共100000条