云服务器内容精选

  • 查看数据 使用系统表pg_tables查询数据库所有表的信息。 1 openGauss=# SELECT * FROM pg_tables; 使用gsql的\d+命令查询表的属性。 1 openGauss=# \d+ customer_t1; 执行如下命令查询表customer_t1的数据量。 1 openGauss=# SELECT count(*) FROM customer_t1; 执行如下命令查询表customer_t1的所有数据。 1 openGauss=# SELECT * FROM customer_t1; 执行如下命令只查询字段c_customer_sk的数据。 1 openGauss=# SELECT c_customer_sk FROM customer_t1; 执行如下命令过滤字段c_customer_sk的重复数据。 1 openGauss=# SELECT DISTINCT( c_customer_sk ) FROM customer_t1; 执行如下命令查询字段c_customer_sk为3869的所有数据。 1 openGauss=# SELECT * FROM customer_t1 WHERE c_customer_sk = 3869; 执行如下命令按照字段c_customer_sk进行排序。 1 openGauss=# SELECT * FROM customer_t1 ORDER BY c_customer_sk; 父主题: 创建和管理表
  • 创建表 执行如下命令创建表。 1 2 3 4 5 6 7 openGauss=# CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四个字段名称的类型。 默认情况下,新的数据库对象是创建在“$user”模式下的,例如刚刚新建的表。关于模式的更多信息请参考创建和管理schema。 除了创建的表以外,数据库还包含很多系统表。这些系统表包含数据库安装信息以及 GaussDB 上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。请参见查看系统表。
  • 删除表中数据 在使用表的过程中,可能会需要删除已过期的数据,删除数据必须从表中整行的删除。 SQL不能直接访问独立的行,只能通过声明被删除行匹配的条件进行。如果表中有一个主键,用户可以指定准确的行。用户可以删除匹配条件的一组行或者一次删除表中的所有行。 使用DELETE命令删除行,如果删除表customer_t1中所有c_customer_sk为3869的记录: 1 openGauss=# DELETE FROM customer_t1 WHERE c_customer_sk = 3869; 如果执行如下命令之一,会删除表中所有的行。 1 openGauss=# DELETE FROM customer_t1; 1 2 或: openGauss=# TRUNCATE TABLE customer_t1; 全表删除的场景下,建议使用truncate,不建议使用delete。 删除创建的表: 1 openGauss=# DROP TABLE customer_t1; 父主题: 创建和管理表
  • 操作步骤 向表中插入数据前,意味着表已创建成功。创建表的步骤请参考创建和管理表。 向表customer_t1中插入一行: 数据值是按照这些字段在表中出现的顺序列出的,并且用逗号分隔。通常数据值是文本(常量),但也允许使用标量表达式。 1 openGauss=# INSERT INTO customer_t1(c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', 'Grace'); 如果用户已经知道表中字段的顺序,也可无需列出表中的字段。例如以下命令与上面的命令效果相同。 1 openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace'); 如果用户不知道所有字段的数值,可以忽略其中的一些。如果INSERT语句中,用户没有显示指定目标表的字段名字,那么VALUES子句中待插入的多个值,将按照列号和目标表的字段一一对应,即VALUES子句的第一个值对应目标表的第一列,VALUES子句的第二个值对应目标表的第二列,依次类推,没有VALUES数值对应的列自动填充缺省值或NULL。例如: 1 2 3 openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_first_name) VALUES (3769, 'Grace'); openGauss=# INSERT INTO customer_t1 VALUES (3769, 'hello'); 用户也可以对独立的字段或者整个行明确缺省值: 1 2 3 openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (3769, 'hello', DEFAULT); openGauss=# INSERT INTO customer_t1 DEFAULT VALUES; 如果需要在表中插入多行,请使用以下命令: 1 2 3 4 openGauss=# INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES (6885, 'maps', 'Joes'), (4321, 'tpcds', 'Lily'), (9527, 'world', 'James'); 如果需要向表中插入多条数据,除此命令外,也可以多次执行插入一行数据命令实现。但是建议使用此命令可以提升效率。 如果从指定表插入数据到当前表,例如在数据库中创建了一个表customer_t1的备份表customer_t2,现在需要将表customer_t1中的数据插入到表customer_t2中,则可以执行如下命令。 1 2 3 4 5 6 7 8 9 openGauss=# CREATE TABLE customer_t2 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ); openGauss=# INSERT INTO customer_t2 SELECT * FROM customer_t1; 从指定表插入数据到当前表时,若指定表与当前表对应的字段数据类型之间不存在隐式转换,则这两种数据类型必须相同。 删除备份表 1 openGauss=# DROP TABLE customer_t2 CASCADE; 在删除表的时候,若当前需删除的表与其他表有依赖关系,需先删除关联的表,然后再删除当前表。
  • 背景信息 服务端与客户端使用不同的字符集时,两者字符集中单个字符的长度也会不同,客户端输入的字符串会以服务端字符集的格式进行处理,所以产生的最终结果可能会与预期不一致。 表1 客户端和服务端设置字符集的输出结果对比 操作过程 服务端和客户端编码一致 服务端和客户端编码不一致 存入和取出过程中没有对字符串进行操作 输出预期结果 输出预期结果(输入与显示的客户端编码必须一致)。 存入取出过程对字符串有做一定的操作(如字符串函数操作) 输出预期结果 根据对字符串具体操作可能产生非预期结果。 存入过程中对超长字符串有截断处理 输出预期结果 字符集中字符编码长度是否一致,如果不一致可能会产生非预期的结果。 上述字符串函数操作和自动截断产生的效果会有叠加效果,例如:在客户端与服务端字符集不一致的场景下,如果既有字符串操作,又有字符串截断,在字符串被处理完以后的情况下继续截断,这样也会产生非预期的效果。详细的示例请参见表2。 数据库DBCOMPATIBILITY设为兼容TD(Teradata)模式,且td_compatible_truncation参数设置为on的情况下,才会对超长字符串进行截断。 执行如下命令建立示例中需要使用的表table1、table2。 1 2 openGauss=# CREATE TABLE table1(id int, a char(6), b varchar(6),c varchar(6)); openGauss=# CREATE TABLE table2(id int, a char(20), b varchar(20),c varchar(20)); 表2 示例 编号 服务端字符集 客户端字符集 是否启用自动截断 示例 结果 说明 1 SQL_ASCII UTF8 是 1 openGauss=# INSERT INTO table1 VALUES(1,reverse('123AA78'),reverse('123AA78'),reverse('123AA78')); 1 2 3 id |a|b|c ----+------+------+------ 1 | 87| 87| 87 字符串在服务端翻转后,并进行截断,由于服务端和客户端的字符集不一致,字符A在客户端由多个字节表示,结果产生异常。 2 SQL_ASCII UTF8 是 1 openGauss=# INSERT INTO table1 VALUES(2,reverse('123A78'),reverse('123A78'),reverse('123A78')); 1 2 3 id |a|b|c ----+------+------+------ 2 | 873| 873| 873 字符串翻转后,又进行了自动截断,所以产生了非预期的效果。 3 SQL_ASCII UTF8 是 1 openGauss=# INSERT INTO table1 VALUES(3,'87A123','87A123','87A123'); 1 2 3 id | a | b | c ----+-------+-------+------- 3 | 87A1 | 87A1 | 87A1 字符串类型的字段长度是客户端字符编码长度的整数倍,所以截断后产生结果正常。 4 SQL_ASCII UTF8 否 1 2 openGauss=# INSERT INTO table2 VALUES(1,reverse('123AA78'),reverse('123AA78'),reverse('123AA78')); openGauss=# INSERT INTO table2 VALUES(2,reverse('123A78'),reverse('123A78'),reverse('123A78')); 1 2 3 4 id |a|b|c ----+-------------------+--------+-------- 1 | 87 321| 87 321 | 87 321 2 | 87321| 87321| 87321 与示例1类似,多字节字符翻转之后不再表示原来的字符。
  • 创建表 执行如下命令创建表。 1 2 3 4 5 6 7 8 openGauss=# CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ) distribute by hash (c_last_name); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四个字段名称的类型。 默认情况下,新的数据库对象是创建在“$user”模式下的,例如刚刚新建的表。关于模式的更多信息请参考创建和管理schema。 除了创建的表以外,数据库还包含很多系统表。这些系统表包含集群安装信息以及GaussDB上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。请参见查看系统表。
  • 创建表 执行如下命令创建表。 1 2 3 4 5 6 7 gaussdb=# CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四个字段名称的类型。 默认情况下,新的数据库对象是创建在“$user”模式下。关于模式的更多信息请参见创建和管理schema。 除了创建的表以外,数据库还包含很多系统表。这些系统表包含数据库安装信息以及GaussDB上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。请参见查看系统表。 关于创建表的更多信息请参见CREATE TABLE。
  • 创建表 执行如下命令创建表。 1 2 3 4 5 6 7 8 gaussdb=# CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ) distribute by hash (c_last_name); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四个字段名称的类型。 默认情况下,新的数据库对象是创建在“$user”模式下。关于模式的更多信息请参见创建和管理schema。 除了创建的表以外,数据库还包含很多系统表。这些系统表包含集群安装信息以及GaussDB上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。请参见查看系统表。 关于创建表的更多信息请参见CREATE TABLE。
  • 创建表 执行如下命令创建表。 1 2 3 4 5 6 7 gaussdb=# CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四个字段名称的类型。 默认情况下,新的数据库对象是创建在“$user”模式下的。关于模式的更多信息请参见创建和管理schema。 除了创建的表以外,数据库还包含很多系统表。这些系统表包含数据库安装信息以及GaussDB上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。请参见查看系统表。 关于创建表的更多信息请参见CREATE TABLE。
  • 创建表 执行如下命令创建表。 1 2 3 4 5 6 7 8 gaussdb=# CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ) distribute by hash (c_last_name); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四个字段名称的类型。 默认情况下,新的数据库对象是创建在“$user”模式下。关于模式的更多信息请参见创建和管理schema。 除了创建的表以外,数据库还包含很多系统表。这些系统表包含集群安装信息以及GaussDB上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。请参见查看系统表。 关于创建表的更多信息请参见CREATE TABLE。
  • 更新表中数据 修改已经存储在数据库中数据的行为叫做更新。用户可以更新单独一行,所有行或者指定的部分行。还可以独立更新每个字段,而其他字段则不受影响。 使用UPDATE命令更新现有行,需要提供以下三种信息: 表的名称和要更新的字段名 字段的新值 要更新哪些行 SQL通常不会为数据行提供唯一标识,因此无法直接声明需要更新哪一行。但是可以通过声明一个被更新的行必须满足的条件。只有在表里存在主键的时候,才可以通过主键指定一个独立的行。 建立表和插入数据的步骤请参考创建表和向表中插入数据。 需要将表customer_t1中c_customer_sk为9527的地域重新定义为9876: 1 postgres=# UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527; 这里的表名称也可以使用模式名修饰,否则会从默认的模式路径找到这个表。SET后面紧跟字段和新的字段值。新的字段值不仅可以是常量,也可以是变量表达式。 比如,把所有c_customer_sk的值增加100: 1 postgres=# UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100; 在这里省略了WHERE子句,表示表中的所有行都要被更新。如果出现了WHERE子句,那么只有匹配其条件的行才会被更新。 在SET子句中的等号是一个赋值,而在WHERE子句中的等号是比较。WHERE条件不一定是相等测试,许多其他的操作符也可以使用。 用户可以在一个UPDATE命令中更新更多的字段,方法是在SET子句中列出更多赋值,比如: 1 postgres=# UPDATE customer_t1 SET c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 4421; 批量更新或删除数据后,会在数据文件中产生大量的删除标记,查询过程中标记删除的数据也是需要扫描的。故多次批量更新/删除后,标记删除的数据量过大会严重影响查询的性能。建议在批量更新/删除业务会反复执行的场景下,定期执行VACUUM FULL以保持查询性能。 父主题: 创建和管理表
  • 创建表 执行如下命令创建表。 1 2 3 4 5 6 7 8 9 postgres=# CREATE TABLE customer_t1 ( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8) ) with (orientation = column,compression=middle) distribute by hash (c_last_name); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四个字段名称的类型。
  • 创建表 执行如下命令创建表。 1234567 gaussdb=# CREATE TABLE customer_t1( c_customer_sk integer, c_customer_id char(5), c_first_name char(6), c_last_name char(8)); 当结果显示为如下信息,则表示创建成功。 1 CREATE TABLE 其中c_customer_sk 、c_customer_id、c_first_name和c_last_name是表的字段名,integer、char(5)、char(6)和char(8)分别是这四个字段名称的类型。 默认情况下,新的数据库对象是创建在“$user”模式下的,例如刚刚新建的表。关于模式的更多信息请参考创建和管理schema。 除了创建的表以外,数据库还包含很多系统表。这些系统表包含数据库安装信息以及GaussDB Kernel上运行的各种查询和进程的信息。可以通过查询系统表来收集有关数据库的信息。请参见查看系统表。 GaussDB Kernel支持行列混合存储,为各种复杂场景下的交互分析提供较高的查询性能,关于存储模型的选择,请参考规划存储模型。