管理 PostgreSQL 中配置参数的各种方法

管理 PostgreSQL 中配置参数的各种方法

1. 概述

PostgreSQL提供了一个配置文件 postgresql.conf 让用户自定义参数。您可能需要更改一些参数来调整性能或在工作环境中部署 PostgreSQL 服务器。在这篇博文中,我们将探索管理这些参数的不同方法。

2. 以不同方式管理参数

PostgreSQL 支持各种参数,允许用户在全局(针对整个集群)或本地(针对一个特定会话、数据库等)自定义行为。这些参数主要分为五种类型:布尔型、字符串型、整数型、浮点型、枚举型。此外,所有参数名称都不区分大小写。现在,让我们通过示例探讨如何以四种不同的方式管理参数。

2.1.更改配置文件中的参数

这是一种自定义服务器的简单方法,大多数用户在第一次使用 PostgreSQL 时通常会使用它。例如,如果您想在端口 5433 而不是默认端口 5432 上启动 PostgreSQL,您可以取消注释 postgresql.conf 文件中的 #port = 5432行 ,将 5432 更改为 5433 ,或者简单地将新行 port = 5433 添加到文件末尾。请记住,如果同一参数存在重复配置PostgreSQL 将始终使用配置文件中找到的最后一个值

2.2. 通过 SQL 更改参数

PostgreSQL 提供了三个 SQL 命令来更改不同范围内的参数:ALTER SYSTEM、ALTER DATABASE 和 ALTER ROLE。

  • ALTER SYSTEM 更改全局默认设置并将其保留到 postgresql.auto.conf 中。这些更改将在下次启动时应用。

    以下是使用 ALTER SYSTEM 更改日志消息输出级别的示例:

postgres=# ALTER SYSTEM SET log_min_messages='debug2';
ALTER SYSTEM

postgres=# show log_min_messages;
 log_min_messages 
------------------
 warning
(1 row)

重新启动 PostgreSQL 服务器后,如果跟踪日志消息并手动发出 CHECKPOINT,您应该会看到消息更改为 debug2。

$ tail -f logfile
... ...
2023-09-22 12:45:28.137 PDT [4102315] LOG:  checkpoint starting: immediate force wait
2023-09-22 12:45:28.137 PDT [4102315] DEBUG:  performing replication slot checkpoint
2023-09-22 12:45:28.147 PDT [4102315] DEBUG:  snapshot of 0+0 running transaction ids (lsn 0/154ACE0 oldest xid 741 latest complete 740 next xid 741)
2023-09-22 12:45:28.150 PDT [4102315] DEBUG:  attempting to remove WAL segments older than log file 000000000000000000000000
2023-09-22 12:45:28.151 PDT [4102315] DEBUG:  SlruScanDirectory invoking callback on pg_subtrans/0000
2023-09-22 12:45:28.151 PDT [4102315] LOG:  checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.001 s, total=0.014 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=0 kB; lsn=0/154ACE0, redo lsn=0/154ACA8
  • ALTER DATABASE 命令更改每个数据库的全局默认设置。要体验此命令,首先删除 postgresql.auto.conf 以删除之前的更改并重新启动 PostgreSQL 服务器,然后运行以下命令。您应该只看到带有 DEBUG 级别消息的数据库 db2 相关操作。
postgres=# CREATE DATABASE db2;
CREATE DATABASE

postgres=# \c db2;
You are now connected to database "db2" as user "david".

db2=# ALTER DATABASE db2 SET log_min_messages='debug5';
ALTER DATABASE

db2=# select * from pg_db_role_setting;
 setdatabase | setrole |         setconfig         
-------------+---------+---------------------------
       16384 |       0 | {log_min_messages=debug5}
(1 row)

连接到 PostgreSQL,然后输入 postgres=# checkpoint ; 。您将看到如下消息,但没有调试信息。

2023-09-22 13:37:20.158 PDT [4102722] LOG:  checkpoint starting: immediate force wait
2023-09-22 13:37:20.179 PDT [4102722] LOG:  checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.001 s, sync=0.001 s, total=0.021 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=2281 kB; lsn=0/1951160, redo lsn=0/1951128

连接到 db2,然后输入 db2=# checkpoint ; 。您应该看到如下所示的调试消息。

2023-09-22 13:37:52.876 PDT [4102743] DEBUG:  StartTransaction(1) name: unnamed; blockState: DEFAULT; state: INPROGRESS, xid/subid/cid: 0/1/0
2023-09-22 13:37:52.876 PDT [4102722] LOG:  checkpoint starting: immediate force wait
2023-09-22 13:37:52.896 PDT [4102722] LOG:  checkpoint complete: wrote 0 buffers (0.0%); 0 WAL file(s) added, 0 removed, 0 recycled; write=0.003 s, sync=0.001 s, total=0.020 s; sync files=0, longest=0.000 s, average=0.000 s; distance=0 kB, estimate=2053 kB; lsn=0/1951248, redo lsn=0/1951210
2023-09-22 13:37:52.896 PDT [4102743] DEBUG:  CommitTransaction(1) name: unnamed; blockState: STARTED; state: INPROGRESS, xid/subid/cid: 0/1/0
  • ALTER ROLE 命令允许用用户特定的值覆盖全局和每个数据库的设置。要体验这种基于角色的参数更改,请首先运行以下命令来创建新角色 bob 并将 bob 的调试消息更改为 level5。
postgres=# CREATE ROLE bob LOGIN SUPERUSER;
CREATE ROLE

postgres=# ALTER ROLE bob SET log_min_messages = 'debug5';
ALTER ROLE

postgres=# SELECT rolconfig FROM pg_roles WHERE rolname = 'bob';
         rolconfig         
---------------------------
 {log_min_messages=debug5}
(1 row)

其次,启动两个控制台:一个使用默认用户,另一个使用 bob,然后在每个控制台中键入 CHECKPOINT。你会发现只有当 CHECKPOINT 在 bob 的控制台中执行时,日志消息才有调试信息。

2.3. 通过 Shell 更改参数

PostgreSQL 服务器二进制文件 postgres 可以在启动期间接受参数。如果使用 pg_ctl 启动 PostgreSQL 服务器,则可以使用选项 -o 将参数键和值传递给 postgres 二进制文件。例如:

pg_ctl -D pgdata -l logfile -o --log_min_messages='debug5' -o --port=5433 start

PostgreSQL 服务器应以日志级别 debug5 启动并监听端口 5433。

2.4. 通过外部文件更改参数

有时,您可能会为 PostgreSQL 服务器定制许多参数,尤其是性能调整设置。这些参数可以在单独的文件中进行管理,从而使它们可以轻松地重复使用。为了实现这一点,postgresql.conf 允许使用关键字 include 来包含配置文件,使用 include_dir 来包含包含多个 .conf 文件的文件夹。

要体验使用 includeinclude_dir 自定义参数,请将以下两行追加到 postgresql.conf:

include         'my_conf.conf'
include_dir     'my_conf_dir'

将端口配置添加到与 postgresql.conf 位于同一文件夹中的 my_conf.conf 中:

port = 5433

在包含 postgresql.conf 的文件夹下创建一个新文件夹 my_conf_dir,并将文件 port.conf 添加到文件夹 my_conf_dir 中,端口设置为 port = 5434

现在,启动 PostgreSQL 服务器,您应该看到它正在监听端口 5434。如果您交换 include 和 include_dir 的顺序,然后重新启动 PostgreSQL 服务器,您将发现它正在监听端口 5433。这告诉我们关键字 includeinclude_dir 遵循以下规则:如果发现重复的设置,则应用最后一个值。这是显示三个不同conf文件中内容的屏幕截图。

configuration parameters examples

3. 总结

在这篇博文中,我们探索了四种不同的方法来配置 PostgreSQL 服务器的参数。希望这可以帮助您更好地管理配置参数并排除运行时的故障。

*** 参考***

  • Setting parameters 设置参数
  • Customizing SQL Functions in PostgreSQL: Exploring Various Approaches
    在 PostgreSQL 中自定义 SQL 函数:探索各种方法

Exploring Various Ways to Manage Configuration Parameters in PostgreSQL - Highgo Software Inc.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/436192.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大语言模型系列-GPT-3

文章目录 前言一、GTP-3的改进二、GPT-3的表现总结 前言 《Language Models are Few-Shot Learners,2020》 前文提到GPT-2进一步提升了模型的zero shot能力,但是在一些任务中仍可能会“胡说”,GTP-3基于此提出了few shot,即预测…

PnP算法

PnP(Perspective-n-Point)是求解3D到2D点的对应方法。它描述了当知道n个3D空间点及其位置,如何估计相机的位姿。如果两张图像中的一张特征点3D位置已知,那么至少需要3个点对(以及至少一个额外验证点验证结果)就可以计算相机的运动。 PnP的应用范围很广比…

从 HPC 到 AI:探索文件系统的发展及性能评估

随着 AI 技术的迅速发展,模型规模和复杂度以及待处理数据量都在急剧上升,这些趋势使得高性能计算(HPC)变得越来越必要。HPC 通过集成强大的计算资源,比如 GPU 和 CPU 集群,提供了处理和分析大规模数据所需的…

LLM 加速技巧:Muti Query Attention

MQA 是 19 年提出的一种新的 Attention 机制,其能够在保证模型效果的同时加快 decoder 生成 token 的速度。在大语言模型时代被广泛使用,很多LLM都采用了MQA,如Falcon、PaLM、StarCoder等。 在介绍MQA 之前,我们先回顾一下传统的…

利用GPT开发应用001:GPT基础知识及LLM发展

文章目录 一、惊艳的GPT二、大语言模型LLMs三、自然语言处理NLP四、大语言模型LLM发展 一、惊艳的GPT 想象一下,您可以与计算机的交流速度与与朋友交流一样快。那会是什么样子?您可以创建哪些应用程序?这正是OpenAI正在助力构建的世界&#x…

Ethersacn的交易数据是什么样的(2)

分析 Raw Transanction RLP(Recursive Length Prefix)是一种以太坊中用于序列化数据的编码方式。它被用于将各种数据结构转换为二进制格式,以便在以太坊中传输和存储。RLP 是一种递归的编码方式,允许对复杂的数据结构进行编码。所…

word如何实现不同章节显示不同页眉

一、问题描述 写论文时遇到如下情形,第二章页眉跟第一章一样,如下图 二、解决方法 在第二章前一页空白处,选择依次布局→分隔符→下一页,如下图 双击第二章页眉,进入页眉编辑状态,点击链接到前一节按钮&a…

SOC设计:关于时钟门控的细节

有如下几个信号 输入信号 1、同步后的rstnsync_clk 2、时钟:clk 3、test_mode 4、软件控制信号:clk_sub_en 输出信号 1、clk_sub 功能:软件配置的使能信号clk_sub_en经过时钟clk 2拍同步处理后产生clk 域下的enable信号,然…

2024年腾讯云服务器99元一年,最新价格整理

腾讯云服务器99元一年是真的吗?真的,只是又降价了,现在只要61元一年,配置为2核2G3M轻量应用服务器,40GB SSD盘,腾讯云百科txybk.com分享腾讯云官方活动购买链接 https://curl.qcloud.com/oRMoSucP 活动打开…

Python编程实验六:面向对象应用

目录 一、实验目的与要求 二、实验内容 三、主要程序清单和程序运行结果 第1题 第2题 四、实验结果分析与体会 一、实验目的与要求 (1)通过本次实验,学生应掌握类的定义与对象的创建、类的继承与方法的覆盖; (2…

鸿道Intewell-Win_V2.1.3_kyland软件版本发布说明

一、软件发布版本信息 版本号:V2.1.3_kyland 版本发布类型:trail试用版本 二、版本特点 适配 E211-1370(J6412,8GB,256GB SSD)设备 三、运行环境推荐 Intewell developer可以运行在windows7及windows10 64位 四、支…

程序员书单推荐:从入门到精通的必读之作

在程序员的职业生涯中,阅读技术书籍是不断学习和提升自我的重要途径。本文将为你推荐一系列从入门到精通的程序员书单,帮助你系统地掌握编程知识、提高技能水平,并在职业生涯中取得更大的进步。 一、入门篇 《Head First C语言》&#xff1…

掌握流量主变现秘诀!视频号”今日话题”赛道,详解保姆式教学一体化实操玩法,助你轻松驾驭!

其实,这个领域的制作相当简单。 只需按照下面我提供的教程操作,基本上十分钟内就能完成一个视频。 掌握流量主变现秘诀!视频号”今日话题”赛道,详解保姆式教学一体化实操玩法,助你轻松驾驭! 就收益而言,…

何为时间复杂度和空间复杂度

时间复杂度和空间复杂度是用来评估算法性能的两个重要指标。 1. **时间复杂度**: - 时间复杂度描述了算法执行所需的时间量随输入数据规模的增加而增加的趋势。通常用大O符号(O)表示,表示算法的渐近上界。例如,O(n…

STM32(8)NVIC编程

中断源由部分片上外设产生 在misc.h中找,杂项 配置NVIC GPIO和AFIO不能产生中断源,但能通过EXTI,由EXTI产生中断源 NVIC不需要开启时钟,因为NVIC模块位于内核内部,芯片一上电就能工作。 中断响应函数 中断向量表在启…

rtthread stm32h743的使用(七)dac设备使用

我们要在rtthread studio 开发环境中建立stm32h743xih6芯片的工程。我们使用一块stm32h743及fpga的核心板完成相关实验,核心板如图: 1.我们还是先建立工程 2.生成工程后打开mx进行配置,时钟配置如前所讲,不在赘述 3.更改mx文件…

观其大略之HybridCLR学习笔记

问题背景 1 现有热更方案的开发效率、性能没有到达极限,还有提升的空间 2 ios多平台政策导致热更新受限问题,ios禁止jit。根据我查找的资料,ios的代码段启动的时候就确定了,不能增加新的代码段。IOS封了内存(或者堆&…

你不得不知道的Python AI库

Python是人工智能(AI)和机器学习(ML)领域中使用最广泛的编程语言之一,拥有丰富的库支持各种AI和ML任务。本文介绍一些经典的Python AI库。 1. NumPy 简介:NumPy(Numerical Python)…

开源工业软件:SCADA系统开源

PyScada是一个开源的scada系统 源代码地址 http://www.gitpp.com/huangtomy/pyscada-cn SCADA系统是Supervisory Control And Data Acquisition的缩写,即数据采集与监视控制系统。它是以计算机为基础的DCS与电力自动化监控系统,应用领域非常广&#x…