postgresql 是一款开源的对象关系数据库管理系统。pg 可以说是一款全栈的数据库,毕竟 slogan 是 “世界上最先进的关系型数据库”。同时 pg 比 mysql 少不少的坑,使用上会舒心一些。 本文主要是记录 pg 的使用方式,同时也会记录一些 sql 的语句或者 pg 独有的一些操作。
Ⅰ 创建用户
pg 安装后默认会有一个postgres
的用户,要创建新用户,需要先切换到该账户,然后执行如下的操作。
$ su - postgres
-bash-4.2$ psql
postgre=# create user username with password 'xxxxx';
postgre=# create database databaseName owner username;
postgre=# grant all privileges on database databaseName to username;
Ⅱ 登录数据库
使用用户名密码登录:
$ psql -h hosturl -U username -d databasename -p port
注意在一些编程的库中使用上面的方式可能会报sslmode required not support
。通过增加sslmode=disable
可以解决。
Ⅲ 导入导出
可以通过一些外部命令将 pg 数据库中的内容导出到一个 sql 文件中,同时也可以将这个 sql 文件重新应用到另外的数据库中。操作如下:
# export to dump.sql
$ pg_dump -h hosturl -U username databasename > /path/tp/save/dump.sql
# import to new database
$ psql -h hosturl -d database -U username -f dump.sql
此外导出单独一个表的操作如下:
pg_dump -h localhost -p 5432 -U username --format plain --verbose \
--file dump.sql --table public.tablename dbname
comment: 不过从高版本导出后,再导入到低版本时会有一些小错误。一般可以通过sed
将对应的行注释掉。
Ⅳ 插入数据
values 可以指定多个,批量插入。
insert into table_name (column1, column2, column3) values (value1, value2, value3)[,(,...)];
Ⅴ 更新数据
UPDATE table_name
SET column1 = value1, column2 = value2...., columnN = valueN
WHERE [condition];
RETURNING * | output_expression AS output_name;
RETURNING
表示返回更新后符合条件的记录
Ⅵ 修改表格字段
# 增加字段
ALTER TABLE table_name
ADD COLUMN column_name datatype column_constraint;
# 删除字段
ALTER TABLE table_name
DROP COLUMN column_name;
# 重命名字段
ALTER TABLE table_name
RENAME COLUMN column_name
TO new_column_name;
# 改变默认值
ALTER TABLE table_name
ALTER COLUMN column_name
[SET DEFAULT value | DROP DEFAULT];
# 修改 not null 限制
ALTER TABLE table_name
ALTER COLUMN column_name
[SET NOT NULL| DROP NOT NULL];
# 增加check限制
ALTER TABLE table_name
ADD CONSTRAINT constraint_name constraint_definition;
# 增加其他限制
ALTER TABLE table_name
ADD CONSTRAINT constraint_name constraint_definition;
# 重命名表
ALTER TABLE table_name
RENAME TO new_table_name;
导出查询内容到文件
一般先切换对应的用户,比如su postgres
。 之后可以执行如下的命令:
psql -d models -c "COPY (select * from tblname) TO STDOUT WITH CSV HEADER" > a.csv
[
参考回答]: 多种方式执行查询导出