一次PostgreSQL会话过程:
1,一个服务器进程,它管理数据库文件,接受来自客户端应用与数据库的连接,并且代表客户端在数据库上执行操作,客户端通过程序发布命令,服务器进行数据库操作
2, 客户端应用(不一定在本机之上!),通过 TCP/IP 网络连接通讯
3,PostgreSQL服务器可以处理来自客户端的多个并发连接。 因此,它为每个连接启动("forks")一个新的进程
4,你需要变成安装PostgreSQL的操作系统用户的身份(通常是 postgres)才能创建用户帐号。 也有可能是赋予你的PostgreSQL用户名和你的操作系统用户名不同,你需要使用-U选项或者使用PGUSER环境变量指定你的PostgreSQL用户名
5,通常我们会为每个项目和每个用户单独使用一个数据库。
PostgreSQL 用户名与 操作系统用户名的区别
1,PostgreSQL用户名 是和操作系统用户账号分开的。
2,如果你与一个数据库连接,你可以指定以哪个 PostgreSQL用户名进行连接;如果你不指定,那么缺省 就是你当前的操作系统账号。
3,如果你不想以该用户身份登陆,那么你也可以在任何地方(通过shell)声明一个-U选项来选择一个连接时使用的PostgreSQL用户名。创建用户(你完全可以在一个用户之下创建多个数据库),并且赋予权限!
-- 当下载 postgres 的时候,就会创建一个linux 用户,此用户是 postgres的超级用户 --默认生成一个名为postgres的数据库和一个名为postgres的数据库用户 sudo su - postgres -- 为 sxu 创建一个用户! create user sxu with password 'x' --增加一个linux 用户 sxu sudo adduser sxu --将所有的权限都赋予linux用户 sxu ,并且为其创建一个数据库 名字叫做 mydb grant all privileges on database mydb to sxu \q exit --切换到linux su用户 sudo su - sxu --切换到 mydb 数据库 psql mydb -- 远程登录数据库 psql -U sxu -d mydb -h 127.0.0.1 -p 5432
-- 当下载 postgres 的时候,就会创建一个linux 用户,此用户是 postgres的超级用户 --默认生成一个名为postgres的数据库和一个名为postgres的数据库用户 sudo su - postgres 切换成 postgres psql postgres -- 创建一个用户 sxu ! create user sxu with password 'x' # 新建数据库 mydb CREATE DATABASE mydb; --对于 mydb 将所有的权限都赋予 sxu grant all privileges on database mydb to sxu \q exit -- 远程登录数据库 psql -U sxu -d mydb -h 127.0.0.1 -p 5432
常见的 postgres 操作!
--切换到 postgres 用户 sudo su postgres --查看 pg 版本 psql --version --查看有多少数据库 psql -l --创建数据库 mydb createdb mydb --切换到 mydb 数据库 psql mydb --查看有多少表(进入某个数据库之后) psql -l -- 删除数据库 dropdb mydb; -- 创建表 post create table post(title varchar(225),content text); -- 查看当前数据库的信息 \dt -- 查看 post 表的字段信息 \d post --更改表的名称 alter table post rename to posts; -- 删除post表 drop table post; -- 创建表 test1 create CREATE TABLE test1 (id integer,content varchar); -- 插入表 数据 INSERT INTO test1 values(1,1); --更新表数据 update test1 set content='a',id =4 where id=1; -- 删除表数据 DELETE FROM test1 WHERE id = 1; --创建 sql文件 nano db.sql --文件书写以下内容 create table post(title varchar(225),content text); --check() 自定义类型 create table post(id serial primary key,title varchar(233) not null,content text check(length(content)>3),is_draft boolean default TRUE,is_del boolean default FALSE) --ctrl + x 退出 --进入mydb --执行sql 文件保存的语句 \i db.sql
两个复杂查询
--完全可以在选择列表之中使用函数 select city,(temp_hi+temp_lo)/2 as temp_avg from weather; --自连接查询!选择列表的重命名,与表的重新命名(可以省略 as) select W1.city, W1.temp_lo AS low, W1.temp_hi AS high, W2.city, W2.temp_lo AS low, W2.temp_hi AS high from weather as W1, weather W2 where W1.temp_lo < W2.temp_lo and W1.temp_hi > W2.temp_hi;