安装
安装 PostgreSQL 扩展
Pigsty 依托标准的操作系统包管理器(yum/apt)来安装 PostgreSQL 扩展。
快速开始
为集群 pg-meta
安装在 pg_extensions
参数中明确指定的所有扩展:
all:
children:
pg-meta:
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
vars:
pg_cluster: pg-meta
pg_extensions: # 要在此集群上安装的扩展
- timescaledb timescaledb_toolkit pg_timeseries periods temporal_tables emaj table_version pg_cron pg_task pg_later pg_background
- postgis pgrouting pointcloud pg_h3 q3c ogr_fdw geoip pg_polyline pg_geohash #mobilitydb
- pgvector vchord pgvectorscale pg_vectorize pg_similarity smlar pg_summarize pg_tiktoken pg4ml #pgml
- pg_search pgroonga pg_bigm zhparser pg_bestmatch vchord_bm25 hunspell
- citus hydra pg_analytics pg_duckdb pg_mooncake duckdb_fdw pg_parquet pg_fkpart pg_partman plproxy #pg_strom
- age hll rum pg_graphql pg_jsonschema jsquery pg_hint_plan hypopg index_advisor pg_plan_filter imgsmlr pg_ivm pg_incremental pgmq pgq pg_cardano omnigres #rdkit
- pg_tle plv8 pllua plprql pldebugger plpgsql_check plprofiler plsh pljava #plr #pgtap #faker #dbt2
- pg_prefix pg_semver pgunit pgpdf pglite_fusion md5hash asn1oid roaringbitmap pgfaceting pgsphere pg_country pg_xenophile pg_currency pg_collection pgmp numeral pg_rational pguint pg_uint128 hashtypes ip4r pg_uri pgemailaddr pg_acl timestamp9 chkpass #pg_duration #debversion #pg_rrule
- pg_gzip pg_bzip pg_zstd pg_http pg_net pg_curl pgjq pgjwt pg_smtp_client pg_html5_email_address url_encode pgsql_tweaks pg_extra_time pgpcre icu_ext pgqr pg_protobuf envvar floatfile pg_readme ddl_historization data_historization pg_schedoc pg_hashlib pg_xxhash shacrypt cryptint pg_ecdsa pgsparql
- pg_idkit pg_uuidv7 permuteseq pg_hashids sequential_uuids topn quantile lower_quantile count_distinct omnisketch ddsketch vasco pgxicor tdigest first_last_agg extra_window_functions floatvec aggs_for_vecs aggs_for_arrays pg_arraymath pg_math pg_random pg_base36 pg_base62 pg_base58 pg_financial
- pg_repack pg_squeeze pg_dirtyread pgfincore pg_cooldown pg_ddlx pg_prioritize pg_checksums pg_readonly pg_upless pg_permissions pgautofailover pg_catcheck preprepare pgcozy pg_orphaned pg_crash pg_cheat_funcs pg_fio pg_savior safeupdate pg_drop_events table_log #pgagent #pgpool
- pg_profile pg_tracing pg_show_plans pg_stat_kcache pg_stat_monitor pg_qualstats pg_store_plans pg_track_settings pg_wait_sampling system_stats pg_meta pgnodemx pg_sqlog bgw_replstatus pgmeminfo toastinfo pg_explain_ui pg_relusage pagevis powa
- passwordcheck supautils pgsodium pg_vault pg_session_jwt pg_anon pg_tde pgsmcrypto pgaudit pgauditlogtofile pg_auth_mon credcheck pgcryptokey pg_jobmon logerrors login_hook set_user pg_snakeoil pgextwlist pg_auditor sslutils pg_noset
- wrappers multicorn odbc_fdw jdbc_fdw mysql_fdw tds_fdw sqlite_fdw pgbouncer_fdw mongo_fdw redis_fdw pg_redis_pubsub kafka_fdw hdfs_fdw firebird_fdw aws_s3 log_fdw #oracle_fdw #db2_fdw
- documentdb orafce pgtt session_variable pg_statement_rollback pg_dbms_metadata pg_dbms_lock pgmemcache #pg_dbms_job #wiltondb
- pglogical pglogical_ticker pgl_ddl_deploy pg_failover_slots db_migrator wal2json wal2mongo decoderbufs decoder_raw mimeo pg_fact_loader pg_bulkload #repmgr
或者通过类别别名全局安装所有扩展:
all:
vars:
pg_version: 17 # 默认 postgres 版本 17,所以 pgsql-main 等同于 pg17-main
pg_extensions: [ pgsql-main ,pgsql-time ,pgsql-gis ,pgsql-rag ,pgsql-fts ,pgsql-olap ,pgsql-feat ,pgsql-lang ,pgsql-type ,pgsql-util ,pgsql-func ,pgsql-admin ,pgsql-stat ,pgsql-sec ,pgsql-fdw ,pgsql-sim ,pgsql-etl]
您也可以在这些别名中明确指定 PG 主版本:
all:
vars:
pg_extensions: [pg17-time ,pg17-gis ,pg17-rag ,pg17-fts ,pg17-feat ,pg17-lang ,pg17-type ,pg17-util ,pg17-func ,pg17-admin ,pg17-stat ,pg17-sec ,pg17-fdw ,pg17-sim ,pg17-etl ] #,pg17-olap]
同时安装所有扩展是可行的(除了在 olap
类别中的两个冲突)但不推荐。只需在 pg_extensions
参数中明确指定您需要的扩展。
配置
在 PGSQL 集群初始化期间,Pigsty 将自动安装在 pg_packages
和 pg_extensions
中指定的包(和别名)。
这两个参数都可以用来安装 PostgreSQL 相关的包。通常,pg_packages
用于全局指定应在环境中所有 PostgreSQL 集群上安装的包:如 PostgreSQL 内核、高可用代理(如 Patroni)、连接池(pgBouncer)、监控(pgExporter)等。
默认情况下,Pigsty 还在这里指定了 3 个重要扩展:pgvector
、pg_repack
和 wal2json
,分别用于向量搜索、膨胀管理和 CDC 变更提取。
同时,pg_extensions
通常用于为特定集群指定扩展。默认值是一个空列表,表示默认不会安装其他扩展。
pg_packages: # 要安装的 pg 包,可以使用别名,状态=present
- postgresql
- wal2json pg_repack pgvector
- patroni pgbouncer pgbackrest pg_exporter pgbadger vip-manager
pg_extensions: [] # 要安装的 pg 扩展,可以使用别名,状态=latest
一个重要的区别:通过 pg_packages
安装的包只确保存在,而通过 pg_extensions
安装的包会自动升级到最新可用版本。
当使用本地软件仓库时,这个区别并不重要。但是,当使用上游互联网仓库时,请仔细考虑这一点,并将您不希望自动升级的扩展移至 pg_packages
。
安装
在 pg_extensions
(和 pg_packages
)中预定义的扩展将在集群置备期间安装。
要在已置备的 PostgreSQL 集群上安装新扩展:
首先,将扩展添加到 pg_extensions
,然后执行 playbook 子任务:
./pgsql.yml -t pg_extension # 安装在 pg_extensions 中指定的扩展
注意,在 pg_extension
任务中指定的扩展插件默认将升级到您当前环境中的最新可用版本。
仓库
要安装扩展,您需要确保满足以下条件之一:
- 本地仓库:您已配置使用 Pigsty 的本地仓库,并且扩展已经下载到本地仓库。
- 在线仓库:您已在目标节点上直接配置了上游互联网仓库,并且这些节点上有互联网访问。
对于生产环境,我们建议使用 Pigsty 的本地软件仓库来统一管理和安装扩展:首先将扩展下载到本地仓库,然后从那里安装它们。 这确保了您环境中扩展版本的一致性,并防止数据库节点直接访问互联网。从本地仓库安装时您无需做任何事情,只需确保它们已下载到本地仓库。
对于开发环境,您可以选择直接使用上游互联网仓库以便于操作。使用以下命令在目标集群上添加互联网仓库并直接安装扩展:
./node.yml -l <cls> -t node_repo -e node_repo_modules=local,node,pgsql # 在目标节点上启用互联网仓库
./pgsql.yml -l <cls> -t pg_extension # 使用本地+互联网上游仓库安装扩展
包别名
在安装扩展时,用户可以使用扩展别名来指定扩展。
别名将被转换为当前活跃的 PG 主版本和操作系统环境。
并通过别名转换机制转换为相应的 RPM/DEB 包名称。
注意事项
- 有两个已知冲突:
citus
和hydra
是互斥的,因为 hydra 是 citus columnar 的分支,未重命名- 只从
pg_duckdb
、pg_mooncake
、duckdb_fdw
中安装一个,它们都使用自己的 libduckdb
pgaudit
在 el 系统的 pg 15- 版本中有不同的命名模式:pg16+ = pgaudit,pg15=pgaudit17,pg14=pgaudit16,pg13=pgaudit15,pg12=pgaudit14postgis
在 el 包名中有自己的版本:默认为 postgis35,遗留 el7 为 postgis33