华为云用户手册

  • 方法二:本地磁盘映射 使用远程桌面连接mstsc方式进行数据传输。该方式不支持断点续传,可能存在传输中断的情况,因此不建议上传大文件。文件较大时,建议使用部署FTP服务等方式进行数据互传。 登录本地主机。 使用快捷键“Win+R”打开“运行”窗口。 在“打开”栏,输入“mstsc”,打开远程桌面连接。 图1 远程桌面连接 单击左下角的,展开选项菜单。 选择“本地资源”页签,并单击“本地设备和资源”栏的“详细信息”。 图2 本地资源 勾选“驱动器”和“其他支持的即插即用(PnP)设备”,并单击“确定”,将本地主机上的所有磁盘映射到Windows云服务器。 如果只需要映射部分本地主机上的磁盘到Windows云服务器,请展开“驱动器”,勾选待映射的磁盘设备。 图3 本地设备和资源 再次打开远程桌面连接窗口,并在“计算机”栏输入Windows云服务器的弹性公网IP地址。 图4 远程桌面连接Windows云服务器 单击“连接”。 登录Windows云服务器。 查看Windows云服务器的磁盘信息,如果有显示本地主机的磁盘设备,则表示您的本地主机与Windows云服务器之间可以互传数据了,如图5所示。 图5 查看磁盘设备
  • 操作步骤 启动Microsoft Remote Desktop。 单击“Add Desktop”。 图1 Add Desktop 设置登录信息。 PC name:输入需要登录的Windows实例的弹性公网IP地址。 User account:在下拉列表中选择“Add user account”。 弹出“Add user account”对话框。 输入Windows实例帐号“administrator”,并输入实例的登录密码,单击“Add”。 图2 Add user account 图3 Add PC 选择待上传的文件夹。 单击“Folders”切换至选择文件夹列表。 单击左下角,选择需上传的文件夹,并单击“Add”。 在“Remote Desktop”页面,双击需要登录的Windows实例图标。 图4 双击登录Windows实例 确认登录信息后,单击“Continue”。 至此,您已经链接Windows实例。 打开Windows云服务器,查看共享的文件夹。 将需要上传的文件复制到Windows云服务器。或将Windows云服务器的文件下载到本地主机。
  • 前提条件 本地主机已安装Microsoft Remote Desktop for Mac或其他macOS系统适用的远程连接工具。下载Microsoft Remote Desktop for Mac。 Windows操作系统云服务器已绑定弹性公网IP。 首次登录云服务器时,请先使用VNC方式登录云服务器,打开RDP(Remote Desktop Protocol),然后再使用mstsc方式连接。 使用公共镜像创建的云服务器,默认已打开RDP。
  • 操作步骤 以root用户登录云服务器。 执行以下命令查看ssh版本,OpenSSH版本大于等于4.8p1。 ssh -V 回显信息如下所示: # OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017 创建用户和组,以user1用户为例。 groupadd sftp useradd -g sftp -s /sbin/nologin user1 设置用户密码。 passwd user1 图1 设置用户密码 设置目录权限。 chown root:sftp /home/user1 chmod 755 -R /home/user1 mkdir /home/user1/upload chown -R user1:sftp /home/user1/upload chmod -R 755 /home/user1/upload 执行以下命令,编辑sshd_config文件。 vim /etc/ssh/sshd_config 注释掉如下信息 #Subsystem sftp /usr/libexec/openssh/sftp-server 补充如下内容: Subsystem sftp internal-sftp Match Group sftp ChrootDirectory /home/%u ForceCommand internal-sftp AllowTcpForwarding no X11Forwarding no 图2 sshd_config文件补充配置信息后 重启云服务器,或执行以下命令重启sshd服务。 service sshd restart 或 systemctl restart sshd 在本地主机执行以下命令,远程连接到服务器。 sftp root@IP地址 连接成功后,您可以使用交互式的sftp命令。 执行以下命令,上传或下载文件、文件夹。 上传文件:put -r 下载文件:get -r
  • 操作步骤 Linux操作系统的本地主机安装ftp。 以CentOS 7.6操作系统为例,执行以下命令安装ftp yum -y install ftp 执行以下命令连接云服务器。 ftp 云服务器弹性公网IP 并根据提示,输入FTP服务的用户名和密码。 上传文件 执行以下命令,将本地文件上传至云服务器中。 put 本地主机文件地址 例如:将本地Linux主机的/home/test.txt 上传到云服务器。 put /home/test.txt 下载文件 执行以下命令,将云服务器中的文件下载至本地。 get 云服务器文件地址 本地主机文件地址 例如:将云服务器的test.txt下载到本地Linux主机。 get /home/test.txt
  • 操作须知 所在安全组入方向已开放云服务器登录使用的端口,默认使用3389端口。 云服务器已经绑定弹性公网IP。 远程桌面授权仅支持120天,过期后将因缺失远程桌面授权服务器许可证而导致多用户登录无法使用。您可以通过如下方式处理此问题: 重新激活远程桌面授权,具体操作请参考申请多用户会话授权的license并激活云服务器。 删除远程桌面服务,具体操作请参考远程连接Windows云服务器报错:没有远程桌面授权服务器可以提供许可证。 但删除远程桌面服务后,服务器最多仅允许两个用户连接(包含本地登录用户)。 配置多用户登录后,可能会出现多用户登录Windows主机时无法打开浏览器的问题,解决方法请参考弹性 云服务器常见问题 :多用户登录Windows主机时无法打开浏览器。
  • 操作场景 配置多用户登录后,不同的用户登录云服务器时,用户操作之间互无影响。本节操作以Windows Server 2012操作系统的云服务器为例介绍实现多用户登录的操作步骤。 Windows server2012服务器默认能够支持两个用户同时远程登录,而通过配置远程桌面会话主机和远程桌面授权,即可实现多用户远程登录。 Windows 2012操作系统 云服务器配置 多用户登录的操作视频请点击:https://bbs.huaweicloud.com/videos/100807
  • 安装桌面会话主机和远程桌面授权 登录Windows云服务器。 在操作系统界面,单击打开“服务器管理器”,单击“添加角色和功能”。 图1 添加角色和功能 保持默认参数,单击“下一步”,出现如图2所示的安装界面,选择“基于角色或基于功能的安装”,单击“下一步”。 图2 添加角色和功能向导 选择“从服务器池中选择服务器”,单击“下一步”。 选择“远程桌面服务”,单击“下一步”。 图3 远程桌面服务 在“功能”页面保持默认参数,单击两次“下一步”。 图4 功能页面 在 “选择角色服务” 界面,依次勾选“远程桌面会话主机”和“远程桌面授权 ”,在弹出的窗口中单击“添加功能”,单击“下一步”。 图5 添加功能 图6 远程桌面授权 确认在云服务器上安装的角色,单击“安装” 。 图7 安装 安装完成后,按照提示重启服务器,单击“关闭”,然后重启计算机。 图8 功能安装
  • 配置新用户并加入远程桌面用户组 如果配置“多个用户同时登录的多用户登录”,那么在创建完新用户后需要将其加入远程桌面用户组。本小节操作介绍创建新用户并添加用户到远程桌面用户组的操作步骤。 在运行中输入lusrmgr.msc,打开本地用户和组,进行新用户创建。 图14 lusrmgr.msc 单击“用户”,在空白处右键选择新用户。 图15 选择新用户 填写新用户信息,单击“创建”。 图16 填写新用户信息 单击“组”,双击打开Remote Desktop Users组,单击“添加”。 图17 Remote Desktop Users组 进入选择用户界面,单击“高级”。 图18 选择用户界面 在新的选择用户界面,单击“立即查找”,在下方搜索结果中选中需要远程登录的用户,并单击“确定”,完成添加,即可远程登录。 图19 选择用户 图20 添加用户 单击“确定”,添加用户到Remote Desktop Users组。 图21 确认成员信息
  • 怎样注册华为云并实名认证? 如果您已有一个华为帐号,请跳到下一个任务。如果您还没有华为云帐号,请参考以下步骤创建。 打开华为云网站 单击“注册”,根据提示信息完成注册。 注册成功后,系统会自动跳转至您的个人信息界面。 实名认证,请参考: 个人帐号:实名认证 企业帐号:实名认证 相关操作链接: 了解云耀 云服务器价格 请参考:价格说明 购买云服务器 前需要确保账户有足够金额,账户充值,请参见:如何给华为云帐户充值 父主题: 高频问题
  • 处理方法 使用DiskPart磁盘分区管理工具来查询、设置云服务器的SAN策略,将其修改为OnlineAll类型。 登录Windows云服务器。 按快捷键“Win+R”,运行cmd.exe。 执行以下命令,进入DiskPart。 diskpart 执行以下命令,查看云服务器当前的SAN策略。 san 如果SAN策略为OnlineAll,请执行exit命令退出DiskPart。 否,请执行5。 执行以下命令,修改云服务器SAN策略为OnlineAll。 san policy=onlineall (可选)如需永久生效,您可以将修改过SAN策略的云服务器制作为私有镜像。由该私有镜像创建的云服务器,添加的磁盘只需执行初始化操作,磁盘默认是联机状态。
  • 问题原因 Windows操作系统SAN策略分为三种类型:OnlineAll,OfflineShared,OfflineInternal 表1 Windows操作系统SAN策略类型 类型 说明 OnlineAll 表示所有新发现磁盘都置于在线模式。 OfflineShared 表示所有共享总线上(比如FC, IS CS I)的新发现磁盘都置于离线模式,非共享总线上的磁盘都置于在线模式。 OfflineInternal 表示所有新发现磁盘都置于离线模式。 对于部分版本的Windows操作系统(如Windows 2008/2012 企业版、数据中心版),默认是共享离线OfflineShared模式。
  • analyze_table(scheme_name, rel_name, sample_rate, random_rate default null, parallel_degree default null) 描述:并行采样数据到临时表,再对临时表执行全量ANALYZE,更新统计信息。 返回值类型:record 函数参数字段如下: 名称 类型 描述 scheme_name name 主表的scheme名称 rel_name name 主表表名 sample_rate float8 采样率的百分比,范围为(0-100)。 采样率计算:min((10w/表的total_rows) * 100, 100) random_seed float8 随机种子, 默认值为0。 parallel_degree int 并发度,默认值为10。 示例: 1 CALL analyze_table('public','t1_col_obs',10,0,20);
  • pg_rm_scan_residualfiles_archive() 描述:用于删除当前实例中归档文件列表中的文件。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。不支持备机执行。 返回值类型:record 函数返回字段如下: 名称 类型 描述 count int 所删除的残留文件数。本地路径的残留文件统计所删除的文件数,OBS路径的残留文件统计所删除的表目录数量。 size int 所删除的残留文件中本地文件总大小。OBS路径的残留文件该项均为0。 示例: 1 2 3 4 5 SELECT * FROM pg_rm_scan_residualfiles_archive(); count | size -------+------ 1 | 0 (1 row)
  • pgxc_rm_scan_residualfiles_archive() 描述:用于删除所有节点上归档目录中的文件。该函数为集群级函数,仅支持在CN执行,与当前所在的数据库无关。不支持备机执行。 返回值类型:record 函数返回字段如下: 名称 类型 描述 node_name text 主备节点共用的统一名称。 instance_id text 记录残留文件所在的节点名称。 count int 所删除的残留文件数。本地路径的残留文件统计所删除的文件数,OBS路径的残留文件统计所删除的表目录数量。 size int 所删除的残留文件中本地文件总大小。OBS路径的残留文件该项均为0。 示例: 1 2 3 4 5 6 SELECT * FROM pgxc_rm_scan_residualfiles_archive(); node_name | instance_id | count | size --------------+--------------+-------+------ datanode1 | datanode1 | 1 | 0 coordinator1 | coordinator1 | 1 | 0 (2 rows)
  • pgxc_get_scan_residualfiles() 描述:用于获取所有节点上残留文件记录。该函数为集群级函数,仅支持在CN执行,与当前所在的数据库无关。不支持备机执行。 返回值类型:record 函数返回字段如下: 名称 类型 描述 node_name text 主备节点共用的统一名称。 instance_id text 记录残留文件所在的节点名称。 handled bool 残留文件是否已经被移动或者被更改。 dbname text 所属数据库名称。 residualfile text 残留文件路径。 size int 残留文件大小,OBS上残留文件该项为0。 inode int 残留文件在文件系统的索引节点号,OBS路径的残留文件该项为0。 atime time 残留文件上一次访问时间,OBS路径的残留文件该项为空。 mtime time 残留文件上一次修改时间,OBS路径的残留文件该项为空。 ctime time 残留文件上一次状态改动时间,OBS路径的残留文件该项为空。 filepath text 记录残留文件信息的元文件本地路径。 notes text 注释。 示例: 1 2 3 4 5 6 7 SELECT * FROM pgxc_get_scan_residualfiles(); node_name | instance_id | handled | dbname | residualfile | size | inode | atime | mtime | ctime | filepath | notes --------------+--------------+---------+----------+------------------------------------------------------------------------------------------------------------------------------+------+---------+------------------------+------------------------+------------------------+----------------------------------------+------- datanode1 | datanode1 | f | postgres | base/15854/19863 | 0 | 2939427 | 2023-11-06 09:54:15+08 | 2023-11-06 09:54:15+08 | 2023-11-06 09:54:15+08 | pgscrf_meta_15854_20231106095437555205 | coordinator1 | coordinator1 | f | postgres | /test/obsview/cudesc_check/user1/obs.xxx.com/cu_obs_tbs/tablespace_secondary/15854/19865 | 0 | 0 | | | | pgscrf_meta_15854_20231106095438240991 | (2 rows)
  • pg_archive_scan_residualfiles() 描述:用于归档当前节点的所有残留文件记录。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。不支持备机执行。 返回值类型:record 函数返回字段如下: 名称 类型 描述 archive text 归档后的本地文件夹路径。OBS路径的残留文件归档在对应OBS数据库目录下。 count int 归档文件夹中的文件数量。 size int 归档文件夹中的文件大小。 示例: 1 2 3 4 5 SELECT * FROM pg_archive_scan_residualfiles(); archive | count | size -------------------------------------------------------------------+--------+------ pg_residualfiles/archive/pgscrf_archive_15842_20230912182934335330| 1 | 0 (1 row)
  • pgxc_archive_scan_residualfiles() 描述:用于归档所有节点上残留文件记录。该函数为集群级函数,仅支持在CN执行,与当前所在的数据库无关。不支持备机执行。 返回值类型:record 函数返回字段如下: 名称 类型 描述 node_name text 主备节点共用的统一名称。 instance_id text 记录残留文件所在的节点名称。 archive text 归档后的本地文件夹路径。OBS路径的残留文件归档在对应OBS数据库目录下。 count int 归档文件夹中的文件数量。 size int 归档文件夹中的文件大小。 示例: 1 2 3 4 5 6 SELECT * FROM pgxc_archive_scan_residualfiles(); node_name | instance_id | archive | count | size --------------+--------------+--------------------------------------------------------------+-------+------ datanode1 | datanode1 | pg_residualfiles/archive/pgscrf_archive_20231106103246489550 | 1 | 0 coordinator1 | coordinator1 | pg_residualfiles/archive/pgscrf_archive_20231106103246592449 | 1 | 0 (2 rows)
  • pg_scan_residualfiles() 描述:用于扫描当前节点所在数据库的所有残留文件记录。连接到CN执行时,扫描当前CN节点所在数据库的本地残留文件和OBS全部残留文件。连接到DN执行时,扫描当前DN节点所在数据库的本地残留文件。该函数为库级函数,只针对当前数据库。不支持备机执行。 返回值类型:record 函数返回字段如下: 名称 类型 描述 pgscrf text 记录残留文件信息的元文件本地路径。
  • pgxc_scan_residualfiles() 描述:用于扫描所有节点上当前数据库的残留文件记录。该函数为集群级函数,仅支持在CN执行,与连接CN上当前所在的数据库相关。不支持备机执行。 参数类型: 无。 返回值类型:record 函数返回字段如下: 名称 类型 描述 node_name text 主备节点共用的统一名称。 instance_id text 记录残留文件所在的节点名称。 pgscrf text 记录残留文件信息的元文件本地路径。
  • pg_get_scan_residualfiles() 描述:用于获取当前节点的所有残留文件记录。该函数为实例级函数,与当前所在的数据库无关,可以在任意实例上运行。不支持备机执行。 返回值类型:record 函数返回字段如下: 名称 类型 描述 handled bool 残留文件是否已经被移动或者被更改。 dbname text 所属数据库名称。 residualfile text 残留文件路径。 size int 残留文件大小,OBS路径的残留文件该项为0。 inode int 残留文件在文件系统的索引节点号,OBS上残留文件该项为0。 atime time 残留文件上一次访问时间,OBS路径的残留文件该项为空。 mtime time 残留文件上一次修改时间,OBS路径的残留文件该项为空。 ctime time 残留文件上一次状态改动时间,OBS路径的残留文件该项为空。 filepath text 记录残留文件信息的元文件本地路径。 notes text 注释。 示例: 1 2 3 4 5 6 7 SELECT * FROM pg_get_scan_residualfiles(); handled | dbname | residualfile | size | inode | atime | mtime | ctime | filepath | notes ---------+----------+------------------------------------------------------------------------------------------------------------------------------+------+-------+-------+-------+-------+----------------------------------------+- ------ f | postgres | /test/obsview/cudesc_check/user1/obs.xxx.com/cu_obs_tbs/tablespace_secondary/15854/19865 | 0 | 0 | | | | pgscrf_meta_15854_20231106095438240991 | (1 row)
  • pg_obs_file_size(scheme_name.tablename,partition_name) 描述:获取OBS上分区表分区的列存CU文件名、文件大小信息,仅对列存版本colversion为3的表生效。 返回值类型:record 函数参数字段如下: 名称 类型 描述 scheme_name.tablename regclass 主表的schema.tablename/tablename/oid。 partition_name cstring 分区表表名。 示例: 1 2 3 4 5 6 7 8 SELECT pg_obs_file_size('public.t2_col_part_obs','p1'); pg_obs_file_size ---------------------------- (C1_16777266462721.0,1024) (C1_16777266429953.0,1024) (C1_16777249734657.0,1024) (C1_16777249701889.0,1024) (4 rows)
  • meta_cache_manual_append(scheme_name, rel_name) 描述:在下一次语句执行时,CN将对目标表元数据进行打包,并发送给只读DN。建议在技术支持指导下使用。 返回值类型:void。 函数参数字段如下: 名称 类型 描述 scheme_name text 目标表的scheme名称。 rel_name text 目标表表名。 示例: 1 SELECT meta_cache_manual_append('public','t1_col_obs');
  • pg_obs_file_size(scheme_name.tablename) 描述:获取OBS上的表或者分区的CU文件名、文件大小信息,仅对列存版本colversion为3的表生效。 返回值类型:record 函数参数字段如下: 名称 类型 描述 scheme_name.tablename regclass 主表的schema.tablename/tablename/oid,或者分区表的OID。如果存在主表OID和分区OID相同的场景,建议使用表名作为入参。 示例: 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 --入参为tablename: SELECT pg_obs_file_size('t2_col_part_obs'); pg_obs_file_size ---------------------------- (C1_16777266462721.0,1024) (C1_16777266429953.0,1024) (C1_16777249734657.0,1024) (C1_16777249701889.0,1024) (4 rows) --入参为schema.tablename SELECT pg_obs_file_size('public.t2_col_part_obs'); pg_obs_file_size ---------------------------- (C1_16777266462721.0,1024) (C1_16777266429953.0,1024) (C1_16777249734657.0,1024) (C1_16777249701889.0,1024) (4 rows) --入参为oid SELECT pg_obs_file_size(16593); pg_obs_file_size ---------------------------- (C1_16777266462721.0,1024) (C1_16777266429953.0,1024) (C1_16777249734657.0,1024) (C1_16777249701889.0,1024) (4 rows)
  • 示例 OBS IO Scheduler查询的统计内容: 1 2 3 4 5 6 7 8 9 10 11 SELECT * FROM pgxc_obs_io_scheduler_periodic_stats; node_name | io_type | recent_throttled_req_num | total_throttled_req_num | last_throttled_dur(s) | waiting_req_num | mean_tps | mean_req_size(KB) | mean_req_latency(ms) | max_req_latency(ms) | mean_bps(KB/s) | duration(s) --------------+---------+--------------------------+-------------------------+-----------------------+-----------------+----------+-------------------+----------------------+---------------------+----------------+------------- dn_6001_6002 | S | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 155 dn_6001_6002 | R | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 155 dn_6001_6002 | W | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 155 cn_5001 | S | 0 | 0 | 0 | 0 | .03 | 0 | 207 | 519 | 0 | 155 cn_5001 | R | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 155 cn_5001 | W | 0 | 0 | 0 | 0 | .01 | 0 | 288 | 288 | 0 | 155 (6 rows) 如果需要显示“mean_tps”数值中小数点前的0,需要在behavior_compat_options参数中设置display_leading_zero(浮点数显示配置项)再查询视图: set behavior_compat_options='display_leading_zero'; SELECT * FROM pgxc_obs_io_scheduler_periodic_stats; node_name | io_type | recent_throttled_req_num | total_throttled_req_num | last_throttled_dur(s) | waiting_req_num | mean_tps | mean_req_size(KB) | mean_req_latency(ms) | max_req_latency(ms) | mean_bps(KB/s) | duration(s) --------------+---------+--------------------------+-------------------------+-----------------------+-----------------+----------+-------------------+----------------------+---------------------+----------------+------------- dn_6001_6002 | S | 0 | 0 | 0 | 0 | 0.36 | 0 | 132 | 326 | 0 | 177 dn_6001_6002 | R | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 177 dn_6001_6002 | W | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 177 cn_5001 | S | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 177 cn_5001 | R | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 177 cn_5001 | W | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 177
  • 操作步骤 参见创建DWS 3.0集群创建DWS 3.0集群,集群创建后默认会转换成逻辑集群v3_logical。 通过节点扩容方式增加3个节点到弹性集群,再添加逻辑集群lc2。 创建用户u1,并关联逻辑集群v3_logical。 1 CREATE USER u1 with SYSADMIN NODE GROUP "v3_logical" password "Password@123"; 创建用户u2,并关联逻辑集群lc2。 1 CREATE USER u2 with SYSADMIN NODE GROUP "lc2" password "Password@123"; 以u1登录数据库,创建表t1和t2,并插入测试数据。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 CREATE TABLE public.t1 ( id integer not null, data integer, age integer ) WITH (ORIENTATION =COLUMN, COLVERSION =3.0) DISTRIBUTE BY ROUNDROBIN; CREATE TABLE public.t2 ( id integer not null, data integer, age integer ) WITH (ORIENTATION = COLUMN, COLVERSION =3.0) DISTRIBUTE BY ROUNDROBIN; INSERT INTO public.t1 VALUES (1,2,10),(2,3,11); INSERT INTO public.t2 VALUES (1,2,10),(2,3,11); 以u2登录数据库,执行以下命令查询t1和写入数据。 从结果可得出,实现用户u2跨逻辑集群进行查询和写入数据的能力。 1 2 SELECT * FROM t1; INSERT INTO t1 SELECT * FROM t2;
  • 表操作示例 重命名表: 1 ALTER TABLE CUSTOMER RENAME TO CUSTOMER_t; 给表增加一个新的约束: 1 ALTER TABLE customer_address ADD PRIMARY KEY(ca_address_sk); 根据已有唯一索引为表增加主键约束或唯一约束。 先给表CUSTOMER创建唯一索引CUSTOMER_constraint1,然后根据已有唯一索引增加主键约束,并对前面创建的索引rename: 1 2 CREATE UNIQUE INDEX CUSTOMER_constraint1 ON CUSTOMER(C_CUSTKEY); ALTER TABLE CUSTOMER ADD CONSTRAINT CUSTOMER_constraint2 PRIMARY KEY USING INDEX CUSTOMER_constraint1; 重命名表约束: 1 ALTER TABLE CUSTOMER RENAME CONSTRAINT CUSTOMER_constraint2 TO CUSTOMER_constraint; 删除表约束: 1 ALTER TABLE CUSTOMER DROP CONSTRAINT CUSTOMER_constraint; 给表增加一个索引: 1 ALTER TABLE CUSTOMER ADD INDEX CUSTOMER_index(C_CUSTKEY); 删除表索引: 1 2 ALTER TABLE CUSTOMER DROP INDEX CUSTOMER_index; ALTER TABLE CUSTOMER DROP KEY CUSTOMER_index; 向在一个列存表中添加局部聚簇列: 1 ALTER TABLE customer_address ADD CONSTRAINT customer_address_cluster PARTIAL CLUSTER KEY(ca_address_sk); 删除一个列存表中的局部聚簇列: 1 ALTER TABLE customer_address DROP CONSTRAINT customer_address_cluster; 切换列存表的存储格式: 1 ALTER TABLE customer_address SET (COLVERSION = 1.0); 修改表的分布方式: 1 ALTER TABLE customer_address DISTRIBUTE BY REPLICATION; 修改表模式: 1 ALTER TABLE customer_address SET SCHEMA tpcds; 单表冷热切换: 1 ALTER TABLE cold_hot_table REFRESH STORAGE; 列存分区表修改为冷热表: 1 2 3 4 5 6 7 CREATE table test_1(id int,d_time date) WITH(ORIENTATION=COLUMN) DISTRIBUTE BY HASH (id) PARTITION BY RANGE (d_time) (PARTITION p1 START('2022-01-01') END('2022-01-31') EVERY(interval '1 day')) ALTER TABLE test_1 SET (storage_policy = 'LMT:100'); 修改表缓存策略(仅云原生3.0版本支持): ALTER TABLE orders SET (cache_policy = 'NONE');
  • 参数说明 IF EXISTS 如果不存在相同名称的表,不会抛出一个错误,而会发出一个通知,告知表不存在。 table_name [*] | ONLY table_name | ONLY ( table_name ) table_name是需要修改的表名。 若声明了ONLY选项,则只有那个表被更改。若未声明ONLY,该表及其所有子表都将会被更改。另外,可以在表名称后面显示地增加*选项来指定包括子表,即表示所有后代表都被扫描,这是默认行为。 constraint_name 要删除的现有约束的名字。 index_name 索引名称。 storage_parameter 表的存储参数的名字。 分区管理新增的两个选项: PERIOD(interval类型) 设置分区管理中自动创建分区的周期。 PERIOD的范围要求以及开启该功能的约束请参考CREATE TABLE PARTITION。 在建表时,如果没有设置该参数,可以通过set的方式添加该参数,并开启自动创建分区功能;如果之前已经设置该参数,则通过set的方式修改该参数。 用户可以通过reset该参数的方式关闭自动创建分区功能,但是在自动删除分区功能存在的情况下,不支持关闭自动创建分区功能。 TTL(interval类型) 设置分区管理中自动删除分区的分区过期时间。 TTL的范围要求以及开启该功能的约束请参考CREATE TABLE PARTITION。 在建表时,如果没有设置该参数,可以通过set的方式添加该参数,并开启自动删除分区功能;如果之前已经设置该参数,则通过set的方式修改该参数。 用户可以通过reset该参数的方式关闭自动删除分区功能。 new_owner 表所属新的拥有者的名字。 new_tablespace 表所属新的表空间名字。 column_name,column_1_name, column_2_name 现存的或新字段的名称。 data_type 新字段的类型,或者现存字段的新类型。 compress_mode 表字段的压缩可选项,当前仅对行存表有效。该子句指定该字段优先使用的压缩算法。 collation 字段排序规则名称。可选字段COLLATE指定了新字段的排序规则,如果省略,排序规则为新字段的默认类型。 USING expression USING子句声明如何从旧的字段值里计算新的字段值;如果省略,缺省从旧类型向新类型的赋值转换。如果从旧数据类型到新类型没有隐含或者赋值的转换,则必须提供一个USING子句。 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 。 default_expr中若使用后缀操作符(如!),需使用括号括起来。 UNIQUE [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] index_parameters UNIQUE ( column_name [, ... ] ) [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] index_parameters UNIQUE约束表示表里的一个或多个字段的组合必须在全表范围内唯一。 其中[ NULLS [ NOT ] DISTINCT | NULLS IGNORE ]字段用来指定Unique唯一索引中索引列NULL值的处理方式。 默认取值:该参数默认取值为空,即NULL值可重复插入。 在对插入的新数据和表中原始数据进行列的等值比较时,对于NULL值有以下三种处理方式: NULLS DISTINCT:NULL值互不相等,即NULL值可重复插入。 NULLS NOT DISTINCT:NULL值相等。若索引列全为NULL,则NULL值不可重复插入;部分索引列为NULL,只有非NULL值不相等,才可成功插入数据。 NULLS IGNORE:在等值比较时跳过NULL值。若索引列全为NULL,则NULL值可重复插入;部分索引列为NULL,只有非NULL值不相等,才可成功插入数据。 三种处理方式具体的行为如下表所示: 表1 唯一索引中索引列NULL值的处理方式 字段控制 索引列全为NULL 部分索引列为NULL NULLS DISTINCT 可重复插入 可重复插入 NULLS NOT DISTINCT 不可重复插入 非NULL值相等,不可插入;非NULL值不相等,则插入成功 NULLS IGNORE 可重复插入 非NULL值相等,不可插入;非NULL值不相等,则插入成功 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} [, ... ] ) 为表或索引指定一个可选的存储参数。 COMPRESS|NOCOMPRESS NOCOMPRESS:如果指定关键字NOCOMPRESS则不会修改表的现有压缩特性。 COMPRESS:如果指定COMPRESS关键字,则对该表进行批量插入元组时触发该特性。 new_table_name 修改后新的表名称。 new_column_name 表中指定列修改后新的列名称。 new_constraint_name 修改后表约束的新名称。 new_schema 修改后新的模式名称。 CASCADE 级联删除依赖于被依赖字段或者约束的对象(比如引用该字段的视图)。 RESTRICT 如果字段或者约束还有任何依赖的对象,则拒绝删除该字段。这是缺省行为。 schema_name 表所在的模式名称。 cache_policy 表缓存策略,仅云原生3.0版本支持,具体取值参见▪cache_policy(仅云原生3.0版本支...
  • 语法格式 修改表的定义。 1 2 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name ) } action [, ... ]; 其中具体表操作action可以是以下子句之一: 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 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} | DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { HASH ( column_name [,...] ) } } | 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 | REFRESH STORAGE 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索引。这样会影响将来那些没有声明索引的集群操作。 SET ( {storage_parameter = value} [, ... ] ) 修改表的一个或多个存储参数。 RESET ( storage_parameter [, ... ] ) 重置表的一个或多个存储参数。与SET一样,根据参数的不同可能需要重写表才能获得想要的效果。 OWNER TO new_owner 将表、序列、视图的属主改变成指定的用户。 SET {COMPRESS|NOCOMPRESS} 修改表的压缩特性。表压缩特性的改变只会影响后续批量插入的数据的存储方式,对已有数据的存储毫无影响。也就是说,表压缩特性的修改会导致该表中同时存在着已压缩和未压缩的数据。 DISTRIBUTE BY { REPLICATION | ROUNDROBIN | { HASH ( column_name [,...] ) } } 修改表的分布方式,在修改表分布信息的同时会将表数据在物理上按新分布方式重新分布,修改完成后建议对被修改表执行ANALYZE,以便收集全新的统计信息。 本操作属于重大变更操作,涉及表分布信息的修改以及数据的物理重分布,修改过程中会阻塞业务,修改完成后原有业务的执行计划会发生变化,请按照正规变更流程进行。 本操作属于资源密集操作,针对大表的分布方式修改,建议在计算和存储资源充裕情况下进行,保证整个集群和原表所在表空间有足够的剩余空间能存储一张与原表同等大小且按照新分布方式进行分布的表。 TO { GROUP groupname | NODE ( nodename [, ... ] ) } 此语法仅在扩展模式(GUC参数support_extended_features为on时)下可用。该模式谨慎打开,主要供内部扩容工具使用,一般用户不应使用该模式。 ADD NODE ( nodename [, ... ] ) 此语法主要供内部扩容工具使用,一般用户不建议使用。 DELETE NODE ( nodename [, ... ] ) 此语法主要供内部缩容工具使用,一般用户不建议使用。 DISABLE TRIGGER [ trigger_name | ALL | USER ] 禁用trigger_name所表示的单个触发器,或禁用所有触发器,或仅禁用用户触发器(此选项不包括内部生成的约束触发器,例如,可延迟唯一性和排除约束的约束触发器)。 应谨慎使用此功能,因为如果不执行触发器,则无法保证原先期望的约束的完整性。 ENABLE TRIGGER [ trigger_name | ALL | USER ] 启用trigger_name所表示的单个触发器,或启用所有触发器,或仅启用用户触发器。 ENABLE REPLICA TRIGGER trigger_name 触发器触发机制受配置变量session_replication_role的影响,当复制角色为“origin”(默认值)或“local”时,将触发简单启用的触发器。 配置为ENABLE REPLICA的触发器仅在会话处于“replica”模式时触发。 ENABLE ALWAYS TRIGGER trigger_name 无论当前复制模式如何,配置为ENABLE ALWAYS的触发器都将触发。 DISABLE/ENABLE ROW LEVEL SECURITY 开启或关闭表的行访问控制开关。 当开启行访问控制开关时,如果未在该数据表定义相关行访问控制策略,数据表的行级访问将不受影响;如果关闭表的行访问控制开关,即使定义了行访问控制策略,数据表的行访问也不受影响。详细信息参见CREATE ROW LEVEL SECURITY POLICY章节。 NO FORCE/FORCE ROW LEVEL SECURITY 强制开启或关闭表的行访问控制开关。 默认情况,表所有者不受行访问控制特性影响,但当强制开启表的行访问控制开关时,表的所有者(不包含系统管理员用户)会受影响。系统管理员可以绕过所有的行访问控制策略,不受影响。 REFRESH STORAGE 根据OBS冷热表storage_policy所定义的规则,将符合条件的本地热分区切换为存储在OBS上的冷分区。 例如创建OBS冷热表时,设置storage_policy 为 'LMT:10',则在执行该操作时可将10日前无修改的分区切为冷存储,存至OBS中。 其中列相关的操作column_clause可以是以下子句之一: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ADD [ COLUMN ] column_name data_type [ compress_mode ] [ COLLATE collation ] [ column_constraint [ ... ] ] | MODIFY [ COLUMN ] column_name data_type | MODIFY [ COLUMN ] column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | MODIFY [ COLUMN ] column_name [ CONSTRAINT constraint_name ] NULL | MODIFY [ COLUMN ] column_name DEFAULT default_expr | MODIFY [ COLUMN ] column_name ON UPDATE on_update_expr | MODIFY [ COLUMN ] column_name COMMENT comment_text | 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 STATIS TICS [PERCENT] integer | ADD STATISTICS (( column_1_name, column_2_name [, ...] )) | ADD { INDEX | UNIQUE [ INDEX ] } [ index_name ] ( { { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS LAST ] } [, ...] ) [ USING method ] [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] [ COMMENT 'text' ] LOCAL [ ( { PARTITION index_partition_name } [, ...] ) ] [ WITH ( { storage_parameter = value } [, ...] ) ] | ADD { INDEX | UNIQUE [ INDEX ] } [ index_name ] ({ { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] }[, ...] ) [ USING method ] [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] [ COMMENT 'text' ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ WHERE predicate ] | DROP { INDEX | KEY } index_name | CHANGE [ COLUMN ] old_column_name new_column_name data_type [ [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | [ CONSTRAINT constraint_name ] NULL | DEFAULT default_expr | COMMENT 'text' ] | 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 } 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 ] column_name data_type 修改表已存在字段的数据类型。 MODIFY [ COLUMN ] column_name [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] 为表的某列添加not null约束,列存表暂不支持。 MODIFY [ COLUMN ] column_name [ CONSTRAINT constraint_name ] NULL 为表的某列移除not null约束。 MODIFY [ COLUMN ] column_name DEFAULT default_expr 修改表的default值。 MODIFY [ COLUMN ] column_name ON UPDATE on_update_expr 修改表中指定列的on update表达式,该列必须为timestamp类型或者timestamptz类型,当on_update_expr为NULL值时,则为删除ON UPDATE子句。 MODIFY [ COLUMN ] column_name COMMENT comment_text 修改表的注释信息。 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要求重写整个表的特性有时候是一个优点,因为重写的过程消除了表中没用的空间。比如,要想立刻回收被一个已经删除的字段占据的空间,最快的方法是 1 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 { INDEX | UNIQUE [ INDEX ] } [ index_name ] ( { { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS LAST ] } [, ...] ) [ USING method ] [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] [ COMMENT 'text' ] LOCAL [ ( { PARTITION index_partition_name } [, ...] ) ] [ WITH ( { storage_parameter = value } [, ...] ) ] 为表的分区表创建索引,具体参数可参考CREATE INDEX。 ADD { INDEX | UNIQUE [ INDEX ] } [ index_name ] ({ { column_name | ( expression ) } [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] }[, ...] ) [ USING method ] [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] [ COMMENT 'text' ] [ WITH ( {storage_parameter = value} [, ... ] ) ] [ WHERE predicate ] 在表上创建索引,具体参数可参考CREATE INDEX。 DROP { INDEX | KEY } index_name 删除一个表上的索引。 CHANGE [ COLUMN ] old_column_name new_column_name data_type [ [ CONSTRAINT constraint_name ] NOT NULL [ ENABLE ] | [ CONSTRAINT constraint_name ] NULL | DEFAULT default_expr | COMMENT 'text' ] 修改表中列信息,可将旧列名修改成新列名,以及修改列字段信息。 {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和cstore_cu_sample_ratio。n_distinct 设置并固定表的distinct值统计信息,n_distinct_inherited 设置并固定继承表的distinct值统计信息,cstore_cu_sample_ratio 设置对cstore列存表进行analyze时所选CU的比例。目前,禁止SET/RESET n_distinct_inherited参数。 n_distinct 手动设置该列的distinct值统计信息。 取值范围:-1.0 ~ INT_MAX 默认值:0,表示不设置。 n_distinct_inherited 手动设置继承表的该列的distinct值统计信息。 取值范围:-1.0 ~ INT_MAX 默认值:0,表示不设置。 cstore_cu_sample_ratio 设置列存表执行analyze,计算需要采样的CU个数时,需要扩大的倍数。 取值范围:1.0 ~ 10000.0 默认值:1.0 ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN } 为一个字段设置存储模式。这个设置控制这个字段是内联保存还是保存在一个附属的表里,以及数据是否要压缩。仅支持对行存表的设置;对列存表没有意义,执行时报错。SET STORAGE本身并不改变表上的任何东西,只是设置将来的表操作时,建议使用的策略。 其中列约束column_constraint为: 1 2 3 4 5 6 7 8 [ CONSTRAINT constraint_name ] { NOT NULL | NULL | CHECK ( expression ) | DEFAULT default_expr | UNIQUE [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] index_parameters | PRIMARY KEY index_parameters } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中列的压缩可选项compress_mode为: 1 [ DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS ] 其中根据已有唯一索引为表增加主键约束或唯一约束table_constraint_using_index为: 1 2 3 [ CONSTRAINT constraint_name ] { UNIQUE | PRIMARY KEY } USING INDEX index_name [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中表约束table_constraint为: 1 2 3 4 5 6 [ CONSTRAINT constraint_name ] { CHECK ( expression ) | UNIQUE [ NULLS [ NOT ] DISTINCT | NULLS IGNORE ] ( column_name [, ... ] ) index_parameters | PRIMARY KEY ( column_name [, ... ] ) index_parameters } [ DEFERRABLE | NOT DEFERRABLE | INITIALLY DEFERRED | INITIALLY IMMEDIATE ] 其中索引参数index_parameters为: 1 2 [ WITH ( {storage_parameter = value} [, ... ] ) ] [ USING INDEX TABLESPACE tablespace_name ]
  • 注意事项 只有表的所有者或者被授予了表ALTER权限的用户有权限执行ALTER TABLE命令,系统管理员默认拥有此权限。若要修改表的所有者或者修改表的模式,当前用户必须是该表的所有者或者系统管理员。 不支持修改存储参数ORIENTATION。 SET SCHEMA操作不支持修改为系统内部模式,当前仅支持用户模式之间的修改。 列存表支持PARTIAL CLUSTER KEY,不支持外键表级约束。列存表从8.1.1版本开始支持主键和唯一表级约束。 列存表只支持添加字段ADD COLUMN、修改字段的数据类型ALTER TYPE、设置单个字段的收集目标SET STATISTICS、支持更改表名字、支持删除字段DROP COLUMN。对于添加的字段和修改的字段类型要求是列存支持的数据类型。ALTER TYPE的USING选项只支持常量表达式和涉及本字段的表达式,暂不支持涉及其他字段的表达式。 列存表支持的字段约束包括NULL、NOT NULL和DEFAULT常量值;对字段约束的修改,当前支持对DEFAULT值的修改(SET DEFAULT)、删除(DROP DEFAULT)和NOT NULL约束的删除; 支持对列存表添加非空约束NOT NULL以及主键约束。该约束仅8.2.0及以上集群版本支持。 修改列存表存储参数COLVERSION或者enable_delta时,不能与其他ALTER操作同时进行。
共100000条