docker安裝Postgresql數(shù)據(jù)庫及基本操作
單機
# 創(chuàng)建映射目錄 mkdir /data/postgresql/data # 啟動容器 docker run -d -p 5432:5432 --restart=always -v /data/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 --name postgres postgres:14 # 修改配置文件/data/postgresql/data/postgresql.conf # 設置時區(qū) timezone = 'Asia/Shanghai' # 連接數(shù) max_connections = 1000
集群
主機
# 創(chuàng)建映射目錄 mkdir /data/postgresql/data # 啟動容器 docker run -d -p 5432:5432 -v /data/postgresql/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=123456 --name postgres_master postgres:14 # 修改vi /data/postgresql/data/pg_hba.conf,允許從機復制 host replication all 192.168.0.12/32 trust host replication all 193.168.0.13/32 trust # 修改vi /data/postgresql/data/postgresql.conf # 啟用歸檔模式,允許數(shù)據(jù)庫將 WAL(Write-Ahead Logging)日志文件存檔。 archive_mode = on # 連接數(shù) max_connections = 500 # 設置時區(qū) timezone = 'Asia/Shanghai' # 重啟容器 docker restart postgres_master
從機
# 啟動容器,注意這里沒有進行數(shù)據(jù)卷掛載,因為后面要刪除數(shù)據(jù)將主節(jié)點數(shù)據(jù)同步過來 docker run -d -p 5432:5432 -e POSTGRES_PASSWORD=123456 -v /data/postgresql/data:/var/lib/postgresql/data --name postgres_slave1 postgres:14 # 進入容器 docker exec -it postgres_slave1 bash # 刪除數(shù)據(jù),并將主節(jié)點數(shù)據(jù)同步過來(注意-h后面跟著的是主節(jié)點ip,-U后面是主節(jié)點創(chuàng)建的用于復制的用戶名,需要輸入密碼時就是用于復制的用戶名的密碼) rm -rf /var/lib/postgresql/data/* && pg_basebackup -h 192.168.0.11 -p 5432 -U postgres -Fp -Xs -Pv -R -D /var/lib/postgresql/data # 數(shù)據(jù)同步后容器會關閉。再啟動即可 docker restart postgres_slave1 # 修改文件vi /data/postgresql/data/postgresql.conf # 配置主庫ip地址以及端口號,以及用于復制的用戶名和密碼 primary_conninfo = 'host=192.168.0.11 port=5432 user=postgres password=123456' # 在恢復期間允許查詢。這是在流復制過程中,從庫在進行 WAL 日志恢復的同時允許查詢讀取。 # 從機只讀 hot_standby = on # 設置恢復的目標時間線。在這里,設置為 latest 表示從庫將一直嘗試連接到主庫的最新時間線上。 recovery_target_timeline = latest # 必須大于主節(jié)點的連接數(shù)。這確保從庫可以處理主庫發(fā)送的所有連接請求。 max_connections = 1000 # 設置時區(qū) timezone = 'Asia/Shanghai' # 重啟從庫 docker restart postgres_slave1 # 校驗,在主機執(zhí)行sql select * from pg_stat_replication;
從機2
重復從機1的操作
Pgpool
負載均衡,讀寫分離
docker run -d -p 9999:5432 --name pgpool \ --env PGPOOL_BACKEND_NODES=0:192.168.0.11:5432,1:192.168.0.12:5432,2:192.168.0.13:5432 \ --env PGPOOL_SR_CHECK_USER=postgres \ --env PGPOOL_SR_CHECK_PASSWORD=123456 \ --env PGPOOL_ENABLE_LDAP=no \ --env PGPOOL_POSTGRES_USERNAME=postgres \ --env PGPOOL_POSTGRES_PASSWORD=123456 \ --env PGPOOL_ADMIN_USERNAME=postgres \ --env PGPOOL_ADMIN_PASSWORD=123456 \ --env PGPOOL_USERNAME=postgres \ --env PGPOOL_PASSWORD=123456 \ --env PGPOOL_AUTHENTICATION_METHOD=scram-sha-256 \ pgpool
postgresql角色權限設置
-- 創(chuàng)建賬號 CREATE ROLE admin WITH LOGIN PASSWORD '123456' NOSUPERUSER NOCREATEDB NOCREATEROLE; -- 給角色/賬號訪問數(shù)據(jù)庫的權限 GRANT ALL PRIVILEGES ON DATABASE testDb TO admin; -- 設置所有schema的訪問權限 DO $$ DECLARE schema_name TEXT; BEGIN FOR schema_name IN SELECT nspname FROM pg_namespace WHERE nspname NOT IN ('pg_catalog', 'information_schema') LOOP EXECUTE format('GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA %I TO admin;', schema_name); EXECUTE format('GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA %I TO admin;', schema_name); EXECUTE format('GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA %I TO admin;', schema_name); END LOOP; END $$; -- 解綁所有schema的訪問權限 DO $$ DECLARE schema_name TEXT; BEGIN FOR schema_name IN SELECT nspname FROM pg_namespace WHERE nspname NOT IN ('pg_catalog', 'information_schema') LOOP EXECUTE format('REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA %I FROM admin;', schema_name); EXECUTE format('REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA %I FROM admin;', schema_name); EXECUTE format('REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA %I FROM admin;', schema_name); END LOOP; END $$; -- 設置默認權限,新創(chuàng)建的表都屬于這個角色/賬號 DO $$ DECLARE schema_name TEXT; BEGIN FOR schema_name IN SELECT nspname FROM pg_namespace WHERE nspname NOT IN ('pg_catalog', 'information_schema') LOOP EXECUTE format('ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT ALL ON TABLES TO admin;', schema_name); EXECUTE format('ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT ALL ON SEQUENCES TO admin', schema_name); EXECUTE format('ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT ALL ON FUNCTIONS TO admin', schema_name); END LOOP; END $$; -- 查詢角色/賬號可以連接的數(shù)據(jù)庫 SELECT datname FROM pg_database WHERE has_database_privilege('admin', datname, 'CONNECT'); -- 解綁連接其他數(shù)據(jù)庫 REVOKE CONNECT ON DATABASE postgres FROM PUBLIC; -- 查詢數(shù)據(jù)庫所綁定的角色/用戶 SELECT datacl FROM pg_database WHERE datname = 'testDb'; -- 刪除角色/賬號 DROP OWNED BY admin;
總結
到此這篇關于docker安裝Postgresql數(shù)據(jù)庫及基本操作的文章就介紹到這了,更多相關docker安裝pg數(shù)據(jù)庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
PostgreSQL數(shù)據(jù)庫命令行執(zhí)行SQL腳本的三種方式
生成環(huán)境中,出于安全性等原因,往往不提供數(shù)據(jù)庫連接工具,所以對數(shù)據(jù)庫的更新和升級就得通過命令行來實現(xiàn),本文總結了三種命令行執(zhí)行sql腳本的方式,需要的朋友可以參考下2024-02-02postgresql 切換 log、xlog日志的實現(xiàn)
這篇文章主要介紹了postgresql 切換 log、xlog日志的實現(xiàn)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01postgresql 實現(xiàn)查詢某時間區(qū)間的所有日期案例
這篇文章主要介紹了postgresql 實現(xiàn)查詢某時間區(qū)間的所有日期案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01PostgreSQL中date_trunc函數(shù)的語法及一些示例
這篇文章主要給大家介紹了關于PostgreSQL中date_trunc函數(shù)的語法及一些示例的相關資料,DATE_TRUNC函數(shù)是PostgreSQL數(shù)據(jù)庫中用于截斷日期部分的函數(shù),文中通過代碼介紹的非常詳細,需要的朋友可以參考下2024-04-04詳解PostgreSQL中實現(xiàn)數(shù)據(jù)透視表的三種方法
數(shù)據(jù)透視表(Pivot Table)是進行數(shù)據(jù)匯總、分析、瀏覽和展示的強大工具,可以幫助我們了解數(shù)據(jù)中的對比情況、模式和趨勢,是數(shù)據(jù)分析師和運營人員必備技能之一,本給大家介紹PostgreSQL中實現(xiàn)數(shù)據(jù)透視表的三種方法,需要的朋友可以參考下2024-04-04如何在Neo4j與PostgreSQL間實現(xiàn)高效數(shù)據(jù)同步
本文詳細介紹了如何在Neo4j與PostgreSQL兩種數(shù)據(jù)庫之間實現(xiàn)高效數(shù)據(jù)同步,從基礎概念到全量與增量同步的實現(xiàn)策略,結合具體代碼與實踐案例,為開發(fā)者提供了全面的指導,感興趣的朋友跟隨小編一起看看吧2024-12-12基于PostgreSQL pg_hba.conf 配置參數(shù)的使用說明
這篇文章主要介紹了基于PostgreSQL pg_hba.conf 配置參數(shù)的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01postgresql varchar字段regexp_replace正則替換操作
這篇文章主要介紹了postgresql varchar字段regexp_replace正則替換操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01