欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PostgreSQL-psql命令

程序员文章站 2024-03-21 10:08:10
...

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;