PostgreSQL【使用篇】01:PostgreSQL的一些基础操作【启停、数据库、schema、表、用户】

一、启动和停止PostgreSQL

在安装完成PostgreSQL之后,有三种启停PostgreSQL的方式,需要进行配置一下,之前在安装PostgreSQL中也介绍过。

1、使用自带脚本方式启动【推荐】

(1)复制启动脚本

复制源码包里的脚本至etc/init.d目录下,并加执行权限

cd /root/postgresql-17.4
cp ./contrib/start-scripts/linux /etc/init.d/postgresql
chmod +x /etc/init.d/postgresql
chown -R postgres:postgres /usr/local/pgsql

在这里插入图片描述

(2)启动服务

su - postgres
service postgresql start
service postgresql status

使用postgres用户需要输入密码,root用户不需要,但建议使用postgres用户进行操作。

postgres

在这里插入图片描述

(3)设置开机启动

chkconfig --add postgresql

2、使用systemd进行管理【推荐】

(1)编辑postgresql.service文件

vim /etc/systemd/system/postgresql.service

添加如下内容:

[Unit]
Description=PostgreSQL database server
Documentation=man:postgres(1)
After=network-online.target

[Service]
Type=forking
User=postgres
Group=postgres
Environment=PGDATA=/usr/local/pgsql/data
ExecStart=/usr/local/pgsql/bin/pg_ctl start -D ${PGDATA}
ExecStop=/usr/local/pgsql/bin/pg_ctl stop -D ${PGDATA} -m fast
ExecReload=/home/postgres/bin/pg_ctl reload -D ${PGDATA}
TimeoutSec=300s

[Install]
WantedBy=multi-user.target

在这里插入图片描述

(2)加载以及启动

systemctl daemon-reload
systemctl start postgresql
systemctl status postgresql

在这里插入图片描述

3、直接使用命令行启动【不推荐】

su - postgres
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile start
/usr/local/pgsql/bin/pg_ctl -D /usr/local/pgsql/data -l logfile status

在这里插入图片描述

二、登录和退出PostgreSQL

1、使用root用户登录

psql -U postgres

在这里插入图片描述

2、使用postgres用户登录

su - postgres
psql

在这里插入图片描述

三、常用的基础操作

1、修改密码

alter user pgtest3 with encrypted password '123456';

在这里插入图片描述

2、数据库相关

(1)查看有哪些数据库

\list
\l
\l+

在这里插入图片描述

SELECT datname FROM pg_database;

在这里插入图片描述

(2)创建数据库

create database mydb1;
create database mydb2;
create database mydb3;

在这里插入图片描述
再查看有哪些数据库

\l
\l+

在这里插入图片描述

(3)删除数据库

DROP DATABASE mydb2;
DROP DATABASE mydb3;

在这里插入图片描述

再查看有哪些数据库

\l
\l+

在这里插入图片描述

(4)切换数据库

\c mydb1

在这里插入图片描述

(5)查看当前在哪个数据库下

\c
\conninfo
SELECT current_database();

在这里插入图片描述
根据下面红色框位置也能看出来。
在这里插入图片描述

3、schema

Schema 是数据库内部的​​逻辑命名空间​​,类似于文件夹,用于组织和管理数据库对象(如表、视图、函数等)。

(1)创建schema

一般和用户名同名【租户】,实现多租户管理。

\c mydb1;
create schema pgtest1;
create schema pgtest2;
create schema pgtest3;

在这里插入图片描述

(2)查询schema

\dn
\dn+

在这里插入图片描述
或者,查询所有的schema:

SELECT nspname AS schema_name FROM pg_catalog.pg_namespace ORDER BY schema_name;

在这里插入图片描述
或者,只查询用户自定义的schema:

SELECT nspname AS schema_name FROM pg_catalog.pg_namespace WHERE nspname NOT IN ('information_schema', 'pg_catalog', 'pg_toast') AND nspname !~ '^pg_' ORDER BY schema_name;

在这里插入图片描述

(3)查询schema中的表、序列、索引

查看schema中的表

\dt pgtest1.*
\d  pgtest1.*

在这里插入图片描述

查看schema中序列

\ds pgtest1.* 

在这里插入图片描述
查看schema中的索引

\di pgtest1.* 

在这里插入图片描述

(4)查看schema中是否有对象

例如:表、序列、索引,一般在删除schema前会查询一下。

SELECT COUNT(*) FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE n.nspname = 'pgtest1';

在这里插入图片描述

(5)删除schema

删除空的schema

DROP SCHEMA IF EXISTS pgtest2;

在这里插入图片描述
强制删除非空的schema

DROP SCHEMA IF EXISTS pgtest3 CASCADE;

在这里插入图片描述
再次查询有哪些schema

\dn

在这里插入图片描述

4、用户相关

PostgreSQL使用角色的概念管理数据库访问权限。一个角色可以被看成是一个数据库用户或者是一个数据库用户组,这取决于角色被怎样设置。角色可以拥有数据库对象(例如,表和函数)并且能够把那些对象上的权限赋予给其他角色来控制谁能访问哪些对象。此外,还可以把一个角色中的成员资格授予给另一个角色,这样允许成员角色使用被赋予给另一个角色的权限。

角色的概念把“用户”和“组”的概念都包括在内。在PostgreSQL版本 8.1 之前,用户和组是完全不同的两种实体,但是现在只有角色。任意角色都可以扮演用户、组或者两者。

(0)查看当前连接用户

\c
select user;
select current_user;
select current_database();

在这里插入图片描述

(1)创建用户

CREATE USER pgtest1 with password 'admin';

在这里插入图片描述

CREATE USER等同于CREATE ROLE, 但CREATE USER默认包含LOGIN,而CREATE ROLE不包含。
如下两者等价,创建具有登录权限的角色:

CREATE ROLE pgtest2 with password 'admin' LOGIN;
CREATE USER pgtest3 with password 'admin';

在这里插入图片描述

(2)查看用户

查看有哪些用户/角色

\du
\du+ 
select * from pg_roles;

在这里插入图片描述

(3)查询用户拥有的对象

一般在删除用户的时候会先查询一下,如下pgtest1是新创建的,没有任何对象

SELECT * FROM pg_tables WHERE tableowner = 'pgtest1';

在这里插入图片描述

SELECT * FROM pg_tables WHERE tableowner = 'postgres';

而管理员用户postgres用户下就有很多对象
在这里插入图片描述

(4)查询用户拥有的对象类型

SELECT nspname AS schema, relname AS object, relkind AS type FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.relowner = (SELECT oid FROM pg_roles WHERE rolname = 'pgtest1');

在这里插入图片描述

SELECT nspname AS schema, relname AS object, relkind AS type FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.relowner = (SELECT oid FROM pg_roles WHERE rolname = 'postgres');

在这里插入图片描述

(5)转移用户对象

将用户拥有的所有对象转移给其他用户(如pgtest2),一般在删除用户的时候,可能会用到,将要删除的对象转移给其他用户。

REASSIGN OWNED BY pgtest1 TO pgtest2;
DROP USER pgtest1;

(6)删除用户

DROP USER IF EXISTS pgtest2;

在这里插入图片描述

(7)用户授权

授权用户的schema所有权限,一般schema和用户同名,实现多租户管理。

GRANT ALL PRIVILEGES ON SCHEMA pgtest1 TO  pgtest1;

在这里插入图片描述
授权用户schema下表的权限,注意,如果这个表不是pgtest1创建的,还要进行授权才行,例如授予表查询、更新、删除权限

GRANT SELECT, UPDATE, DELETE ON TABLE pgtest1.t2 TO pgtest1;

在这里插入图片描述

否则是没有权限进行增删改查操作的,只有授完权,才能进行查询,如下:
在这里插入图片描述

(8)回收权限

REVOKE ALL PRIVILEGES ON SCHEMA pgtest1 FROM pgtest1;

在这里插入图片描述

(9)普通用户登录

创建完普通用户后,可以使用普通用户进行登录。

psql -U pgtest1 -d mydb1

在这里插入图片描述

5、表相关

(1)创建表

不指定schem创建表的话,默认使用的是public这个schema

\c mydb1;
create table t1(id int primary key,name varchar(20));

在这里插入图片描述
在这里插入图片描述
指定schema创建表,指定schema为pgtest1

\c mydb1;
\dn
create table pgtest1.t2(id int primary key,name varchar(20));

在这里插入图片描述

\dt pgtest1.*

在这里插入图片描述

(2)查看当前数据库有哪些表

\dt

在这里插入图片描述

(3)查看表属于哪个schema

使用 information_schema.tables

SELECT table_schema, table_name FROM information_schema.tables WHERE table_name = 't1';

在这里插入图片描述
使用 pg_catalog.pg_tables

SELECT schemaname AS schema_name, tablename AS table_name FROM pg_catalog.pg_tables WHERE tablename = 't1';

在这里插入图片描述
使用 pg_catalog.pg_tables(模糊匹配)

SELECT schemaname, tablename FROM pg_catalog.pg_tables WHERE tablename LIKE '%t1%';

在这里插入图片描述

(4)查看表属于哪个用户

\dt

在这里插入图片描述

(5)查看表结构

\d t1;
\d+ t1;

在这里插入图片描述

(6)插入数据

INSERT INTO t1 (id, name) VALUES
(1, 'Alice'),
(2, 'Bob'),
(3, 'Charlie'),
(4, 'David'),
(5, 'Eve'),
(6, 'Frank'),
(7, 'Grace'),
(8, 'Henry'),
(9, 'Ivy'),
(10, 'Jack');

在这里插入图片描述

(7)查询数据

select * from t1;

在这里插入图片描述

(8)删除数据

delete from t1 where id > 5;
select * from t1;

在这里插入图片描述

(9)删除表

select * from t4
DROP TABLE t4;
DROP TABLE IF EXISTS t4;

在这里插入图片描述

(9)清空表

select * from t5;
TRUNCATE t5;

在这里插入图片描述
清空表数据并重置自增 ID

TRUNCATE t5 RESTART IDENTITY;

(10)查询表有哪些字段

和查看表结构一样

\d t1;
\d+ t1;

在这里插入图片描述

(11)添加字段

alter table [表名] add column [字段名] [类型];
alter table t1 add column test1_column int;

在这里插入图片描述

(12)修改字段

alter table [表名] rename column [旧字段名] to [新字段名];
alter table t1 rename column test1_column to test1_column_change;

在这里插入图片描述

(13)删除字段

alter table [表名] drop column [字段名];
alter table t1 drop column test1_column_change;

在这里插入图片描述

四、其他

1、使用客户端进行连接

在这里插入图片描述
在这里插入图片描述

2、查看pg版本

pg_ctl --version

在这里插入图片描述

3、查询连接信息

select * from pg_stat_activity

在这里插入图片描述

4、查看连接数

SELECT datname, numbackends FROM pg_stat_database;

在这里插入图片描述

select count(*) from pg_stat_activity where datname='mydb1'; 

在这里插入图片描述

5、explain

EXPLAIN select * from t1;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一个有趣的人Zz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值