CREATE TABLE citus_table(x int primary key, y int);
SELECT create_distributed_table('citus_table', 'x');
CREATE TABLE postgres_table(x int, y int);
-- even though the join is on primary key, there isn't a constant filter
-- hence postgres_table will be sent to worker nodes to support the join
SELECT * FROM citus_table JOIN postgres_table USING (x);
-- there is a constant filter on a primary key, hence the filtered row
-- from the distributed table will be pulled to coordinator to support the join
SELECT * FROM citus_table JOIN postgres_table USING (x) WHERE citus_table.x = 10;
SET citus.local_table_join_policy to 'prefer-distributed';
-- since we prefer distributed tables, citus_table will be pulled to coordinator
-- to support the join. Note that citus_table can be huge.
SELECT * FROM citus_table JOIN postgres_table USING (x);
SET citus.local_table_join_policy to 'prefer-local';
-- even though there is a constant filter on primary key for citus_table
-- postgres_table will be sent to necessary workers because we are using 'prefer-local'.
SELECT * FROM citus_table JOIN postgres_table USING (x) WHERE citus_table.x = 10;
citus.limit_clause_row_fetch_count (integer)
设置每个任务要提取的行数以进行 limit 子句优化。
在某些情况下,包含 limit 子句的 select 查询可能需要从每个任务中提取所有行来生成结果。 在这种情况下,以及当近似值会生成有意义的结果时,此配置值将设置要从每个分片中提取的行数。 默认会禁用 limit 近似值,此参数设置为 -1。 此值可在运行时设置,并在协调器上生效。
citus.count_distinct_error_rate (floating point)
Azure Cosmos DB for PostgreSQL 可以使用 postgresql-hll 扩展计算 count(distinct) 近似值。 在计算 count(distinct) 时,此配置条目将设置所需的错误率。 指定 0.0(默认值)会禁用 count(distinct) 的近似值;指定 1.0 不能保证结果的准确性。 建议将此参数设置为 0.005 以获得最佳结果。 此值可在运行时设置,并在协调器上生效。
citus.task_assignment_policy (enum)
仅当 shard_replication_factor 大于 1 时,此 GUC 才适用;或者,此 GUC 仅适用于针对 reference_tables 运行的查询。
设置将任务分配给工作器时要使用的策略。 协调器基于分片位置将任务分配给工作器。 此配置值指定进行这些分配时要使用的策略。
目前可以使用三个可能的任务分配策略。
贪婪:贪婪策略是默认策略,旨在将任务均匀分配到工作器。
轮循机制:轮循机制策略以轮循方式将任务分配到工作器(在不同的副本之间交替分配)。 当表的分片计数小于工作器数量时,此策略可以提高群集利用率。
首个副本:首个副本策略基于分片的位置(副本)插入顺序分配任务。 换言之,对某个分片的片段查询将分配到包含该分片的第一个副本的工作器。
使用此方法可以在有关要在哪些节点上使用哪些分片方面获得可靠的保证(即,获取更可靠的内存驻留保证)。
此参数可在运行时设置,并在协调器上生效。
无法推送到工作器节点以供执行的 CTE 以及复杂子查询的中间结果的最大大小 (KB)。 默认值为 1 GB,值 -1 表示无限制。
超过限制的查询将被取消并生成错误消息。
执行程序配置
citus.all_modifications_commutative
Azure Cosmos DB for PostgreSQL 强制实施交换性规则,并获取修改操作的相应锁以保证行为的正确性。 例如,假设一个 INSERT 语句可与另一个 INSERT 语句交换,但不可与某个 UPDATE 或 DELETE 语句交换。 同理,假设一个 UPDATE 或 DELETE 语句不可与另一个 UPDATE 或 DELETE 语句交换。 这种防备意味着 UPDATE 和 DELETE 要求 Azure Cosmos DB for PostgreSQL 获取更强的锁。
如果你的 UPDATE 语句可与 INSERT 或其他 UPDATE 语句交换,则你可以通过将此参数设置为 true 来放宽这些交换性假设。 当此参数设置为 true 时,所有命令将被视为可交换并声明一个共享锁,这可以提高总体吞吐量。 此参数可在运行时设置,并在协调器上生效。
citus.remote_task_check_interval (integer)
设置 Azure Cosmos DB for PostgreSQL 检查任务跟踪器执行程序所管理作业的状态的频率。 默认值为 10 毫秒。 协调器将任务分配给工作器,然后定期在工作器上检查每个任务的进度。 此配置值设置每两次后续检查的时间间隔。 此参数在协调器上生效,可在运行时设置。
citus.task_executor_type (enum)
Azure Cosmos DB for PostgreSQL 有三种执行程序类型,用于运行分布式 SELECT 查询。 可以通过设置此配置参数来选择所需的执行程序。 此参数的可接受值为:
adaptive:默认值。 要快速响应涉及到跨多个分片进行聚合与并置联接的查询,这是最佳值。
task-tracker:task-tracker 执行程序非常适合用于需要跨工作器节点随机排布数据的长时间运行的复杂查询,以及实现高效的资源管理。
real-time:(已弃用)与 adaptive 执行程序的作用类似,但灵活性更低,可能会导致工作器节点上的连接压力增大。
此参数可在运行时设置,并在协调器上生效。
citus.multi_task_query_log_level (enum) {#multi_task_logging}
为生成多个任务(即,命中多个分片)的任何查询设置日志级别。 在迁移多租户应用程序期间,日志记录非常有用,因为你可以选择对此类查询显示错误或警告、查找这些查询并对其添加 tenant_id 筛选器。 此参数可在运行时设置,并在协调器上生效。 此参数的默认值为“off”。
此枚举支持的值为:
off:禁用记录任何生成多个任务(即,命中多个分片)的查询
debug:在“调试”严重性级别记录语句。
log:在“日志”严重性级别记录语句。 日志行将包含运行的 SQL 查询。
notice:在“通知”严重性级别记录语句。
warning:在“警告”严重性级别记录语句。
error:在“错误”严重性级别记录语句。
有利的用法可能是在开发测试期间使用 error
,在实际生产部署期间使用更低的日志级别,例如 log
。
选择 log
会导致多任务查询显示在数据库日志中,查询本身显示在“STATEMENT”之后。
LOG: multi-task query about to be executed
HINT: Queries are split to multiple tasks if they have to be split into several queries on the workers.
STATEMENT: select * from foo;
citus.propagate_set_commands(枚举)
确定哪些 SET 命令将从协调器传播到工作器。
该参数的默认值为“none”。
支持的值包括:
none:不传播任何 SET 命令。
local:只传播 SET LOCAL 命令。
citus.create_object_propagation(枚举)
控制受支持对象的事务中 CREATE 语句的行为。
在多语句事务块中创建对象时,Azure Cosmos DB for PostgreSQL 会切换顺序模式,以确保创建的对象对分片上的后续语句可见。 然而,切换到顺序模式并不总是可取的。 通过替代此行为,用户可以在创建新对象时权衡性能,实现完全事务一致性。
此参数的默认值为“immediate”。
支持的值包括:
immediate:在尝试 CREATE TYPE 之前发生诸如 create_distributed_table 之类的并行操作的事务中引发错误。
automatic:在通过分布式表上的并行操作共享事务时延迟创建类型。 在不同节点上存在的数据库对象之间可能存在一些不一致。
deferred:恢复到 11.0 之前的行为,类似于 automatic,但存在其他微妙的极端情况。 建议使用 automatic 设置而不是 deferred,除非需要真正的向后兼容性。
有关此 GUC 的示例,请参阅类型传播。
citus.enable_repartition_joins (boolean)
一般情况下,尝试使用 adaptive 执行程序执行重新分区联接会失败并出现错误消息。 但是,将 citus.enable_repartition_joins
设置为 true 可使 Azure Cosmos DB for PostgreSQL 能够暂时切换到任务跟踪器执行程序来执行联接。 默认值为 false。
citus.enable_repartitioned_insert_select(布尔值)
默认情况下,无法下推的 INSERT INTO … SELECT 语句将尝试从 SELECT 语句重新分区行并在工作器之间转移这些行以进行插入。 但是,如果目标表具有太多分片,则重新分区可能无法正常运行。 确定如何对结果进行分区时,处理分片间隔的开销会很大。
可以通过将设置 citus.enable_repartitioned_insert_select
为 false 来手动禁用重新分区。
citus.enable_binary_protocol(布尔值)
将此参数设置为 true 将指示协调器节点使用 PostgreSQL 的二进制序列化格式(如果适用)通过工作器来传输数据。 某些列类型不支持二进制序列化。
当工作器必须返回大量数据时,启用此参数最有用。 例如:请求许多行时,这些行有很多列,或者它们使用宽类型,例如来自 postgresql-hll 扩展的 hll
。
对于 Postgres 版本 14 和更高版本,默认值为 true。 对于 Postgres 版本 13 及更低版本,默认值为 false,这意味着所有结果都以文本格式编码和传输。
citus.max_adaptive_executor_pool_size(整数)
Max_adaptive_executor_pool_size 限制来自当前会话的工作器连接。 此 GUC 用于:
防止单个后端获取所有工作器资源
提供优先级管理:为低优先级会话指定低的 max_adaptive_executor_pool_size 值,为高优先级会话指定较高值
默认值为 16。
citus.executor_slow_start_interval(整数)
在打开与同一工作器的连接之间等待的时间(以毫秒为单位)。
如果多分片查询的各个任务花费很少时间,它们通常可以通过单个(通常已经缓存的)连接完成。 为避免冗余打开更多连接,执行程序在两次连接尝试之间等待配置的毫秒数。 在时间间隔结束时,会增加允许下次打开的连接数。
对于长查询(超过 500 毫秒的查询),慢启动可能会增加延迟,但对于短查询,它会更快。 默认值为 10 毫秒。
citus.max_cached_conns_per_worker(整数)
每个后端将打开与工作器的连接以查询分片。 在事务结束时,配置的连接数保持打开状态,以加快后续命令的速度。 增加此值将缩短多分片查询的延迟时间,但会增加工作器的开销。
默认值为 1。 对于使用少量并发会话的集群,较大的值(例如 2)可能会有所帮助,但不应该更进一步增大(例如,16 会太高)。
citus.force_max_query_parallelization(布尔值)
模拟已弃用且现在不存在的实时执行程序。 这用于打开尽可能多的连接以最大化查询并行化。
启用此 GUC 后,Azure Cosmos DB for PostgreSQL 将强制自适应执行程序在执行并行分布式查询时使用尽可能多的连接。 如果未启用,执行程序可能会选择使用更少的连接来优化整体查询执行吞吐量。 在内部,将此设置为 true 最终将导致每个任务使用一个连接。
这在下面的情况下很有用:事务的第一个查询是轻量级的,需要很少的连接,而后续查询需要更多的连接才能获得优势。 Azure Cosmos DB for PostgreSQL 根据第一条语句决定在事务中使用多少连接,除非我们使用 GUC 提供提示,否则这会限制其他查询。
BEGIN;
-- add this hint
SET citus.force_max_query_parallelization TO ON;
-- a lightweight query that doesn't require many connections
SELECT count(*) FROM table WHERE filter = x;
-- a query that benefits from more connections, and can obtain
-- them since we forced max parallelization above
SELECT ... very .. complex .. SQL;
COMMIT;
默认值为 false。
任务跟踪器执行程序配置
citus.task_tracker_delay (integer)
此参数设置每完成一个任务管理轮次后任务跟踪器的睡眠时间,默认值为 200 毫秒。 任务跟踪器进程定期唤醒,逐个查看分配给它的所有任务,然后计划并执行这些任务。 然后,任务跟踪器将睡眠一段时间,唤醒后再次逐个查看这些任务。
此配置值确定睡眠时长。 此参数在工作器上生效,需要在 postgresql 文件中进行更改。 编辑配置文件后,用户可以发送 SIGHUP 信号或重启服务器,使更改生效。
可以减小此参数,以通过减少管理轮次之间的时间差来缩减任务跟踪器执行程序造成的延迟。
如果分片查询较短,因而会定期更新其状态,则降低延迟会很有作用。
citus.max_assign_task_batch_size (integer)
协调器上的任务跟踪器执行程序以同步方式将任务分批分配到工作器上的守护程序。 此参数设置可在一个批中分配的最大任务数。 选择较大的批大小可以加快任务分配。 但是,如果工作器数量很大,则所有工作器可能需要花费更长的时间来获取任务。 此参数可在运行时设置,并在协调器上生效。
citus.max_running_tasks_per_node (integer)
任务跟踪器进程将会适当地计划并执行分配给它的任务。 此配置值设置在任意给定时间,在一个节点上可并发执行的最大任务数,默认值为 8。
该限制可确保不会有许多任务同时命中磁盘,并有助于避免磁盘 I/O 争用。 如果从内存或 SSD 为查询提供服务,则你可以放心地增大 max_running_tasks_per_node。
citus.partition_buffer_size (integer)
设置用于分区操作的缓冲区大小,默认值为 8 MB。
Azure Cosmos DB for PostgreSQL 允许在联接两个大型表时将表数据重新分区到多个文件中。 填满此分区缓冲区后,已重新分区的数据将刷新到磁盘上的文件中。 此配置条目可在运行时设置,并在工作器上生效。
Explain 输出
citus.explain_all_tasks (boolean)
默认情况下,对分布式查询运行 EXPLAIN 时,Azure Cosmos DB for PostgreSQL 将显示单个任意任务的输出。 在大多数情况下,explain 输出在各个任务中都是类似的。 偶尔会以不同的方式规划某些任务,或者某些任务的执行时间要长得多。 在这种情况下,启用此参数会很有用,EXPLAIN 输出会在此参数之后包括所有任务。 解释所有任务可能会导致 EXPLAIN 花费更长的时间。
citus.explain_analyze_sort_method(枚举)
确定 EXPLAIN ANALYZE 输出中任务的排序方法。 citus.explain_analyze_sort_method
的默认值为 execution-time
。
支持的值包括:
execution-time:按执行时间排序。
taskId:按任务 ID 排序。
PostgreSQL 参数
DateStyle - 设置日期和时间值的显示格式
IntervalStyle - 设置间隔值的显示格式
TimeZone - 设置用于显示和解释时间戳的时区
application_name - 设置要在统计信息和日志中报告的应用程序名称
array_nulls - 在数组中启用 NULL 元素输入
autovacuum - 启动 autovacuum 子进程
autovacuum_analyze_scale_factor - 在将元组作为 reltuples 的分数进行分析之前所要达到的元组插入、更新或删除次数
autovacuum_analyze_threshold - 在分析元组之前所要达到的元组插入、更新或删除最小次数
autovacuum_naptime - 每两次 autovacuum 运行之间的睡眠时间
autovacuum_vacuum_cost_delay - autovacuum 的清空成本延迟,以毫秒为单位
autovacuum_vacuum_cost_limit - autovacuum 在短暂睡眠之前可用的清空成本量
autovacuum_vacuum_scale_factor - 在将元组作为 reltuples 的分数清空之前所要达到的元组更新或删除次数
autovacuum_vacuum_threshold - 在清空之前所要达到的元组更新或删除次数
autovacuum_work_mem - 设置每个 autovacuum 工作进程要使用的最大内存
backend_flush_after - 在将以前执行的写入刷新到磁盘之前所要达到的页数
backslash_quote - 设置字符串字面量中是否允许“'”
bgwriter_delay - 每两个轮次之间的后台写入器休眠时间
bgwriter_flush_after - 在将以前执行的写入刷新到磁盘之前所要达到的页数
bgwriter_lru_maxpages - 要在每个轮次刷新的后台写入器最大 LRU 页数
bgwriter_lru_multiplier - 要在每个轮次释放的平均缓冲区使用量的倍数
bytea_output - 设置 bytea 的输出格式
check_function_bodies - 在运行 CREATE FUNCTION 期间检查函数主体
checkpoint_completion_target - 在运行检查点函数期间将脏缓冲区作为检查点间隔的分数进行刷新所花费的时间
checkpoint_timeout - 设置自动 WAL 检查点之间的最大时间
checkpoint_warning - 如果填充检查点段的频率高于此值,则启用警告
client_encoding - 设置客户端的字符集编码
client_min_messages - 设置发送到客户端的消息级别
commit_delay - 设置提交事务与将 WAL 刷新到磁盘之间的延迟,以微秒为单位
commit_siblings - 设置执行 commit_delay 之前所要达到的最小并发打开事务数
constraint_exclusion - 允许规划器使用约束来优化查询
cpu_index_tuple_cost - 设置规划器对索引扫描期间每个索引条目的处理成本的估算值
cpu_operator_cost - 设置规划器对每个运算符或函数调用的处理成本的估算值
cpu_tuple_cost - 设置规划器对每个元组(行)的处理成本的估算值
cursor_tuple_fraction - 设置规划器对要检索的游标行的分数的估算值
deadlock_timeout - 设置在检查死锁之前等待某个锁的时长,以毫秒为单位
debug_pretty_print - 缩进分析和计划树的显示内容
debug_print_parse - 记录每个查询的分析树
debug_print_plan - 记录每个查询的执行计划
debug_print_rewritten - 记录每个查询的重写分析树
default_statistics_target - 设置默认的统计目标
default_tablespace - 设置要在其中创建表和索引的默认表空间
default_text_search_config - 设置默认文本搜索配置
default_transaction_deferrable - 设置新事务的默认可推迟状态
default_transaction_isolation - 设置每个新事务的事务隔离级别
default_transaction_deferrable - 设置新事务的默认只读状态
default_with_oids - 默认创建使用 OID 的新表
effective_cache_size - 设置规划器对磁盘缓存大小做出的假设
enable_bitmapscan - 允许规划器使用位图扫描计划
enable_gathermerge - 允许规划器使用收集合并计划
enable_hashagg - 允许规划器使用哈希聚合计划
enable_hashjoin - 允许规划器使用哈希联接计划
enable_indexonlyscan - 允许规划器使用仅限索引的扫描计划
enable_indexscan - 允许规划器使用索引扫描计划
enable_material - 允许规划器使用具体化
enable_mergejoin - 允许规划器使用合并联接计划
enable_nestloop - 允许规划器使用嵌套循环联接计划
enable_seqscan - 允许规划器使用顺序扫描计划
enable_sort - 允许规划器使用显式排序步骤
enable_tidscan - 允许规划器使用 TID 扫描计划
escape_string_warning - 警告普通字符串字面量中存在反斜杠转义符
exit_on_error - 发生任何错误时终止会话
extra_float_digits - 设置要为浮点值显示的位数
force_parallel_mode - 强制使用并行查询工具
from_collapse_limit - 设置 FROM 列表大小,超过该大小时将不会折叠子查询
geqo - 启用基因查询优化
geqo_effort - GEQO:为其他 GEQO 参数设置默认值所付出的工作量
geqo_generations - GEQO:算法的迭代次数
geqo_pool_size - GEQO:种群中的个体数目
geqo_seed - GEQO:用于选择随机路径的种子
geqo_selection_bias - GEQO:种群内部的选择性压力
geqo_threshold - 设置 FROM 项的阈值,超过该阈值时会使用 GEQO
gin_fuzzy_search_limit - 设置按 GIN 进行的精确匹配搜索允许的最大结果数
gin_pending_list_limit - 设置 GIN 索引待定列表的最大大小
idle_in_transaction_session_timeout - 设置任何空闲事务允许的最大持续时间
join_collapse_limit - 设置 FROM 列表的大小,超过该大小时将不平展 JOIN 构造
lc_monetary - 设置用于指定货币金额格式的区域设置
lc_numeric - 设置用于指定数字格式的区域设置
lo_compat_privileges - 为针对大型对象的特权检查启用向后兼容模式
lock_timeout - 设置任何等待锁操作允许的最长持续时间(以毫秒为单位)。 指定 0 会禁用此设置
log_autovacuum_min_duration - 设置最短执行时间,超过该时间将将记录 autovacuum 操作
log_checkpoints - 记录每个检查点
log_connections - 记录每个成功的连接
log_destination - 设置服务器日志输出的目标
log_disconnections - 记录会话结束时间,包括持续时间
log_duration - 记录每个已完成 SQL 语句的持续时间
log_error_verbosity - 设置记录的消息的详细程度
log_lock_waits - 记录长时间的锁等待
log_min_duration_statement - 设置最短执行时间(以毫秒为单位),超过该时间后将记录语句。 指定 -1 会禁用记录语句持续时间
log_min_error_statement - 导致记录在此级别或更高级别生成错误的所有语句
log_min_messages - 设置记录的消息级别
log_replication_commands - 记录每个复制命令
log_statement - 设置记录的语句类型
log_statement_stats - 对于每个查询,将累积性能统计信息写入服务器日志
log_temp_files - 对使用超过此数字(以 KB 为单位)的临时文件的情况进行日志记录
maintenance_work_mem - 设置要用于维护操作的最大内存
max_parallel_workers - 设置每次可处于活动状态的并行工作进程的最大数目
max_parallel_workers_per_gather - 设置每个执行程序节点的最大并行进程数
max_pred_locks_per_page - 设置每页的谓词锁定元组的最大数目
max_pred_locks_per_relation - 设置每个关系的谓词锁定页和元组的最大数目
max_standby_archive_delay - 设置当热备用服务器处理存档的 WAL 数据时,在取消查询之前的最大延迟
max_standby_streaming_delay - 设置当热备用服务器处理流式传输的 WAL 数据时,在取消查询之前的最大延迟
max_sync_workers_per_subscription - 每个订阅的表同步工作进程的最大数目
max_wal_size - 设置触发检查点的 WAL 大小
min_parallel_index_scan_size - 设置并行扫描的最小索引数据量
min_wal_size - 设置要将 WAL 收缩到的最小大小
operator_precedence_warning - 针对自 PostgreSQL 9.4 以来其含义已发生更改的构造发出警告
parallel_setup_cost - 设置对并行查询启动工作进程的成本的规划器估算值
parallel_tuple_cost - 设置将每个元组(行)从工作器端传递给主后端的成本的规划器估算值
pg_stat_statements.save - 每次服务器关机后保存 pg_stat_statements 统计信息
pg_stat_statements.track - 选择 pg_stat_statements 要跟踪的语句
pg_stat_statements.track_utility - 选择 pg_stat_statements 是否要跟踪实用工具命令
quote_all_identifiers - 生成 SQL 片段时将所有标识符括在引号中
random_page_cost - 设置不按顺序提取的磁盘页的成本的规划器估计值
row_security - 启用行安全性
search_path - 设置非架构限定的名称的架构搜索顺序
seq_page_cost - 设置按顺序提取的磁盘页的成本的规划器估计值
session_replication_role - 设置会话对触发器和重写规则的行为
standard_conforming_strings - 导致“...”字符串以字面形式处理反斜杠
statement_timeout - 设置任何语句允许的最长持续时间(以毫秒为单位)。 指定 0 会禁用此设置
synchronize_seqscans - 启用同步顺序扫描
synchronous_commit - 设置当前事务的同步级别
tcp_keepalives_count - TCP keepalive 重新传输的最大次数
tcp_keepalives_idle - 发出 TCP keepalive 的间隔时间
tcp_keepalives_interval - TCP keepalive 重新传输的间隔时间
temp_buffers - 设置每个数据库会话使用的临时缓冲区的最大数目
temp_tablespaces - 设置用于临时表和排序文件的表空间
track_activities - 收集有关执行命令的信息
track_counts - 收集有关数据库活动的统计信息
track_functions - 收集有关数据库活动的函数级统计信息
track_io_timing - 收集数据库 I/O 活动的计时统计信息
transform_null_equals - 将“expr=NULL”视为“expr IS NULL”
vacuum_cost_delay - 清空成本延迟,以毫秒为单位
vacuum_cost_limit - 在短暂睡眠之前可用的清空成本量
vacuum_cost_page_dirty - 被清空进程弄脏的页的清空成本
vacuum_cost_page_hit - 在缓冲区缓存中找到的页的清空成本
vacuum_cost_page_miss - 在缓冲区缓存中找不到的页的清空成本
vacuum_defer_cleanup_age - VACUUM 和 HOT 清理应推迟的事务数(如果有)
vacuum_freeze_min_age - 在 VACUUM 冻结表行之前所要达到的最短期限
vacuum_freeze_table_age - 在 VACUUM 扫描整个表以冻结元组之前所要达到的期限
vacuum_multixact_freeze_min_age - 在 VACUUM 冻结表行中的 MultiXactId 之前所要达到的最短期限
vacuum_multixact_freeze_table_age - 在 VACUUM 扫描整个表以冻结元组之前所要达到的 Multixact 期限
wal_receiver_status_interval - 设置向主要节点报告 WAL 接收器状态的最大时间间隔
wal_writer_delay - 在 WAL 写入器中执行 WAL 刷新的间隔时间
wal_writer_flush_after - WAL 写入器写出的 WAL 数量,达到该数量将触发刷新
work_mem - 设置写入到临时磁盘文件之前内部排序操作和哈希表要使用的内存量
xmlbinary - 设置如何在 XML 中对二进制值进行编码
xmloption - 设置是要将隐式分析和序列化操作中的 XML 数据视为文档还是内容片段
除服务器参数外,另一种形式的配置也是群集中的资源配置选项。
底层 PostgreSQL 数据库也有配置参数。