一、 安装部署
1、 下载软件
从pgsql官网地址:https://www.postgresql.org/,进入后点击download就来到下载页,这里点击Linux下面的Other Linux选项,然后点击下方的tar.gz archive下载二进制归档,进入下载页面后,根据自己的机器类型选择要下载的包,本机为x86-64,下载包为postgresql-10.1-1-linux-x64-binaries.tar.gz。
2、 安装
解压数据库并放到指定目录:
tar -xvzf postgresql-10.1-1-linux-x64-binaries.tar.gz
#解压出来之后目录为pgsql
mv pgsql/ /soft/pg
现在pgsql的安装目录就是/soft/pg
创建pgsql用户并设置密码:
useradd postgres
passwd postgres
#两次输入密码并确认
注意:这里设置密码是linux用户postgres的登录密码,不是pgsql服务器的密码
创建pgsql数据目录: mkdir /soft/pg /pgsql_data
给postgres用户授权目录访问权限: chown postgres /soft/pg /pgsql_data/
然后切换到postgres用户来操作数据库,pgsql数据库就以postgres为默认用户,执行: su - postgres 切换
 切换之后建议修改~/.bash_profile将pgsql的bin目录加至环境变量中,方便直接使用pgsql相关命令,下面初始化数据库:
/soft/pg /pgsql/bin/initdb -D /soft/pg /pgsql_data/
  等待执行完毕,没什么问题就初始化成功了,提示如下:

linux postgresql查看表字段命令 linux查看pg数据库位置_数据库

如图根据提示可以启动数据库: /soft/pg /pgsql/bin/pg_ctl -D /monchickey/pgsql_data/ -l logfile start 这里-l指定日志文件位置,这里直接输出在家目录下的logfile中,这个可以自己指定,这里-D指定数据目录,默认如果不加数据目录直接报错找不到,可以刚才说的环境变量配置文件中~/.bash_profile加入一行: export PGDATA=/soft/pg /pgsql_data 然后source进去即可,这样pgsql会自动去找PGDATA环境变量值,找不到才会报错

pgsql默认的端口号为5432,通过netstat命令或者lsof命令都可以看到监听情况:

linux postgresql查看表字段命令 linux查看pg数据库位置_postgresql_02

停止postgresql的命令为: /soft/pg /pgsql/bin/pg_ctl -D /soft/pg /pgsql_data/ stop

3. 命令行界面简单操作

  pgsql和mysql一样可以通过交互式提示符连接操作,连接方式如下:

./bin/psql -h 127.0.0.1 -d postgres -U postgres -p 5432

  其中-h参数指定服务器地址,默认为127.0.0.1,默认不指定即可,-d指定连接之后选中的数据库,默认也是postgres,-U指定用户,默认是当前用户,-p 指定端口号,默认是"5432",其它更多的参数选项可以执行: ./bin/psql --help 查看

  登录进去默认界面如下所示:

  

linux postgresql查看表字段命令 linux查看pg数据库位置_数据库_03

二、 postgresql命令
\h #查看所有的sql关键字
  ? #命令行操作的帮助
  \d #查看当前schema 中所有的表
  \q #退出pg命令行
  \d #schema.table 查看表的结构 \d tablename
  \x #横纵显示切换
  \dT+ #显示扩展类型相关属性及描述
  \dx #显示已安装的扩展插件
  \l #列出所有的数据库
  \timing #显示执行时间
  \c database_name #切换数据库
  set search to schema #切换schema
  explain sql #解释或分析sql执行过程

.基本操作
1 登陆
超级用户登陆

su - postgres
psql template1     -- 登陆template1数据库

普通用户登陆

psql -U duangr -d template1      -- 使用duangr登陆template1数据库

2 基本查询
\l – 查看有哪些数据库
\q – 退出
\c duangr – 从之前的库切换到duangr库
\d table_name – 查看表结构
\dt – 查看有哪些表
\di – 查看索引
\du – 查看角色
通过SQL查看

– 查询系统有哪些数据库

select oid,datname from pg_database;

– 查询系统有哪些用户

select usename from pg_user;

– 查询系统有哪些角色

select rolname from pg_roles;

3 用户与角色
用户和角色类似,用户就是可以登陆的角色.

-- 创建用户 (duangr)
CREATE USER duangr WITH PASSWORD '${passwd}';
-- 在db中切换用户
\!psql -U duangr -d template1 
-- 删除用户 (duangr)
DROP USER  duangr;

-- 创建角色 (dgr_role) 
CREATE role dgr_role; 
-- 删除角色
DROP ROLE [ IF EXISTS ] name [, ...]
-- 将角色赋给其他角色或用户
GRANT role_name [, ...] TO role_or_user_name [, ...]
-- 回收角色
REVOKE role [, ...] FROM role_or_user_name [,...]
授予权限

GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] }
  ON [ TABLE ] tablename [, ...]
  TO {  rolename | PUBLIC } [, ...] [ WITH GRANT OPTION ]


GRANT { { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] }

  ON SEQUENCE sequencename [, ...]
  TO {  role_or_user_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
  ON DATABASE dbname [, ...]
  TO {  role_or_user_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
  ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...]
  TO {  role_or_user_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { USAGE | ALL [ PRIVILEGES ] }
  ON LANGUAGE langname [, ...]
  TO {  role_or_user_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
  ON SCHEMA schemaname [, ...]
  TO {  role_or_user_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]

GRANT { CREATE | ALL [ PRIVILEGES ] }
  ON TABLESPACE tablespacename [, ...]
  TO {  role_or_user_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
回收权限

REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
FROM {  role_or_user_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { USAGE | SELECT | UPDATE } [,...] | ALL [ PRIVILEGES ] }
ON SEQUENCE sequencename [, ...]
FROM { [  role_or_user_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE dbname [, ...]
FROM { role_or_user_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION funcname ( [ [ argmode ] [ argname ] argtype [, ...] ] ) [, ...]
FROM {  role_or_user_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE langname [, ...]
FROM { role_or_user_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schemaname [, ...]
FROM { role_or_user_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
{ CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE tablespacename [, ...]
FROM {  role_or_user_name | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]

4 数据库操作

-- 创建db (duangr)
create database duangr

-- 删除db (duangr)
drop database duangr

-- 建表
create table (
    [field1] [type1] <references 关联表名(关联的字段名)>,
    [field2] [type2] ,
    ...... ,
   primary key ([field1],[field2],...)
); 
-- 改表名
alter table [table_A] rename to [table_B]; 
-- 删表
drop table [table_name]

-- 修改表
-- 加字段
alter table [table_name] add column [field_name] [type]; 
-- 删字段
alter table [table_name] drop column [field_name]; 
--重命名字段
alter table [table_name] rename column [field_A] to [field_B]; 
--设置字段缺省值
alter table [table_name] alter column [field_name] set default [value]; 
--删除缺省值
alter table [table_name] alter column [field_name] drop default; 

-- 记录增删改
insert into [table_name] (field1,field2,...) values(...)
update [table_name] set field=? where ...
delete from [table_name] where ...

5 数据清理

-- 对数据库进行清理、收回磁盘空间并更新统计信息
vaccumdb -d 
    -a 对所有的数据库操作 
    -z 保证不断地删除失效的行,节约磁盘空间,将统计信息更新为最近的状态

6 备份数据库

-- 备份 duangr 库 
pg_dump sq > /export/home/sq/pgsql/backup/duangr_20131206.bak

7 导入数据
– 将文件中的数据导入到表中 (字段分隔符可以自定义,与数据文件中保持一致. 数据文件字段与表中列相对应)
copy table_name from ‘/tmp/etl/table_name.dat’ with delimiter ‘^A’
P.S. 此处使用ASCII字符 0x01 作为文件中字段分隔符,目的是避免与数据字段内容冲突.
^A 需要通过 “Ctrl+V” + “Ctrl+A” 的方式输入.