UNVDB基础之数据库管理
常用的命令及解释
unvdb 常用命令
ud_sql 工具是 unvdb 提供的一个客户端程序。您能使用 ud_sql 工具管理 unvdb 数据库服务器。 本文整理了常用的 ud_sql 命令,以便您能够更加有效的管理unvdb 数据库服务器。
连接 UNVDB
要使用 ud_sql 工具管理 unvdb 服务器,请先连接到 unvdb 服务器。 命令如下:
ud_sql -d dbname -U user -W
如果您需要连接一个远程的 unvdb 服务器,请使用如下命令:
ud_sql -h host -p port -d dbname -U user -W
其中:
-h
参数用于指定远程 unvdb 服务器的主机名或者 IP 地址。 默认值为localhost
。-p
参数用于指定远程 unvdb 服务器的端口号。默认值为 5678。
ud_sql 常用命令
当您使用 ud_sql 登录进 unvdb 服务器以后,您就可以使用下面的命令管理服务器了。
列出所有的数据库
要列出当前 unvdb 数据库服务器中的所有数据库,请使用 \l
或者 \l+
命令:
\l
或者
\l+
连接到数据库,选择数据库
连接数据库请使用 \c
或者 \connect
命令。
要使用当前用户连接到新的数据库,请使用如下命令:
\c dbname
要使用新的用户连接到当前数据库,请使用如下命令:
\c - username
您可以是用 \connect
替换上面命令中的 \c
,他们是等效的。
列出数据库中的表
要列出当前数据库中的表,请使用 \dt
或者 \dt+
命令:
\dt
或者
\dt+
显示表结构
要显示一个表的结构或定义,比如 列,约束等信息,请使用 \d
命令:
\d table_name
比如,要查看 product
表的结构,请使用如下命令:
\d product
testdb=# \d product
Table "public.product"
Column | Type | Collation | Nullable | Default
--------------+-------------------+-----------+----------+------------------------------
id | integer | | not null | generated always as identity
product_name | character varying | | not null |
attributes | hstore | | |
Indexes:
"product_pkey" PRIMARY KEY, btree (id)
列出可用模式
要列出当前连接的数据库的所有模式,请使用该 \dn
命令。
\dn
List of schemas
Name | Owner
--------+----------
public | unvdb
列出可用的函数
要列出当前数据库中的可用函数,请使用该 \df
命令。
\df
List of functions
Schema | Name | Result data type | Argument data types | Type
--------+--------------------------+--------------------+---------------------------------------------------------+------
public | akeys | text[] | hstore | func
public | avals | text[] | hstore | func
public | defined | boolean | hstore, text | func
public | delete | hstore | hstore, hstore | func
public | delete | hstore | hstore, text | func
public | delete | hstore | hstore, text[] | func
....
(65 rows)
列出可用视图
要列出当前数据库中的可用视图,请使用该 \dv
命令。
\dv
列出用户及其角色
要列出所有用户及其分配的角色s,请使用 \du
命令:
\du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
unvdb | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
开启查询执行时间
要打开查询执行时间,请使用该 \timing
命令。
\timing
select * from product;
id | product_name | attributes
----+--------------+--------------------------------------------------------------
2 | Shirt B | "Color"=>"White", "Style"=>"Business", "Season"=>"Spring"
1 | Computer A | "CPU"=>"2.5", "Disk"=>"1T", "Brand"=>"Dell", "Memory"=>"16G"
(2 rows)
Time: 0.281 ms
当您再次运行 \timing
命令,则会关闭查询执行时间。
查看命令历史
要显示命令历史记录,请使用该 \s
命令。
\s
如果要将命令历史保存到文件中,则需要在 \s
命令后指定文件名 ,如下所示:
\s filename
执行上一条命令
要想执行最近的一条命令, 请使用 \g
命令:
\g
\g
可让你避免重新输入上一条命令。
获取 SQL 命令的帮助
要获取 SQL 命令的说明,请使用 \h
命令,如下:
\h sql_command
比如,要获取 TRUNCATE
的帮助说明,请使用如下的命令:
\h TRUNCATE
Command: TRUNCATE
Description: empty a table or set of tables
Syntax:
TRUNCATE [ TABLE ] [ ONLY ] name [ * ] [, ... ]
[ RESTART IDENTITY | CONTINUE IDENTITY ] [ CASCADE | RESTRICT ]
URL: https://www.uvndb.org/docs/22/sql-truncate.html
获取 ud_sql 的帮助
要了解 ud_sql 命令的详细用法,请使用 \?
命令
\?
从文件中执行 ud_sql 命令
如果要从文件执行 ud_sql 命令,请 \i
按如下方式使用命令:
\i filename
打开扩展显示
要为 SELECT
语句的结果集打开扩展显示,请使用 \x
命令。
\x
select * from product;
-[ RECORD 1 ]+-------------------------------------------------------------
id | 2
product_name | Shirt B
attributes | "Color"=>"White", "Style"=>"Business", "Season"=>"Spring"
-[ RECORD 2 ]+-------------------------------------------------------------
id | 1
product_name | Computer A
attributes | "CPU"=>"2.5", "Disk"=>"1T", "Brand"=>"Dell", "Memory"=>"16G"
扩展显示对于显示那些很长的列很有帮助。
如果您再次运行 \x
命令。则回关闭扩展显示。
退出 unvdb
要退出 ud_sql,您可以使用 \q
命令并按下 enter
(回车) 退出 ud_sql。
\q
快捷键也是可以的 ctrl+D
退出当前。
在 unvdb 中列出所有数据库
unvdb 提供了两种方法列出 unvdb 服务器中的所有数据库:
在
ud_sql
工具中使用\l
或者\l+
列出所有的数据库。从
pg_database
表中查询所有的数据库。
使用 \l
列出数据库
本实例演示了使用 ud_sql
工具登录数据库并列出数据库的步骤。请按照如下步骤进行:
使用 unvdb 用户登录 unvdb 服务器:
ud_sql -U unvdb ud_sql (2.4) Type "help" for help.
注意:您也可以使用其他任何具有相应的数据库权限的用户登录。
使用
\l
命令列出所有的数据库,如下:\l
List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -------------+-------+----------+-------------+-------------+------------------- sakila | unvdb | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | template0 | unvdb | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/unvdb + | | | | | unvdb=CTc/unvdb template1 | unvdb | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/unvdb + | | | | | unvdb=CTc/unvdb test_new_db | unvdb | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | unvdb | unvdb | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 |
如果要查看更多关于数据库的信息,请使用
\l+
命令,如下:\l+
List of databas es Name | Owner | Encoding | Collate | Ctype | Access privileges | Size | Tablespace | Description -------------+-------+----------+-------------+-------------+------------------- +---------+------------+-------------------------------------------- sakila | unvdb | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 8561 kB | pg_default | template0 | unvdb | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/unvdb + | 8561 kB | pg_default | unmodifiable empty database | | | | | unvdb=CTc/unvdb | | | template1 | unvdb | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | =c/unvdb + | 8561 kB | pg_default | default template for new databases | | | | | unvdb=CTc/unvdb | | | test_new_db | unvdb | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 8833 kB | pg_default | unvdb | unvdb | UTF8 | zh_CN.UTF-8 | zh_CN.UTF-8 | | 8561 kB | pg_default | default administrative connection database
您可以看到, \l+
的输出比 \l
多了 Size
, Tablespace
和 Description
列。
从 pg_database
表中查询数据库
除了上面的 \l+
和 \l
命令,您还可以从 pg_database
表中查询所有的数据库。
pg_database
表是 unvdb 内置的一个表,它存储了所有的数据库。
SELECT datname FROM pg_database;
datname
-------------
unvdb
template1
template0
sakila
test_new_db
(5 rows)
在 unvdb 中复制一个数据库
在 unvdb 中,您可以使用以下几种方法复制数据库:
使用
CREATE DATABASE
从模板数据库复制一个数据库。此方法仅适用于在同一个 unvdb 服务器内操作。备份一个现有的数据库,并将其恢复到一个新的数据库。
从模板数据库复制数据库
有时候,为了数据的安全性,您在操作之前需要先将要操作数据库复制备份。 您可以使用 CREATE DATABASE
将此数据库复制为一个新数据库,如下:
CREATE DATABASE new_db
WITH TEMPLATE old_db;
此语句将 复制 old_db
数据库到 new_db
数据库。 old_db
必须是模板数据库才能被复制。如果它不是模板数据库,您可以使用 ALTER DATABASE
语句将此数据库修改为模板数据库,如下:
ALTER DATABASE old_db WITH IS_TEMPLATE true;
此方法仅能用在同一个 unvdb 数据库服务器内。如果您想在不同的unvdb 数据库服务器间复制数据库,请查看 unvdb 备份和恢复教程。
查看数据库中对象的大小
作为数据库管理者,您经常需要查看数据库的占用空间,这包括 数据库、表、索引和表空间的大小,以便为他们分配合理的存储空间。
unvdb 数据库大小
您可以使用 pg_database_size()
函数获取整个数据库的大小。例如,以下语句返回 testdb
数据库的大小:
SELECT pg_database_size('test_new_db');
pg_database_size
------------------
9044771
(1 row)
pg_database_size()
函数以字节为单位返回数据库的大小,这不容易阅读。您可以使用 pg_size_pretty()
函数将字节转为更易于阅读值。如下:
SELECT pg_size_pretty(pg_database_size('test_new_db'));
该语句返回以下结果:
pg_size_pretty
----------------
8833 kB
(1 row)
如果您想要要获取当前数据库服务器中所有数据库的大小,请使用以下语句:
SELECT datname,pg_size_pretty(pg_database_size(datname)) AS size FROM pg_database;
datname | size
-------------+---------
unvdb | 8561 kB
template1 | 8561 kB
template0 | 8561 kB
sakila | 8561 kB
test_new_db | 8833 kB
(5 rows)
unvdb 表大小
您可以使用 pg_relation_size()
函数获取一个表的大小。例如,以下语句返回 actor
表的大小:
SELECT pg_size_pretty(pg_relation_size('testdb'));
pg_size_pretty
----------------
8192 bytes
pg_relation_size()
函数返回表的数据的大小,不包含表中的索引的大小。如果要获取表的总的大小,请使用 pg_total_relation_size()
函数, 如下:
SELECT pg_size_pretty(pg_total_relation_size('testdb'));
pg_size_pretty
----------------
24 kB
要获取数据库中所有的表的大小,您可以使用如下语句:
SELECT relname AS tablename, pg_size_pretty(pg_total_relation_size(relid)) AS size FROM pg_stat_user_tables WHERE schemaname = 'public';
tablename | size
---------------+------------
testdb | 24 kB
jjj | 0 bytes
huaji | 24 kB
sales | 24 kB
users | 40 kB
student | 24 kB
student_score | 8192 bytes
(7 rows)
unvdb 索引大小
unvdb pg_indexes_size()
函数用于获取一个指定表上的索引的大小。例如,要获取 actor
表的所有索引的总大小,请使用以下语句:
SELECT pg_size_pretty(pg_indexes_size('huaji'));
pg_size_pretty
----------------
16 kB
(1 row)
unvdb 表空间大小
unvdb pg_tablespace_size()
函数用于获取一个指定的表空间的大小。
以下语句返回 pg_default
表空间的大小:
SELECT pg_size_pretty (pg_tablespace_size('pg_default'));
pg_size_pretty
----------------
42 MB
(1 row)
unvdb 值大小
unvdb pg_column_size()
函数用于获取指定的值占用的空间,例如:
以下语句返回一个 smallint
类型的值的大小:
select pg_column_size(1::smallint);
pg_column_size
----------------
2
以下语句返回一个 int
类型的值的大小:
select pg_column_size(1::int);
pg_column_size
----------------
4
以下语句返回一个 bigint
类型的值的大小:
select pg_column_size(1::bigint);
pg_column_size
----------------
8
在 unvdb 中列出数据库中的表
unvdb 提供了两种方法列出一个数据库中的所有表:
在
ud_sql
工具中使用\dt
或者\dt+
列出当前当前数据库中的所有的表。从
pg_tables
表中查询所有的表。
使用 \dt
列出数据库中的表
本实例演示了使用 ud_sql
工具登录数据库并列出数据库中表的过程。请按照如下步骤进行:
使用 unvdb 用户登录unvdb 服务器:
ud_sql -U unvdb ud_sql (2.4) Type "help" for help.
注意:您也可以使用其他任何具有相应的数据库权限的用户登录。
使用以下语句选择
testdb
数据库:\c testdb;
如果还未创建数据库,请先运行如下语句:
CREATE DATABASE testdb;
使用
\dt
命令列出testdb
数据库中的所有的表,如下:\dt
List of relations Schema | Name | Type | Owner --------+---------------+-------+------- public | huaji | table | unvdb public | jjj | table | unvdb public | sales | table | unvdb public | student | table | unvdb public | student_score | table | unvdb public | testdb | table | unvdb public | users | table | unvdb (7 rows)
如果要查看更多关于表的信息,请使用
\dt+
命令,如下:\dt+
List of relations Schema | Name | Type | Owner | Persistence | Access method | Size | Description --------+---------------+-------+-------+-------------+---------------+------------+------------- public | huaji | table | unvdb | permanent | heap | 8192 bytes | public | jjj | table | unvdb | permanent | heap | 0 bytes | public | sales | table | unvdb | permanent | heap | 8192 bytes | public | student | table | unvdb | permanent | heap | 8192 bytes | public | student_score | table | unvdb | permanent | heap | 8192 bytes | public | testdb | table | unvdb | permanent | heap | 8192 bytes | public | users | table | unvdb | permanent | heap | 8192 bytes | (7 rows)
您可以看到, \dt+
的输入比 \dt
输出多了 Persistence
, Access method
, Size
和 Description
列。
从 pg_tables
表中查询表
除了上面的 \dt
和 \dt+
命令,您还可以从 pg_tables
表中查询当前数据中的所有的表。
pg_tables
表是 unvdb 内置的一个表,它存储了数据库中的所有的表。
SELECT * FROM pg_tables WHERE schemaname = 'public';
schemaname | tablename | tableowner | tablespace | hasindexes | hasrules | hastriggers | rowsecurity
------------+---------------+------------+------------+------------+----------+-------------+-------------
public | huaji | unvdb | | t | f | f | f
public | student | unvdb | | t | f | f | f
public | student_score | unvdb | | f | f | f | f
public | sales | unvdb | | t | f | f | f
public | testdb | unvdb | | t | f | t | f
public | users | unvdb | | t | f | f | f
public | jjj | unvdb | | f | f | f | f
(7 rows)
在 unvdb 中查看表的定义或结构
unvdb 提供了两种方法查看一个现有的表的定义或者结构:
在
ud_skl
工具中使用\d
或者\d+
列出当前数据库中的所有的表。从
information_schema.columns
中查询表中的列。
使用 \d
查看表的信息
本实例演示了使用 psql
工具登录数据库并查看表信息的详细步骤。请按照如下步骤进行:
使用 unvdb 用户登录 unvdb 服务器:
ud_sql -U unvdb ud_sql (2.4) Type "help" for help.
注意:您也可以使用其他任何具有相应的数据库权限的用户登录。
使用以下语句选择
testdb
数据库:\c testdb;
如果还未创建数据库,请先运行如下语句:
CREATE DATABASE testdb;
以下语句使用
\d
命令查看test_date
表的结构,如下:\d testdb Table "public.testdb" Column | Type | Collation | Nullable | Default ------------+------------------------+-----------+----------+------------------------------------------------------------------------------------- id | integer | | not null | nextval('testdb_id_seq'::regclass) first_name | character varying(50) | | | last_name | character varying(50) | | | full_name | character varying(100) | | | generated always as ((((first_name::text || ' '::text) || last_name::text))) stored Indexes: "testdb_pkey" PRIMARY KEY, btree (id) Triggers: update_full_name BEFORE INSERT ON testdb FOR EACH ROW EXECUTE FUNCTION calculate_full_name()
您可以看到,
\d
输出了表的名字、表中的列,表中的约束等信息。如果要查看更多关于
test_date
表的信息,请使用\d+
命令,如下:\d+ testdb Table "public.testdb" Column | Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description ------------+------------------------+-----------+----------+-------------------------------------------------------------------------------------+----------+-------------+--------------+------------- id | integer | | not null | nextval('testdb_id_seq'::regclass) | plain | | | first_name | character varying(50) | | | | extended | | | last_name | character varying(50) | | | | extended | | | full_name | character varying(100) | | | generated always as ((((first_name::text || ' '::text) || last_name::text))) stored | extended | | | Indexes: "testdb_pkey" PRIMARY KEY, btree (id) Triggers: update_full_name BEFORE INSERT ON testdb FOR EACH ROW EXECUTE FUNCTION calculate_full_name() Access method: heap
您可以看到,
\d+
的输入比\d
输出多了Compression
,Stats target
和Description
列。
从 information_schema 中查看表中的所有列
information_schema
是一个系统级的 Schema, 其中提供了一些视图可以查看表、列、索引、函数等信息。
该 information_schema.columns
目录包含有关所有表的列的信息。
以下语句从 information_schema.columns
中查询 test_date
表的所有的列:
SELECT table_name,column_name,data_type,column_default FROM information_schema.columns WHERE table_name = 'testdb';
table_name | column_name | data_type | column_default
------------+-------------+-------------------+------------------------------------
testdb | id | integer | nextval('testdb_id_seq'::regclass)
testdb | first_name | character varying |
testdb | last_name | character varying |
testdb | full_name | character varying |
(4 rows)
以上语句返回了 testdb
表的所有的列的信息,包括 列名,数据类型,默认值。
在 unvdb 中复制一个表
本文介绍了在unvdb中复制表的几种方法
在 unvdb 中,您可以使用以下几种方法复制一个表到一个新表:
使用
CREATE TABLE ... AS TABLE ...
语句复制一个表。使用
CREATE TABLE ... AS SELECT ...
语句复制一个表。使用
SELECT ... INTO ...
语句复制一个表。
使用 CREATE TABLE ... AS TABLE ...
语句复制一个表
要将已有的 table_name
表复制为新表 new_table
,包括表结构和数据,请使用以下语句:
CREATE TABLE new_table AS TABLE table_name;
如果仅复制表结构,不复制数据,请在以上 CREATE TABLE
语句中添加 WITH NO DATA
子句,如下所示:
CREATE TABLE new_table AS TABLE table_name WITH NO DATA;
使用 CREATE TABLE ... AS SELECT ...
语句复制一个表
您还可以使用 CREATE TABLE ... AS SELECT ...
语句复制一个表。 这种方法可以复制部分数据到新表中。
要将已有的 table_name
表复制为新表 new_table
,包括表结构和数据,请使用以下语句:
CREATE TABLE new_table AS SELECT * FROM table_name;
如果您只需要复制部分满足条件的数据,请在 SELECT
语句中添加 WHERE
子句,如下:
CREATE TABLE new_table AS SELECT * FROM table_name WHERE contidion;
如果您只需要复制部分列到新表,请在 SELECT
语句中指定要复制的列的列表,如下:
CREATE TABLE new_table AS SELECT column1, column2, ... FROM table_name WHERE contidion;
如果您只需要复制表结构,请按如下方式使用 WHERE
子句:
CREATE TABLE new_table AS SELECT * FROM table_name WHERE 1 = 2;
这里在 WHERE
子句中使用了一个永远为假的条件。
使用 SELECT ... INTO ...
语句复制一个表
要使用 unvdb SELECT INTO
语句将已有的 table_name
表复制为新表 new_table
,请使用以下语法:
SELECT * INTO new_table FROM table_name
如果您只需要复制部分满足条件的数据,请添加 WHERE
子句,如下:
SELECT * INTO new_table FROM table_name WHERE contidion;
如果您只需要复制部分列到新表,请在 SELECT
语句中指定要复制的列的列表,如下:
SELECT column1, column2, ... INTO new_table FROM table_name WHERE contidion;
注意,这几种方法都只能复制列的定义和数据,都不能将索引复制过去。
在 unvdb 备份和恢复数据库指南
unvdb 提供了 ud_dump
和 ud_dumpall
工具,帮助您轻松地备份数据库,同时,unvdb 提供了 pg_restore
工具,帮助您轻松的恢复数据库。
作为数据库管理员,备份和恢复是必备的技能。
备份数据库的工具或命令:
ud_dump
工具用于备份单个 unvdb 数据库ud_dumpall
工具用于备份 unvdb 服务器中的所有的数据库。
恢复数据库的工具或命令:
pg_restore
工具用于恢复由ud_dump
工具产生的 tar 文档和目录文档。ud_sql
工具可以导入ud_dump
和ud_dumpall
工具产生的 SQL 脚本文件。\i
命令可以导入ud_dump
和ud_dumpall
工具产生的 SQL 脚本文件。
使用 ud_dump
备份一个数据库
unvdb 自带了 ud_dump
工具用于备份单个 unvdb 数据库。 以下是一个常用的备份命令:
ud_dump -U username -W -F t db_name > output.tar
说明:
-U username
: 指定连接 unvdb 数据库服务器的用户。您可以在username
位置使用自己的用户名。-W
: 强制ud_dump
在连接到 unvdb 数据库服务器之前提示输入密码。按回车后,ud_dump
会提示输入unvdb
用户密码。-F
: 指定输出文件的格式,它可以是以下格式之一:c
: 自定义格式d
: 目录格式存档t
: tar 文件包p
: SQL 脚本文件
db_name
是要备份的数据库的名字。output.tar
是输出文件的路径。
使用 ud_dumpall
备份所有数据库
除了 ud_dump
工具,unvdb 还提供了可以一次备份所有数据库的 ud_dumpall
工具备份。 该ud_dumpall
工具的用法如下:
ud_dumpall -U username > output.sql
使用 ud_restore
恢复数据库
unvdb 提供了 ud_restore
工具用于恢复由 ud_dump
工具产生的 tar 文档和目录文档。
ud_restore
工具的用法如下:
ud_restore [option...] file_path
file_path
是要恢复的文件或者目录的路径。option
是一些恢复数据时用到的参数,比如,数据库,主机,端口 等。 您可以使用如下选项:
参数 | 说明 |
---|---|
-a --data-only |
只恢复数据,而不恢复表模式(数据定义)。 |
-c --clean |
创建数据库对象前先清理(删除)它们。 |
-C --create |
在恢复数据库之前先创建它。 |
-d dbname --dbname=dbname |
与数据库 dbname 联接并且直接恢复到该数据库中。 |
-e --exit-on-error |
如果在向数据库发送 SQL 命令的时候碰到错误,则退出。缺省是继续执行并且在恢复 结束时显示一个错误计数。 |
-f filename --file=filename |
声明生成的脚本的输出文件,或者出现-l 选项时用于列表的文件,缺省是标准输出。 |
-F format --format=format |
声明备份文件的格式。 |
-i --ignore-version |
忽略数据库版本检查。 |
-I index --index=index |
只恢复命名的索引。 |
-l --list |
列出备份的内容。这个操作的输出可以用 -L 选项限制和重排所恢复的项目。 |
-L list-file --use-list=list-file |
只恢复在 list-file 里面的元素,以它们在文件中出现的顺序。 |
-n namespace --schema=schema |
只恢复指定名字的模式里面的定义和/或数据。不要和 -s 选项混淆。这个选项可以和 -t 选项一起使用。 |
-O --no-owner |
不要输出设置对象的权限,以便与最初的数据库匹配的命令。 |
-s --schema-only |
只恢复表结构(数据定义)。不恢复数据,序列值将重置。 |
-S username --superuser=username |
设置关闭触发器时声明超级用户的用户名。只有在设置了 –disable-triggers 的时候 才有用。 |
-t table --table=table |
只恢复表指定的表的定义和/或数据。 |
-T trigger --trigger=trigger |
只恢复指定的触发器。 |
-v --verbose |
声明冗余模式。 |
-x --no-privileges --no-acl |
避免 ACL 的恢复(grant/revoke 命令) |
-X use-set-session-authorization --use-set-session-authorization |
输出 SQL 标准的 SET SESSION AUTHORIZATION 命令,而不是 OWNER TO 命令。 |
-X disable-triggers --disable-triggers |
这个选项只有在执行仅恢复数据的时候才相关。 |
-h host --host=host |
声明服务器运行的机器的主机名。 |
-p port --port=port |
声明服务器侦听的 TCP 端口或者本地的 Unix 域套接字文件扩展。 |
-U username |
以给出用户身分联接。 |
-W |
强制给出口令提示。如果服务器要求口令认证,那么这个应该自动发生。 |
最常用的 ud_restore
用法如下:
ud_restore -d db_name path_to_db_backup_file.tar
如何使用 ud_sql 恢复数据库
您可以使用 ud_sql 工具从一个 sql 文件中恢复数据。 以下是使用 ud_sql 从 sql 文件恢复数据的基本用法:
ud_sql -U username -f path_to_db_backup_file.sql
使用 \i
命令导入 sql 文件
您还可以 \i
命令导入 sql 文件。 以下演示了导入一个示例数据库的步骤:
启动 ud_sql工具并连接 unvdb 服务器:
ud_sql -U unvdb
根据提示输入 unvdb 用户的密码,然后按下回车键。
创建 sakila 数据库
CREATE DATABASE sakila;
连接 sakila 数据库
\c sakila;
分别使用以下两个语句以导入刚刚下载的两个文件
sakila-schema.sql
和sakila-insert-data.sql
:\i /文件路径/sakila-schema.sql \i /文件路径/sakila-insert-data.sql
在 unvdb 中使用 EXPLAIN 查看语句的执行计划
在 unvdb 中,您可以使用 EXPLAIN
语句显示 unvdb 规划器为指定语句生成的执行计划,以确定该语句是否是一个高效的语句。
EXPLAIN
语法
以下是 EXPLAIN
语句的语法:
EXPLAIN [ ( option [, ...] ) ] statement;
其中 option
可以是以下之一:
ANALYZE [ boolean ]
: 执行该命令并显示实际运行时间和其他统计信息。EXPLAIN ANALYZE SELECT * FROM users WHERE notes = 'x';
QUERY PLAN -------------------------------------------------------------------------------------------------- Seq Scan on users (cost=0.00..11.25 rows=1 width=756) (actual time=0.018..0.018 rows=0 loops=1) Filter: ((notes)::text = 'x'::text) Rows Removed by Filter: 2 Planning Time: 0.088 ms Execution Time: 0.040 ms (5 rows)
VERBOSE [ boolean ]
: 显示有关计划的其他信息。EXPLAIN VERBOSE SELECT * FROM users WHERE notes = 'x';
QUERY PLAN --------------------------------------------------------------- Seq Scan on public.users (cost=0.00..11.25 rows=1 width=756) Output: id, nickname, login_name, notes Filter: ((users.notes)::text = 'x'::text) (3 rows)
COSTS [ boolean ]
: 包括有关每个计划节点的估计启动和总成本的信息,以及估计的行数和每行的估计宽度。EXPLAIN (COSTS) SELECT * FROM users WHERE notes = 'x';
QUERY PLAN -------------------------------------------------------- Seq Scan on users (cost=0.00..11.25 rows=1 width=756) Filter: ((notes)::text = 'x'::text) (2 rows)
SETTINGS [ boolean ]
: 包括有关配置参数的信息。EXPLAIN (SETTINGS) SELECT * FROM address WHERE postal_code = 'x';
QUERY PLAN ----------------------------------------------------------------------------------------- Index Scan using address_postal_code_idx on address (cost=0.28..8.29 rows=1 width=161) Index Cond: ((postal_code)::text = 'x'::text)
BUFFERS [ boolean ]
: 包括有关缓冲区使用情况的信息。EXPLAIN (BUFFERS) SELECT * FROM address WHERE postal_code = 'x';
QUERY PLAN ----------------------------------------------------------------------------------------- Index Scan using address_postal_code_idx on address (cost=0.28..8.29 rows=1 width=161) Index Cond: ((postal_code)::text = 'x'::text)
WAL [ boolean ]
: 包括有关 WAL 记录生成的信息。它必须和ANALYZE
同时使用。EXPLAIN (ANALYZE, WAL) SELECT * FROM address WHERE postal_code = 'x';
QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------- Index Scan using address_postal_code_idx on address (cost=0.28..8.29 rows=1 width=161) (actual time=0.029..0.029 rows=0 loops=1) Index Cond: ((postal_code)::text = 'x'::text) Planning Time: 0.131 ms Execution Time: 0.043 ms
TIMING [ boolean ]
: 在输出中包括实际启动时间和在每个节点中花费的时间。它必须和ANALYZE
同时使用。EXPLAIN (ANALYZE, TIMING) SELECT * FROM address WHERE postal_code = 'x';
QUERY PLAN ----------------------------------------------------------------------------------------------------------------------------------- Index Scan using address_postal_code_idx on address (cost=0.28..8.29 rows=1 width=161) (actual time=0.018..0.018 rows=0 loops=1) Index Cond: ((postal_code)::text = 'x'::text) Planning Time: 0.082 ms Execution Time: 0.030 ms
SUMMARY [ boolean ]
: 在查询计划之后包括摘要信息EXPLAIN (SUMMARY) SELECT * FROM address WHERE postal_code = 'x';
QUERY PLAN ----------------------------------------------------------------------------------------- Index Scan using address_postal_code_idx on address (cost=0.28..8.29 rows=1 width=161) Index Cond: ((postal_code)::text = 'x'::text) Planning Time: 0.096 ms
FORMAT { TEXT | XML | JSON | YAML }
: 指定输出格式,可以是文本、XML、JSON 或 YAML。EXPLAIN (FORMAT YAML) SELECT * FROM address WHERE postal_code = 'x';
QUERY PLAN ----------------------------------------------------- - Plan: + Node Type: "Index Scan" + Parallel Aware: false + Async Capable: false + Scan Direction: "Forward" + Index Name: "address_postal_code_idx" + Relation Name: "address" + Alias: "address" + Startup Cost: 0.28 + Total Cost: 8.29 + Plan Rows: 1 + Plan Width: 161 + Index Cond: "((postal_code)::text = 'x'::text)"
EXPLAIN (FORMAT JSON) SELECT * FROM address WHERE postal_code = 'x';
QUERY PLAN --------------------------------------------------------- [ + { + "Plan": { + "Node Type": "Index Scan", + "Parallel Aware": false, + "Async Capable": false, + "Scan Direction": "Forward", + "Index Name": "address_postal_code_idx", + "Relation Name": "address", + "Alias": "address", + "Startup Cost": 0.28, + "Total Cost": 8.29, + "Plan Rows": 1, + "Plan Width": 161, + "Index Cond": "((postal_code)::text = 'x'::text)"+ } + } + ]
注意,所有选项中的 boolean
指定是否选择的选项应该被打开或关闭。您可以使用 TRUE
、 ON
、 或 1
启用该选项, 和 FALSE
、 OFF
、 或 0
禁用它。如果省略布尔值,则默认为 TRUE
.
重置 unvdb 超级用户的密码
在 unvdb 中, (默认用户) unvdb
是超级用户。如果您忘记了 密码,您可以按照以下步骤进行重置。
找到 unvdb 数据库服务器的配置文件
ud_hba.conf
。在 Linux 上,unvdb 数据库服务器的配置文件位于
/data/udb/ud_hba.conf
。前提是按之前的安装过程才会在此目录下,如果不是请自行查找安装目录。修改配置文件之前备份 配置文件,以便后面进行恢复。
cp ud_hba.conf ud_hba.conf.bak
修改配置文件以信任本地连接不需要密码。 将配置文件中的
scram-sha-256
或者md5
修改为trust
,如下:local all all peer # IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 trust # Allow replication connections from localhost, by a user with the # replication privilege. local replication all peer host replication all 127.0.0.1/32 trust host replication all ::1/128 trust
重启 unvdb 数据库服务器。
在 Windows 中, 您可以在服务列表窗口重启 数据库
在 Linux 中,您可以使用
systemctl restart unvdb
命令重启 unvdb。登录到 unvdb数据库服务器。
ud_sql -U unvdb
您并不需要输入密码。
使用以下命令修改
unvdb
用户的密码:ALTER USER unvdb WITH PASSWORD 'new_password';
恢复
ud_hba.conf
配置文件。 将ud_hba.conf.bak
文件的内容覆盖pg_hba.conf
。重启 unvdb 数据库服务器。 当您登陆时, unvdb 应该会提示您输入密码。