postgresql 常規操做以及檢查備份

1、建表時,複製源表的信息
test=#
test=# \d test.t1
Table "test.t1"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
col1 | integer | | |
col2 | integer | | |
col3 | integer | | |
Indexes:
"test_t1_unq" UNIQUE CONSTRAINT, btree (col1)

test=# create table test.t2 (like test.t1 including all);
CREATE TABLEnode

test=# \d test.t2;
Table "test.t2"
Column | Type | Collation | Nullable | Default
--------+---------+-----------+----------+---------
col1 | integer | | |
col2 | integer | | |
col3 | integer | | |
Indexes:
"t2_col1_key" UNIQUE CONSTRAINT, btree (col1)mysql


其中,including選項包括如下:
including defaults
including constraints
including indexes
including storages
including commits
including allsql

其中including all 是吧全部屬性複製過去。數據庫


2、pgsql修改字段跟oracle以及MySQL不同;api

test=# \d blog
Table "pgsql.blog"
Column | Type | Collation | Nullable | Default
---------+---------+-----------+----------+---------
id | integer | | |
title | text | | |
content | text | | |

alter table blog alter column id set not null;服務器

test=# alter table blog rename column id to blog_id;
ALTER TABLE
test=# \d blog
Table "pgsql.blog"
Column | Type | Collation | Nullable | Default
---------+---------+-----------+----------+---------
blog_id | integer | | not null |
title | text | | |
content | text | | |

3、表繼承及分區表
test=# insert into persons values ('haha',30,'f');
INSERT 0 1session

create table students ( class_no int) inherits (persons);

test=# insert into students values ('bb',20,'f',2);
INSERT 0 1oracle

test=# select * from persons;
name | age | sex
------+-----+-----
haha | 30 | f
bb | 20 | f
(2 rows)post

test=#
test=#
test=#
test=# select * from only persons;
name | age | sex
------+-----+-----
haha | 30 | f
(1 row)spa

test=#
test=#
test=# select * from students;
name | age | sex | class_no
------+-----+-----+----------
bb | 20 | f | 2
(1 row)

4、查看PGSQL的鎖。
select * from pg_locks;

查看當前會話的PID;

select pg_backend_pid();

查看當前會話:
select * from pg_stat_activity;
select pid,usename,client_addr,client_hostname,client_port from pg_stat_activity;


5、參數修改

5.1 從新讀取配置文件

pg_ctl reload

5.2 查看當前實例狀態

pg_ctl status

5.3 殺進程
查看當前的進程:也能夠經過查看鎖
select pg_backend_pid();
pg_backend_pid
----------------
1564

殺進程:
pg_ctl kill INT 1564

5.3 須要執行清理過程:

postgres --single -D /pgsql11data/ postgres --數據庫啓動到單用戶下

backend> vacuum full ;

5.4配置參數

全部的配置項都是大小寫不敏感的。

6、備份
PG提供物理備份和邏輯備份
物理備份:WAL熱備份
邏輯備份:pg_dump,pg_dumpall,恢復時pg_restore

一、備份test 數據庫
pg_dump test >testdb.sql 跟MySQL同樣,生成的是sql文件

好比我把test數據庫恢復成testbak數據庫
create database testbak encoding UTF8;
[pgsql@node2 ~]$ psql testbak < /home/pgsql/test.sql
SET
SET
SET
SET
SET
set_config
------------

(1 row)

跟mysql 很相似。


也能夠指定格式的備份成*.dmp文件

[pgsql@node2 ~]$ pg_dump -Fc -Upgsql test > testpgsql.dmp

恢復

create database test encoding UTF8;

[pgsql@node2 ~]$ pg_restore -d test testpgsql.dmp


2.想備份psql模式下全部表,可是不包括test2
test=# \d+
List of relations
Schema | Name | Type | Owner | Size | Description
--------+--------------+----------+-------+------------+-------------
pgsql | blog | table | pgsql | 8192 bytes |
pgsql | persons | table | pgsql | 8192 bytes |
pgsql | students | table | pgsql | 8192 bytes |
pgsql | test_view | view | pgsql | 0 bytes |
pgsql | testtab01 | table | pgsql | 211 MB |
public | capitals | table | pgsql | 8192 bytes |
public | cities | table | pgsql | 8192 bytes |
public | duty | table | pgsql | 16 kB |
public | example | table | pgsql | 0 bytes |
public | non_capitals | table | pgsql | 8192 bytes |
public | products | table | pgsql | 8192 bytes |
public | t | table | pgsql | 0 bytes |
public | t1 | table | pgsql | 16 kB |
public | t2 | table | pgsql | 16 kB |
public | t_id_seq | sequence | pgsql | 8192 bytes |
public | test1 | table | pgsql | 20 MB |
public | test2 | table | pgsql | 8192 bytes |
public | weather | table | pgsql | 8192 bytes |
(18 rows)

[pgsql@node2 ~]$ pg_dump -t 'pgsql.t*' -T psql.t2 test > pgsqltest.sql

備份全部數據庫test 對象,不包括duty
[pgsql@node2 ~]$ pg_dump -T 'pgsql.duty' test > noduty.sql

在192.168.211.152 上備份,恢復到 192.168.211.154:
test=# create database hl;
CREATE DATABASE

[pgsql@node2 ~]$ pg_dump -h 192.168.211.152 -Upgsql test -Fc > remote_test.dmp
[pgsql@node2 ~]$ ls -lh
total 445M
-rw------- 1 pgsql pgsql 854 Apr 13 23:52 logfile
-rw-rw-r-- 1 pgsql pgsql 80M Jun 12 23:16 noduty.sql
-rw-rw-r-- 1 pgsql pgsql 75M Jun 12 23:14 pgsqltest.sql
-rw-rw-r-- 1 pgsql pgsql 106M Jun 12 23:26 remote_test.dmp
-rw-rw-r-- 1 pgsql pgsql 106M Jun 12 23:06 testpgsql.dmp
-rw-rw-r-- 1 pgsql pgsql 80M Jun 12 22:54 test.sql

testbak=# create database test;CREATE DATABASE[pgsql@node2 ~]$ pg_restore -h 192.168.211.152 -Upgsql -C -d test remote_test.dmp -c, --clean clean (drop) database objects before recreating -C, --create create the target database 最後,要講備份的 remote_test.dmp的數據從新加載到一個不是新建的不一樣名稱的數據庫 remote中,能夠使用下面命令: createdb -T template0 remote; pg_restore -d remote remote_test.dmp 從template0而不是template1 建立數據庫,確保乾淨,沒有使用-C,而是直接恢復到remote數據庫上。 7、PGSQL 常規操做 select version(); --查看版本 select pg_postmaster_start_time(); --查看數據庫啓動時間 select pg_conf_load_time(); --查看配置文件的時間 show timezone; --查看數據庫時區 select user; select current_user; select session_user; select current_catalog,current_database(); select inet_client_addr(),inet_client_port(); --查看session客戶端登陸IP,端口 inet_client_addr | inet_client_port ------------------+------------------ 192.168.211.152 | 36891 select inet_server_addr(),inet_server_port(); --查看數據庫服務器登陸IP,端口 inet_server_addr | inet_server_port ------------------+------------------ 192.168.211.152 | 5432 select pg_backend_pid(); 查看當前session的後臺服務器進程的PID show shared_buffers; --查看共享buffer select current_setting('shared_buffers'); --查看當前shared_buffers select pg_xlogfile_name(pg_current_xlog_location()); --查看當前正在寫的WAL文件 select pg_is_in_backup(),pg_backup_start_time(); --查看實例是否正在作基礎備份 select pg_is_in_recovery(); --查看實例時hot standby 狀態仍是正常數據庫狀態 select pg_database_size('test'),pg_size_pretty(pg_database_size('test')); --查看test數據庫大小(顯示會慢) select pg_size_pretty(pg_relation_size('test1')); --查看鏈接數據庫test1表的大小(不包括索引) select pg_size_pretty(pg_total_relation_size('test1')); --查看鏈接數據庫test1表的大小(包括索引) select pg_size_pretty(pg_indexes_size('test1')); --查看錶test1上索引的大小 select pg_size_pretty(pg_tablespace_size('test')); 查看test表空間的使用大小 select pg_relation_filepath('test1'); --查看test1表空間對應的數據文件 8、系統維護經常使用命令 修改配置文件postgresql.conf後,生效的兩種方式: 1.pg_ctl reload 2.select pg_reload_conf(); 能生效的不須要重啓服務器。 切換日誌文件 select pg_rotate_logfile(); 切換WAL日誌文件 select pg_switch_xlog(); --貌似有問題 或者checkpoint; 3.取消正在執行的長時間的SQL方法 pg_cancel_backend(pid):取消正在執行的SQL pg_terminate_backend(pid):終止一個後臺服務進程,同時釋放此後臺服務進程的資源。 select pid ,datname,usename,query_start,query from pg_stat_activity; --查看運行的SQL select pg_cancel_backend(pid); 若是取消不了,用這一句取消:select pg_terminate_backend(28184);

相關文章
相關標籤/搜索