`
LJ你是唯一LT
  • 浏览: 244031 次
社区版块
存档分类
最新评论

Postgresql数据库运维笔记

阅读更多
1、 对象创建
研发、测试无权创建、删除数据库和表,也无权修改表结构,都由DBA统一操作
a)创建数据库:
CREATE DATABASE dbsample           --数据库名不能与现有库重复,pg严格区分大小写,因此请统一小写命名,不能使用特殊字符(@ # &等),不能以数字开头,可以以字母和下划线开头,不能超过63个字符
WITH OWNER = postgres                    --指定数据库的属主为postgres      
ENCODING = 'UTF8'                            --一般情况下生产都使用的UTF8的字符集
TABLESPACE = pg_default;                 --一般情况下使用默认表空间
COMMENT ON DATABASE dbsample       --添加数据库备注
IS '模板库';

CREATE DATABASE tinadb
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'zh_CN.UTF-8'
       LC_CTYPE = 'zh_CN.UTF-8'
       CONNECTION LIMIT = -1
       template  template0;

COMMENT ON DATABASE tinadb IS 'tina的测试库';

使用createdb创建数据库
[postgres@localhost bin]$ createdb --encoding=UTF8 --owner=postgresql -U postgres testdb
--encoding=UTF8 设置字符集
--owner=postgres 设置数据库的所有者
--tmplate=tmplate0   设置建库的模板,该模板支持空间数据操作
--U postgres  用postgres身份建立数据库

b)删除数据库
drop database dbname; 

c)创建表
语法:
CREATE [ [ GLOBAL | LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name (
{ column_name data_type [ DEFAULT default_expr ] [ column_constraint [ ... ] ]
| table_constraint
| LIKE parent_table [ { INCLUDING | EXCLUDING } DEFAULTS ] } [, ... ]
)
[ INHERITS ( parent_table [, ... ] ) ]
[ WITH OIDS | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ TABLESPACE tablespace ]

范例:
CREATE TABLE tbname                                     --表名不能与现有表重复,统一小写命名,不能使用特殊字符(@ # &等),不能以数字开头,可以以字母和下划线开头,不能超过63个字符
(id serial primary key,                                          --每个表都指定一个主键
name varchar(20) not null,                                  --varchar类型的尽可能的不要设置太长,增加不必要的开销  
sex char(2) default 'F' check (sex in ('F', 'M')),    
log_in timestamp without time zone,                   --时间类型的选择,优先使用timestamp,占的字节更少表更小    
score numeric check(score >0 and score<100));

尽量给表和字段都添加上备注说明,方便其他人查看
COMMENT ON TABLE  tbname IS  '说明表 ';
COMMENT ON COLUMN tbname.id IS '编号';
COMMENT ON COLUMN tbname.name IS '姓名';
COMMENT ON COLUMN tbname.sex  IS  '性别';
COMMENT ON COLUMN tbname.log_in  IS  '登录时间';
COMMENT ON COLUMN tbname.score  IS  '分数';

d)表授权
表创建后schema和owner与现有表保持一致:
yunwei=# \dt
                         关联列表
架构模式 |            名称            |  型别  |  拥有者
----------+----------------------------+--------+----------
public   | andriod_1mobile            | 资料表 | postgres

给业务用户授权:
grant select,insert,update,delete on table tbname to sqluser;  --授权给sqluser
由创建表而自动生成的序列也需要授权
grant select,update on sequence tbname_id_seq to sqluser; 
grant select on table tbname to fenxi;                     --授权给fenxi

e)删除表
drop table tbname;       

f)修改表结构
新增字段:
alter table tbname add column telephone bigint not null;

删除字段:
alter table tbname drop column telephone;

修改表结构:
alter table tbname alter column sex set not null;                   --设置非空
alter table tbname alter column score type decimal;             --修改字段类型,并不能修改成任意类型
alter table tbname drop constraint key_md5;                        --删除约束
alter table tbname add column id serial primary key;            --新增自增主键(一个表只能有一个主键)
alter table tbname alter column sample drop not null;          --删除非空约束(非空约束是没有约束名的,因此不能像第一条那么删)

2、 停掉或者kill掉卡住的会话
a)优先在数据库操作
查询活跃的后台会话:
select p.datname,p.usename,p.application_name,p.client_addr,p.query_start,p.current_query,p.waiting,p.procpid from pg_stat_activity p ;
命令:
select pg_cancel_backend('procpid');              --取消session
select pg_terminate_backend('procpid');         --结束session
pg_cancel_backend()操作后,session还在,事物回退;
pg_terminate_backend()操作后,session消失,事物回退。
如果在某些时候pg_terminate_backend()不能杀死session,那么可以在os层面,使用kill命令

b)在操作系统kill
ps –ef|grep postgresql  第二个字段pid,找到需要kill的那个进程
kill pid
kill -9  pid   --优先使用kill,kill -9的权限很高,可能引起故障

3、创建用户
现有库,如无必要,不创建新用户;
若创建了新库,需要另建用户,操作如下:
Create database tb1 with owner postgre;
Create user user1 encrypted  password '***'  nosuperuser nocreatedb  nocreaterole noreplication noinherit;
REVOKE CREATE ON SCHEMA public FROM PUBLIC;  --必须做这一步

4、重新加载数据库参数
部分参数可以不需要重启,reload就能生效
修改参数:
vi /home/pgsql/9.1/data/postgresql.conf
重新加载参数:
/usr/bin/pg_ctl reload -D /home/pgsql/9.1/data

5、修改管理员密码
忘记管理员密码:
vi /home/pgsql/9.1/data/pg_hba.conf
local   all         all                                       trust
host    all         all         127.0.0.1/32          trust
host    all         all         ::1/128                   trust
重新加载:
/usr/bin/pg_ctl reload -D /home/pgsql/9.1/data
改后无需密码认证,就可以直接psql连上数据库
修改密码:
alter user postgres with password  '*****';

6、alter database命令
数据库的重命名
命令:     ALTER DATABASE
描述:     改变一个数据库
语法:
ALTER DATABASE 名字 SET 参数 { TO | = } { 值 | DEFAULT }
ALTER DATABASE 名字 RESET 参数
ALTER DATABASE 名字 RENAME TO 新名字
ALTER DATABASE 名字 OWNER TO 新属主

7、数据库常用简写命令
\df  列出函数
\di  只列出索引
\do  只列出操作符
\ds  只列出序列
\dS  列出系统表和索引
\dt  只列出非系统表
\dT  列出数据类型 (加 "+" 获取更多的信息)
\db  列出表空间 (加 "+" 获取更多的信息)
\dg  列出组
\dn  列出模式 (加 "+" 获取更多的信息)
\do  列出操作符
\dl  列出大对象, 和 \lo_list 一样
\dp  列出表, 视图, 序列的访问权限
\du  列出用户
\l   列出所有数据库 (加 "+" 获取更多的信息)
\q   退出 psql 程序

8、copy命令
copy命令必须是管理员才能执行
这个命令导出的都是文本格式的,可以用符号隔开,也可以是纯文本的。
语法
COPY 表名 [ ( 字段 [, ...] ) ]
FROM { '文件名' | STDIN }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE NOT NULL column [, ...] ]

COPY 表名 [ ( 字段 [, ...] ) ]
TO { '文件名' | STDOUT }
[ [ WITH ]
[ BINARY ]
[ OIDS ]
[ DELIMITER [ AS ] 'delimiter' ]
[ NULL [ AS ] 'null string' ]
[ CSV [ QUOTE [ AS ] 'quote' ]
[ ESCAPE [ AS ] 'escape' ]
[ FORCE QUOTE column [, ...] ]
范例:
导出全表数据
postgres=# copy  tbname  to ’/tmp/tbname.txt’;  

导出部分字段,并以;间隔开

导入数据     ---注意copy命令只会在原表数据上附加,而不会覆盖
postgres=# copy tbname from '/tmp/tbname.txt';
COPY 4
导入部分字段
t_url=# copy t_source_url(export_id,source,export_time,key_word) from '/home/hrburl/1.txt';
COPY 134312

9、常用命令
a) 查看大小
SELECT pg_size_pretty(pg_database_size('tm_samples'));    --数据库大小
SELECT pg_size_pretty(pg_relation_size('white_list'));    --表大小
SELECT pg_size_pretty(pg_relation_size('white_list_pkey')); --索引大小
SELECT pg_size_pretty(pg_tablespace_size('pg_default'));    --表空间使用大小

b) 查找对象
查表
select * from pg_tables where tablename='white_list';

查表字段
select table_catalog,table_name,column_name,ordinal_position,column_default,is_nullable,data_type,character_maxinum_length from information_schema.columns where table_name='white_list' order by ordinal_position;

查索引定义
select b.indexrelid from pg_class a,pg_index b where a.oid=b.indrelid and a.relname='white_list';

查序列
select * from information_schema.sequences where sequence_name='t_white_id_seq';

查约束
select oid,conname,connamespace,contype from pg_constraint where conname like '%white%';

查function定义
select oid from pg_proc where procname='zhprs_start';
select * from pg_get_functiondef('oid');


同样的,可以通过系统表信息函数,来获取对象的创建语句
pg_get_viewdef(view_oid)
pg_get_ruledef(rule_oid)
pg_get_indexdef(index_oid)
pg_get_triggerdef(trigger_oid)
pg_get_constraintdef(constraint_oid)

查活动会话
SELECT * from  pg_stat_activity where datname='yunwei';

c)常用类型转换
select round(1::numeric/4::numeric,2);                           --结果0.25
select round( cast ( 1 as numeric )/ cast( 4 as numeric),2);       --结果0.25
select substr(cast(1234 as text),3,1);                             --换成文本,从第三个字符开始,取一个字符出来。
select to_char(current_timestamp, 'HH12:MI:SS');                    --结果16:03:29
select to_date('05 Dec 2000', 'DD Mon YYYY');                        --结果2000-12-05
select to_number('12,454.8-', '99G999D9S');                            --结果-12454.8
select to_timestamp('2014-10-10 10:40:10','yyyy-MM-dd HH24:MI:ss');         --结果2014-10-10 10:40:10+08

10、如何利用pg生产库每日的定期备份紧急恢复数据库?
a)查看pg的备份脚本

备份命令:
pg_dump --host localhost --port 5432 --username "postgres" --format custom --blobs --encoding UTF8 --verbose yunwei --file ./yunwei.backup


b)利用最近的一个备份片恢复单个库

恢复命令:
pg_restore
pg_restore -U postgres -d yunwei /opt/db_backup/20140922/yunwei.backup >/tmp/yunwei.log 2>&1
分享到:
评论

相关推荐

    Postgresql数据库运维笔记 数据库运维.pdf

    Postgresql数据库运维笔记 数据库运维.pdf

    MySQL DBA运维笔记 超详细

    MySQL DBA运维笔记详细介绍了数据库相关的基础知识以及MySQL数据库的管理和操作技巧,以下是详细的知识点梳理: 1. 数据库的种类: 1.1 关系型数据库介绍:关系型数据库是以行和列的形式存储数据,支持复杂的查询...

    linux运维学习笔记:数据库介绍与安装管理.pdf

    数据库安全性的管理、备份和恢复策略也是数据库日常运维工作的重要组成部分。通过不断地学习和实践,数据库管理员能够确保数据库系统的稳定性、安全性和性能,以满足企业对数据存储和管理的需求。

    缘来是黎的运维学习笔记

    5. **网络服务**:部署和管理Web服务器(如Apache或Nginx)、数据库服务器(如MySQL或PostgreSQL)、邮件服务器(如Postfix)、DNS服务器(如bind)等,包括配置、安全优化和故障排查。 6. **日志分析**:学习如何...

    Linux运维就业班+Linux架构班 Linux零基础到运维架构大神

    - PostgreSQL数据库管理 - NoSQL数据库选择与应用 - 数据备份与恢复策略 通过上述内容,我们可以看出该课程不仅覆盖了Linux的基础操作与系统管理,还深入到了高级运维实践以及复杂的架构设计领域。对于想要从事...

    Linux定时执行脚本学习笔记

    “linux下定时执行脚本.docx”可能介绍了如何结合`cron`和数据库的备份命令(如MySQL的`mysqldump`或PostgreSQL的`pg_dump`)实现自动备份。备份脚本可能涉及压缩、加密和上传到远程服务器,以确保数据安全。 至于...

    云笔记项目完整版源码

    3. **数据库设计**:云笔记应用需要存储大量文本数据,因此可能采用关系型数据库(如MySQL、PostgreSQL)或非关系型数据库(如MongoDB)。数据库设计应考虑到数据的结构、索引优化、数据安全和备份策略。 4. **API...

    这是一个毕业设计用的云笔记网站.zip

    总结来说,构建一个云笔记网站涉及了前端与后端开发、数据库管理、用户认证、数据同步、安全性、用户体验设计、API集成、性能优化以及部署运维等多个方面。这些知识涵盖了软件开发的全生命周期,对毕业生来说是一个...

    云笔记note

    2. **数据库设计**:数据库是存储用户笔记的核心部分,可能选用MySQL、MongoDB或PostgreSQL等。需设计合理的数据模型,包括用户信息表、笔记表、分类表等,考虑数据的一致性、安全性和扩展性。 3. **身份验证与授权...

    源代码:网站制作云笔记.rar

    3. **后端技术**:后端代码可能使用了如Node.js、PHP或Python等语言,结合数据库管理系统如MySQL、MongoDB或PostgreSQL来存储和检索数据。 4. **API接口**:云笔记应用可能与其他服务(如云存储API,例如Google ...

    某教云课堂自动签到网站源码+数据库(最新版本)

    考虑到数据安全性和性能,可能选择了MySQL、PostgreSQL或MongoDB等关系型或非关系型数据库。数据库设计应包括用户表、签到记录表以及可能的设置表,确保数据结构合理,便于查询和更新。 4. **安全性**:由于涉及...

    Mysql学习笔记.pdf

    本学习笔记将围绕MySQL的基础知识、体系架构、性能优化等方面进行深入探讨。 首先,MySQL的学习需要掌握基本的SQL语法,如数据查询、插入、更新和删除操作。推荐的书籍包括《MySQL必知必会》和《MySQL深入浅出》,...

    商城项目笔记对应开发的商城项目

    4. **数据库设计**:关系型数据库如MySQL、PostgreSQL或非关系型数据库如MongoDB用于存储商品信息、订单数据、用户资料等。数据库设计需考虑数据模型、索引优化和事务处理。 5. **支付集成**:电商平台往往需要集成...

    Spring Boot核心技术-笔记-pdf版.zip

    9. **数据访问**:集成JPA和MyBatis等持久层框架,支持多种数据库,如MySQL、PostgreSQL等,并提供了数据源、事务管理的自动配置。 10. **安全**:Spring Security是Spring Boot默认的安全解决方案,提供认证、授权...

    Linux基础.zip

    "鸟哥的Linux私房菜-服务器架设篇"详细介绍了如何在Linux上搭建各种服务器,如Web服务器(Apache、Nginx)、数据库服务器(MySQL、PostgreSQL)、邮件服务器(Postfix、Dovecot)、FTP服务器等,这对于运维人员来说...

    Spring Boot 笔记 二 (核心)

    Spring Boot可以自动配置数据源,并支持多种数据库,如MySQL、PostgreSQL等。同时,通过JPA(Java Persistence API)和ORM框架(如Hibernate),可以轻松实现对象关系映射。 10. **健康检查与熔断机制** 通过...

    Django架构操作笔记

    - PostgreSQL: `'django.db.backends.postgresql'` - MySQL: `'django.db.backends.mysql'` - SQLite: `'django.db.backends.sqlite3'` - Oracle: `'django.db.backends.oracle'` **知识点10:** 修改 Django ...

    笔记24-JAVAEE之Linux和云服务器

    - 在云服务器上安装和配置数据库服务(如MySQL、PostgreSQL),通过JDBC与JAVAEE应用交互。 - 日志分析,通过日志文件(如`/var/log/mysql/error.log`)排查数据库异常。 3. 故障排查: - 使用`grep`搜索日志中...

    palo.bar:我的鸡尾酒笔记!

    3. **数据库管理**:为了存储鸡尾酒的配方、用户信息和评论等数据,开发者可能使用MySQL、PostgreSQL、MongoDB等关系型或非关系型数据库。数据库设计应考虑高效查询和数据安全性。 4. **API接口**:如果应用需要与...

    J阅读学习书籍在线微信阅读程序源码.zip

    4. **数据库管理**:数据库系统如MySQL、MongoDB或PostgreSQL可能被用来存储用户信息、书籍数据和阅读记录。数据库设计和SQL查询优化是提升性能的关键。 5. **书籍上传与管理**:源码可能包含书籍上传、分类、检索...

Global site tag (gtag.js) - Google Analytics