來自那些年我踩過的坑
postgres有些人估計(jì)都沒有聽說過弄企,沒關(guān)系,可以百度自己了解一下固逗,這里說一下Centos7.6_1810版本的安裝(目前的最新版)
查詢有沒有安裝
rpm -qa|grep postgre
查詢postgre的yum源
yum list |grep postgre
下載地址:https://www.postgresql.org/download/linux/redhat/
一浅蚪、yum安裝
點(diǎn)開下載網(wǎng)址藕帜,安裝姿勢有了。直接看(三惜傲、通用操作)
yum安裝已經(jīng)在/usr/bin中添加了鏈接洽故,可以執(zhí)行postgre的命令。
安裝之后的路徑是:/var/lib/pgsql/10/data/
二盗誊、解壓安裝
1 下載源代碼并解壓
wget https://ftp.postgresql.org/pub/source/v11.0/postgresql-11.0.tar.gz
tar -xvzf postgresql-11.0.tar.gz #解壓pg包时甚,并到安裝目錄
./configure
sudo make
sudo make install
如果編譯過程中遇到問題,比如缺少GCC哈踱、readline荒适、zlib等,安裝方式都是:
yum list |grep xxx
yum install -y xxxx
yum install -y xxxx-dev*
2 創(chuàng)建用戶組和用戶
groupadd postgres #新增用戶組
useradd -g postgres postgres #新增用戶
passwd postgres #為用戶設(shè)置密碼
3 創(chuàng)建數(shù)據(jù)目錄
mkdir /usr/local/pgsql/data
chown postgres /usr/local/pgsql/data #設(shè)置data文件加屬性
chmod 700 /usr/local/pgsql/data #設(shè)置data文件夾權(quán)限
4 數(shù)據(jù)庫操作
su postgres
/usr/local/pgsql/bin/initdb -D /usr/local/pgsql/data #初始化數(shù)據(jù)庫
cd /usr/local/pgsql/bin/ & ./pg_ctl [start | stop | restart] -D /usr/local/pgsql/data/ #啟動\停止\重啟數(shù)據(jù)庫
/usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 & #設(shè)置日志輸出位置
/usr/local/pgsql/bin/createdb test #創(chuàng)建測試數(shù)據(jù)庫
5. /usr/local/pgsql/bin/psql test #啟動測試數(shù)據(jù)庫
三开镣、通用操作
修改密碼
yum安裝postgresql刀诬,默認(rèn)會建一個(gè)名為”postgres”的系統(tǒng)賬號,用于執(zhí)行PostgreSQL邪财;
su - postgres
切換用戶后陕壹,提示符變更為“-bash-4.2$”; #同時(shí)數(shù)據(jù)庫中也會生成一個(gè)名為”postgres”的數(shù)據(jù)庫用戶,且密碼已自動生成;
PostgreSQL在數(shù)據(jù)庫用戶同名的系統(tǒng)賬號下登錄免密树埠;進(jìn)入數(shù)據(jù)庫后修改密碼帐要;
-bash-4.2$ psql -U postgres
postgres=# alter user postgres with password 'postgres@123'
配置文件中,添加訪問(/usr/local/pgsql/data/postgresql.conf)
修改listen_addresses = 'localhost'為listen_addresses = '*'弥奸,允許所有遠(yuǎn)程訪問榨惠;
修改配置文件需要重啟服務(wù)。
手動修改的時(shí)候盛霎,可能配置文件會有點(diǎn)長赠橙,在命令行模式下輸入/listen_addresses 回車,就可以找到了愤炸。
[root@p~]# sed -i "s|#listen_addresses = 'localhost'|listen_addresses = '*'|g" /var/lib/pgsql/10/data/postgre
修改data/pg_hba.conf
trust的意思是用賬戶密碼登錄期揪。
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 0.0.0.0/0 trust
四、防火墻操作
1. 查看防火墻是否關(guān)閉:firewall-cmd --state
2. 啟動服務(wù):systemctl start firewalld.service
3. 關(guān)閉服務(wù):systemctl stop firewalld.service
4. 重啟服務(wù):systemctl restart firewalld.service
5. 顯示服務(wù)的狀態(tài):systemctl status firewalld.service
6. 在開機(jī)時(shí)啟用服務(wù):systemctl enable firewalld.service
7. 在開機(jī)時(shí)禁用服務(wù):systemctl disable firewalld.service
8. 查看服務(wù)是否開機(jī)啟動:systemctl is-enabled firewalld.service;echo $?
9. 查看已啟動的服務(wù)列表:systemctl list-unit-files|grep enabled
10. 添加開發(fā)端口:firewall-cmd --zone=public --add-port=5432/tcp --permanent
11. 重新加載防火墻:firewall-cmd --reload
http://www.reibang.com/p/ee4ee15d3658
五规个、安裝pgdmin4 web客戶端
(我剛開始裝的時(shí)候找個(gè)資料真的難)
打開下載鏈接:https://www.postgresql.org/ftp/
或者https://www.pgadmin.org/download/pgadmin-4-rpm/
建議直接選擇rpm安裝凤薛,簡單省事。
yum list |grep pgadmin4
因?yàn)槲矣眠^web诞仓,也不知道安裝哪一個(gè)缤苫,干脆裝個(gè)web(然后就裝了好大一堆東西,一大堆pgadmini4的python依賴)墅拭。
yum install -y pgadmin4-web.noarch
安裝之后的路徑在:/usr/lib/python2.7/site-packages/pgadmin4-web/
打開pgadmin4
cd /usr/lib/python2.7/site-packages/pgadmin4-web/
python pgAdmin4.py
初次配置pgadmin4:設(shè)置郵箱/密碼(登錄用)
訪問pgadmin4:http://localhost:5050
啟動很麻煩活玲?寫個(gè)腳本就好了
(腳本能用!想關(guān)閉的話,ps -ef |grep pgadmin4 kill -9 +上面列出的第一個(gè)數(shù)字)
cd /usr/lib/python2.7/site-packages/pgadmin4-web/
vim pgadmin4.sh
#添加如下內(nèi)容
#執(zhí)行 i
#!/bin/bash
nohup python /usr/lib/python2.7/site-packages/pgadmin4-web/pgAdmin4.py &
#執(zhí)行esc
#執(zhí)行:wq!
chmod 777 pgadmin4.sh
ln -s /usr/lib/python2.7/site-packages/pgadmin4-web/pgadmin4.sh /usr/local/bin/pgadmin4
#執(zhí)行pgadmin4 就會啟動web客戶端
命令行登錄
$ psql -U dbuser -d exampledb
登錄后的權(quán)限操作參考
https://blog.csdn.net/u010166404/article/details/53188882
其實(shí)很多初學(xué)者也不一定看的懂舒憾。镀钓。
-- 連接命令(最后加上<filepath 就是還原命令,最后說)
-- 用戶U大寫
psql -h 127.0.0.1 -p 5432 -U user_name -d db_name
-- 創(chuàng)建用戶的示例
CREATE USER userName WITH LOGIN NOSUPERUSER NOCREATEDB NOCREATEROLE INHERIT REPLICATION CONNECTION LIMIT -1 password 'pwd';
-- 創(chuàng)建超級用戶
CREATE USER userName WITH SUPERMAN password 'pwd';
-- 創(chuàng)建模式,并分配給userName用戶
CREATE SCHEMA schemaName authorization userName;
-- 更改權(quán)限
ALTER ROLE name SET enable_indexscan TO off;
常用的控制臺命令
\password 設(shè)置密碼
\q 退出
\h 查看SQL命令的解釋镀迂,比如\h select
\? 查看psql命令列表
\l 列出所有數(shù)據(jù)庫
\c [database_name] 連接其他數(shù)據(jù)庫
\d 列出當(dāng)前數(shù)據(jù)庫的所有表格
\d [table_name] 列出某一張表格的結(jié)構(gòu)
\x 對數(shù)據(jù)做展開操作
\du 列出所有用戶
常用的SQL語句
# 創(chuàng)建新表
CREATE TABLE table_name(name VARCHAR(20), birth DATE);
# 插入數(shù)據(jù)
INSERT INTO table_name(name, birth) VALUES('歐文', '1994-08-23');
# 查詢記錄
SELECT * FROM table_name;
# 更新數(shù)據(jù)
UPDATE table_name set name = '勒夫' WHERE name = '歐文';
# 刪除記錄
DELETE FROM table_name WHERE name = '歐文' ;
# 添加字段
ALTER TABLE table_name ADD email VARCHAR(40);
# 更改字段類型
ALTER TABLE table_name ALTER COLUMN birth SET NOT NULL;
# 設(shè)置字段默認(rèn)值(注意字符串使用單引號)
ALTER TABLE table_name ALTER COLUMN email SET DEFAULT 'example@example.com';
# 去除字段默認(rèn)值
ALTER TABLE table_name ALTER email DROP DEFAULT;
# 重命名字段
ALTER TABLE table_name RENAME COLUMN birth TO birthday;
# 刪除字段
ALTER TABLE table_name DROP COLUMN email;
# 表重命名
ALTER TABLE table_name RENAME TO backup_table;
# 刪除表
DROP TABLE IF EXISTS backup_table;
# 刪除庫
\c postgres;
DROP DATABASE IF EXISTS hello;
備份和恢復(fù)
$ pg_dump --format=t -d db_name -U user_name -h 127.0.0.1 -O -W > dump.sql
$ psql -h 127.0.0.1 -U user_name -d db_name < dump.sql
分布式事物
XA是open group提出的分布式事務(wù)處理規(guī)范丁溅,JTA支持XA規(guī)范,JTA只規(guī)定了接口探遵,有些應(yīng)用容器提供實(shí)現(xiàn)窟赏,也有一些三方的開源實(shí)現(xiàn)可用,比如Atomikos别凤。
如果PostgreSQL參與分布式事務(wù)(XA)處理,則需要在配置文件postgres.conf中設(shè)置參數(shù)领虹,此參數(shù)用于指定分布式事務(wù)中兩步提交準(zhǔn)備事務(wù)的最大數(shù)量规哪。默認(rèn)值為0,此時(shí)不支持分布式事務(wù)塌衰。
max_prepared_transactions參數(shù)值不應(yīng)該小于max_connections參數(shù)值诉稍,這樣每一個(gè)session都可以至少有一個(gè)可用的準(zhǔn)備事務(wù)。
max_connections = 100
max_prepared_transactions = 100