一.操作
此文章中postgresql版本是psql (PostgreSQL) 9.6rc1
此文章中若出现ricky,为用户名;mydb,为数据库名;
-h:数据库IP
-U:登录用户
-d:登录的数据库
-p:登录端口
1、命令行登录数据库
psql -U 用户名 -d 数据库名
(还可以填上服务器地址和端口5432)
如:psql -U ricky -d mydb
如果psql 数据库名
则默认使用登陆系统的用户名连接数据库,如果系统的默认用户名和数据库名相同直接可以省掉数据库名,直接psql
登陆成功后可能出现两种提示符:
数据库名=# 超级用户
数据库名=> 普通用户
2、使用图形界面管理数据库
可以使用pgAdmin图形界面管理工具,这个工具在安装数据库的同时就可以安装。
3、退出shell
使用\q
退出
mydb=> \q
4、反斜杠
psql程序中有些不属于SQL命令,是以反斜杠开头。
比如\h
可以查看帮助信息。
基础操作
- 查看所有用户
xxxx=#my_db=# \du
角色列表
角色名称 | 属性 | 成员属于
----------+--------------------------------------------+----------
postgres | 超级用户, 建立角色, 建立 DB, 复制, 绕过RLS | {}
ricky | 超级用户, 建立角色, 建立 DB | {}
- 更改密码
my_db=# \password 数据库名 这里修改了用户的密码
输入新的密码:
新密码
-
删除用户
my_db=# drop user 用户名;
错误: 当前用户不能被删
之所以会出现这样的错误是因为使用当前数据库的用户正要被删除,这样是不允许的。应该使用超级管理员登录数据库系统,然后删除该用户。 -
创建用户
xxxx=#create user 用户名;
CREATE ROLE
xxxx=#alter user 用户名 password'密码';
ALTER ROLE
xxxx=#\du
(此步骤用来查看所有用户)
- 创建数据库
mydb=#CREATE DATABASE 用户名;
CREATE DATABASE
mydb=#GRANT ALL PRIVILEGES ON DATABASE 数据库名 to 用户名;
将数据库的权限给用户
GRANT
mydb=#\c 数据库名
连接到刚刚创建的数据库
查看所有的数据库
注:template0是不可修改的空白数据库
testdb=#\l
数据库列表
名称 | 拥有者 | 字元编码 | 校对规则 | Ctype | 存取权限
-----------+----------+----------+--------------------------------+--------------------------------+-----------------------
mydb | ricky | UTF8 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |
postgres | postgres | UTF8 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 |
template0 | postgres | UTF8 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =c/postgres +
| | | | | postgres=CTc/postgres
testdb | ricky | UTF8 | Chinese (Simplified)_China.936 | Chinese (Simplified)_China.936 | =Tc/ricky +
| | | | | ricky=CTc/ricky
(5 行记录)
- 查看表
mydb=#\d
关联列表
架构模式 | 名称 | 类型 | 拥有者
----------+----------+--------+--------
public | user_tbl | 数据表 | ricky
public | yser_tbl | 数据表 | ricky
- 查看表结构
mydb=#\d user_tbl
( \d 加上表名)
数据表 "public.user_tbl"
栏位 | 类型 | 修饰词
------------+-----------------------+--------
name | character varying(20) |
signp_date | date
- 其他常用命令
切换数据库,相当于mysql的use dbname
\c 数据库名
列举数据库,相当于mysql的show databases
\l
列举表,相当于mysql的show tables
\dt
查看表结构,相当于desc tblname,show columns from tbname
\d tblname
\password 设置密码。
\q 退出。
\h 查看SQL命令的解释,比如\h select。
\? 查看psql命令列表。
\l 列出所有数据库。
\c [database_name] 连接其他数据库。
\d 列出当前数据库的所有表格。
\d [table_name] 列出某一张表格的结构。
\du 列出所有用户。
\e 打开文本编辑器。
\conninfo 查看当前数据库,和连接的信息。
—————————————————————————————————————————
以上摘抄自网络,下面是自行操作的经验记录
参考自https://www.bilibili.com/video/av24590479/?p=3
一.基本操作+查询
-
在terminal直接进入PG的某个数据库
psql -U 用户名 数据库名
若成功进入,则返回:
psql(版本号)
Type “help” for help. -
退出PG
xxxx=#\q
-
保存退出
ctrl+O??未试过 -
查看所有用户 xxxx=#
\du
-
新建用户
xxxx=#create user 用户名;
CREATE ROLE
xxxx=#alter user 用户名 password'密码';
ALTER ROLE -
查看所有数据库 xxxx=#
\l
-
创建数据库
xxxx=#CREATE DATABASE 用户名;
CREATE DATABASE
xxxx=#GRANT ALL PRIVILEGES ON DATABASE 数据库名 to 用户名;
将数据库的权限给用户
GRANT
xxxx=#\c 数据库名
连接到刚刚创建的数据库 -
查看当前用户
xxxx=#\conninfo
查看当前数据库,和连接的信息。 -
查看当前数据库
xxxx=# 这里的xxxx
就是当前数据库的名字。 -
查看数据库中所有表
xxxx=#\dt
若数据库中存在表,则返回List of relations;若不存在表,则返回:
No relations found. -
查看表
xxxx=#\dt 表名
比如:
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+-------
public | 表名 | table | chiu
(1 row)
- 查看表的详细信息
xxxx+#\d 表名
比如:
数据库名=# \d 表名
Table "public.表名"
Column | Type | Collation | Nullable | Default
----------------+-----------------------------+-----------+----------+-------------------------------------------------
id | integer | | not null | nextval('表名_id_seq'::regclass)
name | character varying(30) | | not null |
season_count | integer | | not null | nextval('表名_season_count_seq'::regclass)
origin_release | timestamp without time zone | | |
status | integer | | not null | nextval('表名_status_seq'::regclass)
delete_reason | text | | | ' '::text
Indexes:
"表名_pkey" PRIMARY KEY, btree (id)
- 查看某个表的所有column
数据库名=# select * from 表名;
id | name | season_count | origin_release | status | delete_reason
----+------+--------------+----------------+--------+---------------
(0 rows)
- 在PG中引入表
xxxx+#\i 文件名
???未试过
二.建表
-
新建一个表(简单版本)
xxxx=#create table 数据库名(一个column名 varchar(255),另个column名 text);
CREATE TABLE -
新建一个表
create table 数据库名(
id serial primary key,
title varchar(255) not null,
content text check(length(content) > 8), //内容必须大于8个字节
id_draft boolean default TRUE,
id_del boolean default FALSE,
created_date timestamp default 'now'
);
若成功则返回:
CREATE TABLE
(自己写的例子)
create table tv_series(
id serial primary key,
name varchar(30) not null,
season_count serial not null,
origin_release timestamp,
status serial,
delete_reason text default ' '
);
- 查看系统中所有的表
xxxx=#\dt
List of relations
Schema | Name | Type | Owner
--------+-----------+-------+-------
public | 表名 | table | 用户名
(1 row)
- 查看刚刚建的表的详细信息(显示column与其type)
xxxx=#\d 表名
Table "表名"
Column | Type | Collation | Nullable | Default
--------------+------------------------+-----------+----------+---------
一个column名 | character varying(255) | | |
另个column名 | text | | |
-
更改表名
xxxx=#alter table 旧表名 rename to 新表名;
ALTER TABLE
xxxx=#\dt
检查下更新 -
删除表(非常危险,工作时谨慎使用!!!)
xxxx=#drop table 表名;
DROP TABLE
三.在表内insert value语句
模版:
insert into [tablename] (field, ...) values (value, ...)
[表名] (字段,一般指非空字段) (赋值)
//字段与赋值是一一对应的
比如表格column如下:
id | name | season_count | origin_release | status | delete_reason
----+------+--------------+----------------+--------+---------------
(0 rows)
插入语句操作为:
insert into tv_series(id,name,season_count,origin_release) values(101,'西部世界',1,'2016/10/2');
成功后返回:
INSERT 0 1
未完待续
注意!
- MySQL 里面有
auto_increment
自增字段,PostgreSQL 没有自增字段这一说法。
但是有单独的对象:序列。 我们可以用序列或者其他土方法来是实现这样的语法。
http://blog.chinaunix.net/uid-259788-id-4078773.html - PostgreSQL不支持unsigned。
https://stackoverflow.com/questions/20810134/why-unsigned-integer-is-not-available-in-postgresql
* 介绍与下载
设置端口:默认5432
是以加州大学伯克利分校计算机系开发的 PostGRES,现在已经更名为PostgreSQL,版本 4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分 SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL 可以用许多方法扩展,比如, 通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。
安装方法:2选1:
- 一.通过homebrew安装:(**推荐!**需要先安装homebrew,详情在本文中页面搜索)
https://www.jianshu.com/p/9e91aa8782da - 二.官网下载DMG:(不推荐的原因是还要手动在bash_profile输入PATH,才能使用psql)
https://www.enterprisedb.com/downloads/postgres-postgresql-downloads
一.用homebrew安装postgresql时,装好后里就可直接用psql。
- 1.安装:
brew install postgresql
- 2.还差一步完成安装:
To migrate existing data from a previous major version of PostgreSQL run:
从老版本的PostgreSQL中转移已有的数据
brew postgresql-upgrade-database
To have launchd start postgresql now and restart at login:
现在启动PostgreSQL,并在登录时重启:
brew services start postgresql
Or, if you don’t want/need a background service you can just run:
乜都唔做,启动先
pg_ctl -D /usr/local/var/postgres start
- 3.初始化:
initdb /usr/local/var/postgres
- 4.mac安装PostgreSQL后不会创建用户名数据库,执行命令创建数据库和账户:
createdb
然后登录PostgreSQL控制台:(psql连接数据库默认选用的是当前的系统用户)
psql
- 5.查看所有的数据库:
\l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+-------------+-------------+-------------------
xxxx | xxxx | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
postgres | xxxx | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | xxxx | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/xxxx +
| | | | | xxxx=CTc/xxxx
template1 | xxxx | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/xxxx +
| | | | | xxxx=CTc/xxxx
(4 rows)
看到已存在用户同名数据库、postgres数据库,但是postgres数据库的所有者是当前用户,没有postgres用户。
- 6.创建postgres用户
CREATE USER postgres WITH PASSWORD 'XXXXXX';
- 7.删除默认生成的postgres数据库
DROP DATABASE postgres;
- 8.创建属于postgres用户的postgres数据库
CREATE DATABASE postgres OWNER postgres;
- 9.将数据库所有权限赋予postgres用户
GRANT ALL PRIVILEGES ON DATABASE postgres to postgres;
- 10.给postgres用户添加创建- 数据库的属性
ALTER ROLE postgres CREATEDB;
这样就可以使用postgres作为数据库的登录用户了,并可以使用该用户管理数据库
详情见 https://www.jianshu.com/p/9e91aa8782da
二.用DMG安装
程序没把psql所在的目录放到path里,可能导致操作psql -U pgdbo时仍返回:
-bash: psql: command not found
可以在环境变量里追加PATH:(以下3个路径任选1个)
(注:这类文件应该都要提权操作:sudo
)
- 1 重要配置,不建议更改:/etc/profile 里:
sudo vi /etc/profile
- 2 etc/paths:
sudo vi /etc/paths
(这里添加代码时不用写export) - 3 建议在这里修改:bath_profile:
sudo vi ~/.bash_profile
(或参考此处https://blog.csdn.net/weixin_42915286/article/details/84036486)
添加一条:export PATH=$PATH:/你的psql所在目录
如:export PATH=$PATH:/Library/PostgreSQL/11/bin
注:若显示
E325: ATTENTION
Found a swap file by the name "~/.bash_profile.swp"
owned by: root dated: Tue Dec 25 14:15:08 2018
file name: ~root/.bash_profile
modified: YES
user name: root host name: xxxx-MacBook-Air.local
process ID: 44360
While opening file "/Users/xxxx/.bash_profile"
dated: Thu Nov 15 11:59:46 2018
(1) Another program may be editing the same file. If this is the case,
be careful not to end up with two different instances of the same
file when making changes. Quit, or continue with caution.
(2) An edit session for this file crashed.
If this is the case, use ":recover" or "vim -r /Users/xxxx/.bash_profile"
to recover the changes (see ":help recovery").
If you did this already, delete the swap file "/Users/xxxx/.bash_profile.swp
"
to avoid this message.
Swap file "~/.bash_profile.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:
说明有未保存的其他版本。
POSTGRESQL之 完全卸载方法:
- 1.如果是postgresql.app的形式,这个简单,跟其他app一样,删除app即可。
- 2.如果是使用installer图形界面方式安装的。则需要打开终端命令行。
- 3.执行
open /Library/PostgreSQL/9.2/uninstall-postgresql.app
(以实际URL为准) - 4.删除postgresql文件夹
sudo rm -rf /Library/PostgreSQL
- 5.删除配置文件
sudo rm /etc/postgres-reg.ini
- 6.System Preference - Users&Groups 删除POSTGRESQL用户
- 7.删除共享内存设置 (我没有做过特殊设置,所以我本机是没有这个文件的,如果有,可以删除。)
sudo rm /etc/sysctl.conf
参考博客:
https://blog.csdn.net/stk_tianwen/article/details/17757393
http://stackoverflow.com/questions/8037729/completely-uninstall-postgresql-9-0-4-from-mac-osx-lion
end
参考博客:
https://blog.csdn.net/yunqishequ1/article/details/77323647
https://www.jianshu.com/p/21a9a1d0488a
二.客户端 pgADMIN
MAC OS 官网下载链接:
https://www.postgresql.org/ftp/pgadmin/pgadmin4/v3.6/macos/