PostgreSQL-psql命令

psql

元命令

# 查看数据库
\l 
# 查看表空间
\db
# 查看表
\d
# 查看表定义
\d tablename
# 查看表大小
\dt+ tablename
# 查看索引大小
\di+ tablename
# 查看函数代码 \sf random_range
\sf functionName
\sf functionName(integer,integer)
# 设置查询结果输出
\x 
# 获取元命令对应的SQL代码:-E
psql -E dbname user
# 查看所有元命令
\?
# 查看SQL命令语法
\h 
\h create database

日常维护语句

# 查询活动会话(active_session)
select pid,usename,datname,query,client_addr from pg_stat_activity where pid <> pg_backend_pid() and state='active' order by query;

# 查询等待事件(wait_event)
select pid,usename,datname,query,client_addr,wait_event_type,wait_event FROM pg_stat_activity WHERE pid<>pg_kackend_pid() AND wait_event is not null ORDER BY wait_event_type;

用户

# 创建用户
#CREATE USER和CREATE ROLE的区别在于,CREATE USER指令创建的用户默认是有登录权限的,而CREATE ROLE没有
create role rolename;
create user username;
# 创建带密码的用户
create role admin with encrypted password 'admin';

#创建用户时设定用户属性
#基本语法格式
CREATE ROLE role_name WITH optional_permissions;
#在创建用户时设定登录权限
CREATE ROLE username WITH LOGIN;
# 查看全部可设置的管理权限
\h CREATE ROLE

#修改用户属性
# 给用户设置密码
ALTER USER gisuser WITH PASSWORD  '123456' ;
#修改权限的命令格式
ALTER ROLE username WITH attribute_options;
#禁止用户登录
ALTER ROLE username WITH NOLOGIN;
# 修改数据库所有者
ALTER DATABASE gis OWNER TO gisuser;
# 修改表的所有者
alter table  test_1 owner to gisuser; 

# 设置访问权限
GRANT permission_type ON table_name TO role_name;
# 示例
# 赋予demo_role demo表的update权限
GRANT UPDATE ON demo TO demo_role; 
# 赋予demo_role所有表的SELECT权限
GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC to demo_role;
# 特殊符号:ALL代表所访问权限,PUBLIC代表所有用户
# 赋给用户所有权限
GRANT ALL ON demo TO demo_role;
# 将SELECT权限赋给所有用户
GRANT SELECT ON demo TO PUBLIC;

\z或\dp指令显示用户访问权限。
\h GRANT显示所有可设置的访问权限

# 撤销用户访问权限
# 语法格式如下:
REVOKE permission_type ON table_name FROM user_name;
# 其中permission_type和table_name含义与GRANT指令中相同。

# 用户组
# 在postgres中用户实际上是role,同时组也是role。 包含其他role的role就是组。

# 创建组示例:
CREATE ROLE temporary_users;
GRANT temporary_users TO demo_role;
GRANT temporary_users TO test_user;

# 切换ROLE
# 切换到role_name用户
SET ROLE role_name;
# 切换回最初的role
RESET ROLE;

# INHERIT权限:该属性使组成员拥有组的所有权限
# ALTER ROLE test_user INHERIT;

# 删除用户和组
# 删除用户和组很简单:
DROP ROLE role_name;
DROP ROLE IF EXISTS role_name;

# 应用
create user zabbix ;
create database zabbix owner zabbix;
alter user zabbix password zabbix;
grant all on DATABASE zabbix to zabbix;

COMMENT ON DATABASE zabbix is 'used for  zabbix data store';

# 查看数据库所有的用户
\du

# 查看当前连接的用户名
select * from current_user;
select user;

数据库

# 查看数据库
\l

# 创建数据库
create database dbname;

# 删除数据库
DROP DATABASE runoobdb;

# 进入数据库
\c runoobdb

# psql
psql -h localhost -p 5432 -U postgress runoobdb

表格

# 创建表格
CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

# 查看数据库中的表
\d

# 查看表的详细信息
\d tablename

# 删除表
DROP TABLE table_name;

模式

# 创建模式
create schema myschema;

# 在制定模式创建表
reate table myschema.company(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   AGE  INT              NOT NULL,
   ADDRESS  CHAR (25),
   SALARY   DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

# 删除一个为空的模式(其中的所有对象已经被删除):
DROP SCHEMA myschema;

# 删除一个模式以及其中包含的所有对象:
DROP SCHEMA myschema CASCADE;

猜你喜欢

转载自blog.csdn.net/qq_36213352/article/details/117857031