postgresql 常用操作

登录

Linux 终端可直接访问本机的 PostgreSQL

切换到Linux用户postgres,然后执行psql:

1root@lenovo-e47-1no6e7d:~# su - postgres
2postgres@lenovo-e47-1no6e7d:~$ psql
3psql (15.4)
4Type "help" for help.
5
6postgres=#

此时就在数据库postgres中了。

说明:完整地登录postgresql的命令为:

psql -h hostname -U username -d dbname -p port

上面命令的参数含义如下:

-U 指定用户

-d 指定数据库

-h 指定服务器

-p 指定端口

例如:psql -h 192.168.196.16 -U zc -d test -p 5432

常用命令(必须先在终端登录)

 1\password:设置密码
 2\q:退出
 3\h:查看SQL命令的解释,比如\h select。
 4
 5\?:查看psql命令列表。
 6\l:列出所有数据库。
 7
 8\c [database_name]:连接其他数据库。
 9\d:列出当前数据库的所有表格。
10
11\d [table_name]:列出某一张表格的结构。
12
13\du:列出所有用户。
14\e:打开文本编辑器。
15\dn: 查看当前的多模式简略信息
16\dn+: 查看当前的多模式详细信息
17\conninfo:列出当前数据库和连接的信息。

关于 schema

介绍:https://blog.csdn.net/hmxz2nn/article/details/82715192

PostgreSQL 模式(SCHEMA)可以看着是一个表的集合。

一个模式可以包含视图、索引、数据类型、函数和操作符等。

相同的对象名称可以被用于不同的模式中而不会出现冲突,例如 schemaA 和 schemaB 都可以包含名为 mytable 的表。


使用模式的优势:

允许多个用户使用一个数据库并且不会互相干扰。

将数据库对象组织成逻辑组以便更容易管理。

第三方应用的对象可以放在独立的模式中,这样它们就不会与其他对象的名称发生冲突。

模式类似于操作系统层的目录,但是模式不能嵌套。

示例:创建模式 basedata,并在该模式下创建表 company

 1zhangcong@DESKTOP-A13UN6S D:\dev\pgsql\bin
 2# psql -h 192.168.196.16 -U zc -d test
 3psql (15.4)
 4输入 "help" 来获取帮助信息.
 5
 6
 7
 8test=# create schema basedata;
 9CREATE SCHEMA
10
11
12test=# 
13test=# create table basedata.company(
14test(#    ID   INT              NOT NULL,
15test(#    NAME VARCHAR (20)     NOT NULL,
16test(#    AGE  INT              NOT NULL,
17test(#    ADDRESS  CHAR (25),
18test(#    SALARY   DECIMAL (18, 2),
19test(#    PRIMARY KEY (ID)
20test(# );
21CREATE TABLE

如果创建表时不指定模式,默认将表放到public模式下。

因为每当我们创建一个新的数据库时,postgresql都会自动创建一个名为“public”的模式。

修改模式

ALTER SCHEMA 表示修改一个模式的定义。

要使用ALTER SCHEMA,你必须是该模式的所有者(超级用户自动拥有全部权限)。

修改模式 名称:ALTER SCHEMA name RENAME TO new_name;

修改模式 的所有者:ALTER SCHEMA name OWNER TO new_owner;

要给一个模式重命名(RENAME),你必须在该数据库上有CREATE权限。

要修改所有者(OWNER),你还必须是新的所有角色的直接或间接成员, 并且该成员必须在此数据库上有CREATE权限。

删除模式(模式只能被它的所有者或者超级用户删除)

1
2删除空模式
3
4DROP SCHEMA myschema;
5删除模式及其包含对象
6
7DROP SCHEMA myschema CASCADE;

模式搜索路径

全称的名字写起来非常费劲,并且我们最好不要在应用里直接写上特定的模式名。

因此,表通常都是用未修饰的名字引用的,这样的名字里只有表名字。

系统通过查找一个搜索路径来判断一个表究竟是哪个表,这个路径是一个需要查找的模式列表。

在搜索路径里找到的第一个表将被当作选定的表。

如果在搜索路径中没有匹配表,那么就报告一个错误,即使匹配表的名字在数据库其它的模式中存在也如此。

查看当前搜索路径,使用命令:

SHOW search_path;

在缺省的设置中,返回下面的东西:

1 test=# SHOW search_path;
2   search_path   
3-----------------
4 "$user", public
5(1 row)

结果显示的是search_path的默认设置,从这个默认设置可以看到“public”模式总是在搜索路径中。

第一个模式是$user,表示将要搜索一个和当前用户同名的模式。 因为还没有这样的模式存在,所以这条记录被忽略。

第二个元素指向public模式。

所以一般情况下,若创建的表默认没有指定模式,那都会在“public”模式下。

把新创建的模式 myschema 放到路径中来:

1test=# SET search_path TO "$user",myschema,public;
2SET
3test=# SHOW search_path;
4        search_path        
5---------------------------
6 "$user", myschema, public
7(1 row)