云服务器内容精选

  • 查看和停止正在运行的查询语句 通过视图PG_STAT_ACTIVITY可以查看正在运行的查询语句。方法如下: 设置参数track_activities为on。 1 SET track_activities = on; 当此参数为on时,数据库系统才会获取当前活动查询的运行信息。 查看正在运行的查询语句。以查看正在运行的查询语句所连接的数据库名、执行查询的用户、查询状态及查询对应的PID为例: 1 SELECT datname, usename, state,pid FROM pg_stat_activity; 1 2 3 4 5 6 7 8 datname | usename | state | pid ----------+---------+--------+----------------- testdb | Ruby | active | 140298793514752 testdb | Ruby | active | 140298718004992 testdb | Ruby | idle | 140298650908416 testdb | Ruby | idle | 140298625742592 testdb | omm | active | 140298575406848 (5 rows) 如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。 如果仅需要查看非空闲的查询语句,则执行如下命令查看: 1 SELECT datname, usename, state, pid FROM pg_stat_activity WHERE state != 'idle'; 若需要取消运行时间过长的查询,通过PG_TERMINATE_BACKEND函数,根据线程ID(即2中查询结果的pid字段)结束会话。 1 SELECT PG_TERMINATE_BACKEND(140298793514752); 显示类似如下信息,表示结束会话成功。 1 2 3 4 PG_TERMINATE_BACKEND ---------------------- t (1 row) 显示类似如下信息,表示用户执行了结束当前会话的操作。 1 2 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command gsql客户端使用PG_TERMINATE_BACKEND函数结束当前正在执行会话的后台线程时,如果当前的用户是初始用户,客户端不会退出而是自动重连,即还会返回“The connection to the server was lost. Attempting reset: Succeeded.”;否则客户端会重连失败,即返回。“The connection to the server was lost. Attempting reset: Failed.”。这是因为只有初始用户可以免密登录,普通用户不能免密登录,从而重连失败。 对于使用PG_TERMINATE_BACKEND函数结束非活跃的后台线程时,如果打开了线程池,此时空闲的会话没有线程ID,无法结束会话。非线程池模式下,结束的会话不会自动重连。
  • 查看数据库用户 通过PG_USER可以查看数据库中所有用户的列表,还可以查看用户ID(USESYSID)和用户权限。 1 2 3 4 5 6 7 8 SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valbegin | valuntil | respool | parent | spacelimit | useconfig | nodegroup | tempspacelimit | spillsp acelimit | usemonitoradmin | useoperatoradmin | usepolicyadmin ---------+----------+-------------+----------+-----------+---------+----------+----------+----------+--------------+--------+------------+-----------+-----------+----------------+-------- ---------+-----------------+------------------+---------------- omm | 10 | t | t | t | t | ******** | | | default_pool | 0 | | | | | | t | t | t (1 row)
  • 查看数据库中包含的表 在public Schema下新建五张表: gaussdb=# CREATE TABLE public.search_table_t1(a int) distribute by hash(a); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t2(b int) distribute by hash(b); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t3(c int) distribute by hash(c); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t4(d int) distribute by hash(d); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t5(e int) distribute by hash(e); CREATE TABLE 在PG_TABLES系统表中查看public Schema中包含的前缀为search_table的表: 1 gaussdb=# SELECT distinct(tablename) FROM pg_tables WHERE SCHEMANAME = 'public' AND TABLENAME LIKE 'search_table%'; 结果如下: 1 2 3 4 5 6 7 8 tablename ----------------- search_table_t1 search_table_t2 search_table_t3 search_table_t4 search_table_t5 (5 rows)
  • 查看数据库中包含的表 在public Schema下新建以下表格。 gaussdb=# CREATE TABLE public.search_table_t1(a int); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t2(b int); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t3(c int); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t4(d int); CREATE TABLE gaussdb=# CREATE TABLE public.search_table_t5(e int); CREATE TABLE 在PG_TABLES系统表中查看public Schema中包含的前缀为search_table的表。 1 gaussdb=# SELECT distinct(tablename) FROM pg_tables WHERE SCHEMANAME = 'public' AND TABLENAME LIKE 'search_table%'; 结果如下: 1 2 3 4 5 6 7 8 tablename ----------------- search_table_t1 search_table_t2 search_table_t3 search_table_t4 search_table_t5 (5 rows)
  • 查看和停止正在运行的查询语句 通过视图PG_STAT_ACTIVITY可以查看正在运行的查询语句。方法如下: 设置参数track_activities为on。 1 SET track_activities = on; 当此参数为on时,数据库系统才会获取当前活动查询的运行信息。 查看正在运行的查询语句。以查看正在运行的查询语句所连接的数据库名、执行查询的用户、查询状态及查询对应的PID为例。 1 SELECT datname, usename, state,pid FROM pg_stat_activity; 1 2 3 4 5 6 7 8 datname | usename | state | pid ----------+---------+--------+----------------- testdb | Ruby | active | 140298793514752 testdb | Ruby | active | 140298718004992 testdb | Ruby | idle | 140298650908416 testdb | Ruby | idle | 140298625742592 testdb | omm | active | 140298575406848 (5 rows) 如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。 如果仅需要查看非空闲的查询语句,则执行如下命令查看。 1 SELECT datname, usename, state, pid FROM pg_stat_activity WHERE state != 'idle'; 若需要取消运行时间过长的查询,通过PG_TERMINATE_BACKEND函数,根据线程ID(即2中查询结果的pid字段)结束会话,请执行如下命令。 1 SELECT PG_TERMINATE_BACKEND(140298793514752); 显示如下信息,表示结束会话成功。 1 2 3 4 PG_TERMINATE_BACKEND ---------------------- t (1 row) 显示如下信息,表示用户执行了结束当前会话的操作。 1 2 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command 1. gsql客户端使用PG_TERMINATE_BACKEND函数结束当前正在执行会话的后台线程时,如果当前的用户是初始用户,客户端不会退出而是自动重连,即返回“The connection to the server was lost. Attempting reset: Succeeded.”。否则客户端会重连失败,即返回“The connection to the server was lost. Attempting reset: Failed.”。这是因为只有初始用户可以免密登录,普通用户不能免密登录,从而重连失败。 2. 对于使用PG_TERMINATE_BACKEND函数结束非活跃的后台线程时,如果打开了线程池,此时空闲的会话没有线程ID,无法结束会话。非线程池模式下,结束的会话不会自动重连。 1 2 3 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command The connection to the server was lost. Attempting reset: Succeeded.
  • 查看数据库用户 通过PG_USER可以查看数据库中所有用户的列表,还可以查看用户ID(USESYSID)和用户权限。 1 SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valbegin | valuntil | respool | parent | spacelimit | useconfig | no degroup | tempspacelimit | spillspacelimit | usemonitoradmin | useoperatoradmin | usepolicyadmin ---------+----------+-------------+----------+-----------+---------+----------+----------+----------+--------------+--------+------------+-----------+--- --------+----------------+-----------------+-----------------+------------------+---------------- omm | 10 | t | t | t | t | ******** | | | default_pool | 0 | | | | | | t | t | t
  • 注意事项 如果数据库的编码为SQL_ASCII(可以通过“show server_encoding;”命令查看当前数据库存储编码),则在创建数据库对象时,如果对象名中含有多字节字符(例如中文),超过数据库对象名长度限制(63字节)的时候,数据库将会将最后一个字节(而不是字符)截断,可能造成出现半个字符的情况。 针对这种情况,请遵循以下条件: 保证数据对象的名称不超过限定长度。 修改数据库的默认存储编码集(server_encoding)为utf-8编码集。 不要使用多字节字符作为对象名。 当出现因为误操作导致在多字节字符的中间截断,从而导致无法删除数据库对象的现象时,请使用截断前的数据库对象名进行删除操作,或将该对象从各个数据库节点的相应系统表中依次删除。
  • 背景信息 初始时, GaussDB 包含三个模板数据库template0、template1、templatem以及一个默认的用户数据库postgres。postgres默认的兼容数据库类型为O(即DBCOMPATIBILITY = A ),该兼容类型下将空字符串作为NULL处理。 CREATE DATABASE实际上通过复制模板数据库来创建新数据库。默认情况下,复制template0。请避免使用客户端或其他方式连接及操作两个模板数据库。 模板数据库中没有用户表,可通过系统表PG_DATABASE查看模板数据库属性。 模板template0不允许用户连接,模板template1和templatem只允许数据库初始用户和系统管理员连接,普通用户无法连接。 数据库系统中会有多个数据库,但是客户端程序一次只能连接一个数据库。也不能在不同的数据库之间相互查询。GaussDB中存在多个数据库时,需要通过-d参数指定相应的数据库实例进行连接。
  • 行存表 默认创建表的类型。数据按行进行存储,即一行数据是连续存储。适用于对数据需要经常更新的场景。 1 2 3 4 5 6 7 8 9 gaussdb=# CREATE TABLE customer_t1 ( state_ID CHAR(2), state_NAME VARCHAR2(40), area_ID NUMBER ); --删除表 gaussdb=# DROP TABLE customer_t1;
  • 列存表 数据按列进行存储,即一列所有数据是连续存储的。单列查询IO小,比行存表占用更少的存储空间。适合数据批量插入、更新较少和以查询为主统计分析类的场景。列存表不适合点查询。 1 2 3 4 5 6 7 8 9 10 gaussdb=# CREATE TABLE customer_t2 ( state_ID CHAR(2), state_NAME VARCHAR2(40), area_ID NUMBER ) WITH (ORIENTATION = COLUMN); --删除表 gaussdb=# DROP TABLE customer_t2;
  • 注意事项 如果数据库的编码为SQL_ASCII(可以通过“show server_encoding;”命令查看当前数据库存储编码),则在创建数据库对象时,如果对象名中含有多字节字符(例如中文),超过数据库对象名长度限制(63字节)的时候,数据库将会将最后一个字节(而不是字符)截断,可能造成出现半个字符的情况。 针对这种情况,请遵循以下条件: 保证数据对象的名称不超过限定长度。 修改数据库的默认存储编码集(server_encoding)为utf-8编码集。 不要使用多字节字符做为对象名。 因为误操作导致在多字节字符的中间截断,从而导致无法删除数据库对象,如果出现这种现象,请使用截断前的数据库对象名进行删除操作,或将该对象从各个数据库节点的相应系统表中依次删掉。
  • 背景信息 初始时,GaussDB包含两个模板数据库template0、template1,以及一个默认的用户数据库postgres。postgres默认的兼容数据库类型为O(即DBCOMPATIBILITY = A ),该兼容类型下将空字符串作为NULL处理。 CREATE DATABASE实际上通过拷贝模板数据库来创建新数据库。默认情况下,拷贝template0。请避免使用客户端或其他手段连接及操作两个模板数据库。 模板数据库中没有用户表,可通过系统表PG_DATABASE查看模板数据库属性。 模板template0不允许用户连接;模板template1只允许数据库初始用户和系统管理员连接,普通用户无法连接。 数据库系统中会有多个数据库,但是客户端程序一次只能连接一个数据库。也不能在不同的数据库之间相互查询。一个GaussDB中存在多个数据库时,需要通过-d参数指定相应的数据库实例进行连接。
  • 创建数据库用户 默认只有数据库安装时创建的管理员用户可以访问初始数据库,您还可以创建其他数据库用户账号。 1 gaussdb=# CREATE USER joe WITH PASSWORD "xxxxxxxxx"; 当结果显示为如下信息,则表示创建成功。 1 CREATE ROLE 如上创建了一个用户名为joe,密码为xxxxxxxxx的用户。 如下命令为设置joe用户为系统管理员。 gaussdb=# GRANT ALL PRIVILEGES TO joe; 使用GRANT命令进行相关权限设置,具体操作请参考GRANT。 关于数据库用户的更多信息请参考用户及权限。 父主题: 操作数据库