PG查看版本的几种方法

0    795    1

Tags:

👉 本文共约11218个字,系统预计阅读时间或需43分钟。

查看PG版本的几种方法

SQL查询

“psql (13.3, server 12.2 (Debian 12.2-2.pgdg100+1))”说明psql的版本为13.3,而数据库服务器的版本为PG 12.2。

“psql (13.3)”说明psql和数据库的版本都是13.3。

pg_config

可以使用pg_config | grep VERSIONpg_config --version来查看:

pg_controldata

查看告警日志

看log_directory数据库配置参数指向的目录,看该目录中的运行日志是否打印有"LOG: starting PostgreSQL XX.Y"的版本信息(XX和Y均为阿拉伯数字)

postgres

pg_config命令详解

pg_config — 获取已安装的PostgreSQL的信息

大纲

pg_config [option...]

描述

pg_config工具打印当前安装版本的PostgreSQL的配置参数。它的设计目的之一是便于想与PostgreSQL交互的软件包能够找到所需的头文件和库。

选项

要使用pg_config,提供一个或多个下列选项:

  • --bindir

    打印用户可执行文件的位置。例如使用这个选项来寻找psql程序。这通常也是pg_config程序所在的位置。

  • --docdir

    打印文档文件的位置。

  • --htmldir

    打印 HTML 文档文件的位置。

  • --includedir

    打印客户端接口的 C 头文件的位置。

  • --pkgincludedir

    打印其它 C 头文件的位置。

  • --includedir-server

    打印用于服务器编程的 C 头文件的位置。

  • --libdir

    打印对象代码库的位置。

  • --pkglibdir

    打印动态可载入模块的位置,或者服务器可能搜索它们的位置(其它架构独立数据文件可能也被安装在这个目录)。

  • --localedir

    打印区域支持文件的位置(如果在PostgreSQL被编译时没有配置区域支持,这将是一个空字符串)。

  • --mandir

    打印手册页的位置。

  • --sharedir

    打印架构独立支持文件的位置。

  • --sysconfdir

    打印系统范围配置文件的位置。

  • --pgxs

    打印扩展 makefile 的位置。

  • --configure

    打印当PostgreSQL被配置编译时给予configure脚本的选项。这可以被用来重新得到相同的配置,或者找出是哪个选项编译了一个二进制包(不过注意二进制包通常包含厂商相关的自定补丁)。参见下面的例子。

  • --cc

    打印用来编译PostgreSQL的CC变量值。这显示被使用的 C 编译器。

  • --cppflags

    打印用来编译PostgreSQL的CPPFLAGS变量值。这显示在预处理时需要的 C 编译器开关(典型的是-I开关)。

  • --cflags

    打印用来编译PostgreSQL的CFLAGS变量值。这显示被使用的 C 编译器开关。

  • --cflags_sl

    打印用来编译PostgreSQL的CFLAGS_SL变量值。这显示被用来编译共享库的额外 C 编译器开关。

  • --ldflags

    打印用来编译PostgreSQL的LDFLAGS变量值。这显示链接器开关。

  • --ldflags_ex

    打印用来编译PostgreSQL的LDFLAGS_EX变量值。这只显示被用来编译可执行程序的链接器开关。

  • --ldflags_sl

    打印用来编译PostgreSQL的LDFLAGS_SL变量值。这只显示被用来编译共享库的链接器开关。

  • --libs

    打印用来编译PostgreSQL的LIBS变量值。这通常包含用于链接到PostgreSQL中的外部库的-l开关。

  • --version

    打印PostgreSQL的版本。

  • -? --help

    显示有关pg_config命令行参数的帮助并退出。

如果给定多于一个选项,将按照相同的顺序打印信息,每行一项。如果没有给定选项,将打印所有可用信息,并带有标签。

注解

选项--docdir--pkgincludedir--localedir--mandir--sharedir--sysconfdir--cc--cppflags--cflags--cflags_sl--ldflags--ldflags_sl--libs在PostgreSQL 8.1 被加入。选项--htmldir在PostgreSQL 8.4 被加入。选项--ldflags_ex在PostgreSQL 9.0 被加入。

例子

要重建当前 PostgreSQL 安装的编译配置,可运行下列命令:

pg_config --configure的输出包含 shell 引号,这样带空格的参数可以被正确地表示。因此,为了得到正确的结果需要使用eval

pg_controldata命令详解

pg_controldata — 显示一个PostgreSQL数据库集簇的控制信息

大纲

pg_controldata [option] [[ --pgdata | -D ] datadir]

本人提供Oracle、MySQL、PG等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!

描述

pg_controldata打印在initdb期间初始化的信息,例如目录版本。它也显示关于预写式日志和检查点处理的信息。这种信息是集簇范围的,并且不针对任何一个数据库。

这个工具只能由初始化集簇的用户运行,因为它要求对数据目录的读访问。你可以在命令行中指定数据目录,或者使用环境变量PGDATA。这个工具支持选项-V--version,它们打印pg_controldata版本并退出。它也支持选项-?--help,它们输出支持的参数。

环境

  • PGDATA

    默认的数据目录位置。

  • PG_COLOR

    规定在诊断消息中是否使用颜色。可能的值为alwaysautonever

postgres命令详解

postgres — PostgreSQL数据库服务器

大纲

postgres [选项...]

描述

postgres是PostgreSQL数据库服务器。一个客户端应用为了能访问一个数据库,它会(通过一个网络或者本地)连接到一个运行着的postgres实例。该postgres实例接着会开始一个独立的服务器进程来处理该连接。

一个postgres实例总是管理正好一个数据库集簇的数据。一个数据库集簇是一个数据库的集合,它们被存储在一个共同的文件系统位置(“数据区”)上。 一个系统上可以同时运行多个postgres实例,只要它们使用不同的数据区和不同的通信端口(见下文)。postgres启动时需要知道数据区的位置,该位置必须通过-D选项或PGDATA环境变量指定,对此是没有默认值的。通常,-DPGDATA会直接指向由initdb创建的数据区目录。其他可能的文件布局在第 19.2 节中讨论。

默认情况下,postgres会在前台启动并将日志消息打印到标准错误流。但在实际应用中,postgres应当作为一个后台进程启动,而且多数是在系统启动时自动启动。

postgres还能在单用户模式中被调用。这种模式的主要用途是在启动过程中由initdb使用。有时候它也被用于调试或者灾难性恢复。注意,运行一个单用户模式服务器并不真地适合调试服务器,因为不会发生实际的进程间通信和锁定。当从 shell 中调用单用户模式时,用户可以输入查询并且结果会被以一种更适合开发者阅读(不适合普通用户)的形式打印在屏幕上。在单用户模式中,会话用户将被设置为 ID 为 1 的用户,并且这个用户会被隐式地赋予超级用户权限。该用户不必实际存在,因此单用户模式运行可以被用来对某些意外损坏的系统目录进行手工恢复。

选项

postgres接受下列命令行参数。关于这些选项的详细讨论请参考第 19 章。你也可以通过设置一个配置文件来减少键入大部分这些选项。有些(安全)选项还可以从连接的客户端以一种与应用相关只应用于会话的方法设置。例如,如果设置了PGOPTIONS环境变量,那么基于libpq的客户端将都把那个字符串传递给服务器,它将被服务器解释成postgres命令行选项。

通用选项

  • -B *nbuffers*

    设置被服务器进程使用的共享内存缓冲区数量。这个参数的默认值是initdb自动选择的。指定这个选项等效于设置shared_buffers配置参数。

  • -c *name*=*value*

    设置一个命名的运行时参数。PostgreSQL支持的配置参数在第 19 章中描述。大多数其它命令行选项实际上都是这种参数赋值的短形式。-c可以出现多次用于设置多个参数。

  • -C *name*

    打印命名运行时参数的值,并且退出(详见上面的-c选项)。这可以被用在一个运行服务器上,并且从postgresql.conf中返回值,这些值可能被在这次调用中的任何参数修改过。它并不反映集簇启动时提供的参数。这个选项用于与一个服务器实例交互的其他程序来查询配置参数值,例如pg_ctl。面向用户的应用应该使用SHOW或者pg_settings视图。

  • -d *debug-level*

    设置调试级别。数值设置得越高,写到服务器日志的调试输出就越多。取值范围是从 1 到 5。还可以针对某个特定会话使用-d 0来阻止父postgres进程的服务器日志级别被传播到这个会话。

  • -D *datadir*

    指定数据库配置文件的文件系统位置。详见第 19.2 节

  • -e

    把默认日期风格设置为“European”,也就是输入日期域的顺序是DMY。这也导致在一些日期输出格式中把日打印在月之前。详见第 8.5 节

  • -F

    禁用fsync调用以提高性能,但是要冒系统崩溃时数据损坏的风险。指定这个选项等效于禁用fsync配置参数。在使用之前阅读详细文档!

  • -h *hostname*

    指定postgres监听来自客户端应用 TCP/IP 连接的 IP 主机名或地址。该值也可以是一个用逗号分隔的地址列表,或者*表示监听所有可用的地址。一个空值表示不监听任何 IP 地址,在这种情况下可以使用 Unix 域套接字连接到服务器。缺省只监听localhost。声明这个选项等效于设置listen_addresses配置参数。默认只监听localhost。指定这个选项等效于设置listen_addresses配置参数。

  • -i

    允许远程客户端使用 TCP/IP (互联网域)连接。没有这个选项,将只接受本地连接。这个选项等效于在postgresql.conf中或者通过-h选项将listen_addresses设为*。这个选项已经被废弃,因为它不允许访问listen_addresses的完整功能。所以最好直接设置listen_addresses

  • -k *directory*

    指定postgres用来监听来自客户端应用连接的 Unix 域套接字的目录。这个值也可以是一个逗号分隔的目录列表。一个空值指定不监听任何 Unix 域套接字,在这种情况下只能用 TCP/IP 套接字来连接到服务器。默认值通常是/tmp,但是可以在编译的时候修改。指定这个选项等效于设置unix_socket_directories配置参数。

  • -l

    启用使用SSL的安全连接。要使这个选项可用,编译PostgreSQL时必须打开SSL支持。有关使用SSL的更多信息,请参考第 18.9 节

  • -N *max-connections*

    设置该服务器将接受的最大客户端连接数。该参数的默认值由initdb自动选择。指定这个选项等效于设置max_connections配置参数。

  • -o *extra-options*

    extra-options中指定的命令行风格的参数会被传递给所有由这个postgres进程派生的服务进程。extra-options中的空格被视作 参数分隔符,除非用反斜线(\)转义。要表示一个字面意 义上的反斜线,可以写成\\。通过多次使用-o 也可以指定多个参数。这个选项的使用已经被废弃。用于服务器进程的所有命令行选项可以在postgres命令行上直接指定。

  • -p *port*

    指定postgres用于监听客户端应用连接的 TCP/IP 端口或本地 Unix 域套接字文件扩展。默认为PGPORT环境变量的值。如果PGPORT没有设置,那么默认值是编译期间设立的值(通常是 5432)。如果你指定了一个非默认端口,那么所有客户端应用都必须用命令行选项或者PGPORT指定同一个端口。

  • -s

    在每条命令结束时打印时间信息和其它统计信息。这个选项对测试基准和调节缓冲区数量有用处。

  • -S work-mem

    指定在使用临时磁盘文件之前排序和散列表使用的基本内存量。 请参阅 第 19.4.1 节work_mem 配置参数的说明。

  • -V --version

    打印postgres版本并退出。

  • --*name*=*value*

    设置一个命名的运行时参数;其缩写形式是-c

  • --describe-config

    这个选项会用制表符分隔的COPY格式导出服务器的内部配置变量、描述以及默认值。设计它的目的是用于管理工具。

  • -? --help

    显示有关postgres的命令行参数,并且退出。

半内部选项

这里描述的选项主要被用于调试目的,并且在某些情况下可以协助恢复严重受损的数据库。在生产数据库环境中应该不会去使用它们。在这里列举它们只是为了让PostgreSQL系统开发者使用。此外,这些选项可能在将来的版本中更改或删除而不另行通知。

  • -f { s | i | o | b | t | n | m | h }

    禁止某种扫描和连接方法的使用:si分别禁用顺序和索引扫描, obt分别禁用只用索引扫描、位图索引扫描以及 TID 扫描,而nmh则分别禁用嵌套循环、归并和哈希连接。顺序扫描和嵌套循环连接都不可能完全被禁用。-fs-fn选项仅仅是在有其他选择时不鼓励优化器使用这些计划类型。

  • -n

    该选项主要用于调试导致服务器进程异常崩溃的问题。对付这种情况的一般策略是通知所有其它服务器进程,让它们终止并且接着重新初始化共享内存和信号量。这是因为一个错误的服务器进程可能在终止之前就已经对共享状态造成了破坏。该选项指定postgres将不会重新初始化共享数据结构。一个有经验的系统程序员这时就可以使用调试器检查共享内存和信号量状态。

  • -O

    允许修改系统表的结构。这个选项用于initdb

  • -P

    读取系统表时忽略系统索引(但在更改系统表时仍然更新索引)。这在从损坏的系统索引中恢复时有用。

  • -t pa[rser] | pl[anner] | e[xecutor]

    打印与每个主要系统模块相关的查询的时间统计。这个选项不能和-s选项一起使用。

  • -T

    该选项主要用于调试导致服务器进程异常崩溃的问题。对付这种情况的一般策略是通知所有其它服务器进程,让它们终止并且接着重新初始化共享内存和信号量。这是因为一个错误的服务器进程可能在终止之前就已经对共享状态造成了破坏。该选项指定postgres将通过发送SIGSTOP信号停止其他所有服务器进程,但是并不让它们终止。这样就允许系统程序员手动从所有服务器进程收集内核转储。

  • -v protocol

    声明这次会话使用的前/后服务器协议的版本数。该选项仅在内部使用。

  • -W seconds

    在一个新服务器进程被启动时,它实施认证过程之后会延迟这个选项所设置的秒数。这就留出了机会来用一个调试器附着在服务器进程上。

用于单用户模式的选项

下面的选项仅适用于单用户模式(见Single-User Mode)。

  • --single

    选择单用户模式。这必须是命令行中的第一个选项。

  • database

    指定要访问的数据库的名称。这必须是命令行中的最后一个参数。如果省略它,则默认为用户名。

  • -E

    在执行命令之前回显所有命令到标准输出。

  • -j

    使用跟着两个新行的分号而不是仅用新行作为命令终止符。

  • -r filename

    将所有服务器日志输出发送到filename中。 只有在作为一个命令行选项提供时,这个选项才会兑现。

环境

  • PGCLIENTENCODING

    客户端使用的默认字符编码(客户端可以独立地覆盖它)。这个值也可以在配置文件中设置。

  • PGDATA

    默认的数据目录位置。

  • PGDATESTYLE

    DateStyle运行时参数的默认值(这个环境变量的使用已被废弃)。

  • PGPORT

    默认端口号(在配置文件中设置更好)

诊断

一个提到了semgetshmget的错误消息可能意味着你需要配置内核来提供足够的共享内存和信号量。更多讨论请见第 18.4 节。你也可以通过降低shared_buffers值减少PostgreSQL的共享内存消耗, 或者降低max_connections值减少信号量消耗,这样可以推迟对内核的重新配置。

如果一个消息说另外一个服务器已经在运行,应该仔细地检查,例如根据你的系统可以用命令

如果你确信没有冲突的服务器正在运行,那么你可以删除消息中提到的锁文件然后再次尝试。

如果一个失败消息指示它无法绑定到一个端口,可能意味着该端口已经被某些非PostgreSQL进程所使用。如果你终止postgres并且立即使用相同的端口重启它,你也可能会得到这种错误。在这种情况系,你必须等待几秒直到操作系统关闭该端口,然后再重试。最后,如果你指定了一个操作系统认为需要保留的端口号,你可能也会得到这个错误。例如,很多版本的 Unix 认为低于 1024 的端口号是“可信的”并且只允许 Unix 超级用户访问它们。

注解

实用命令pg_ctl可以用来安全方便地启动和关闭postgres服务器。

只要有可能,就不要\使用SIGKILL杀死主postgres服务器。这样会阻止postgres在终止前释放它持有的系统资源(例如共享内存和信号量)。这样可能会导致启动新的postgres进程时出现问题。

要正常地终止postgres服务器,可以使用SIGTERMSIGINT或者SIGQUIT信号。第一个在退出前将等待所有客户端终止,第二个将强行断开所有客户端的连接,第三个会不做正确的关闭立即退出并且会导致重启时的恢复。

SIGHUP信号会重新加载服务器配置文件。也可以向一个单独的服务器进程发送SIGHUP信号,但是这样做通常没什么意义。

要取消一个正在运行的查询,可以向运行该查询的进程发送SIGINT信号。要干净地终止一个后端进程,可向它发送SIGTERM。在 SQL 中可调用的与这两种动作等效的命令可参考第 9.27.2 节中的pg_cancel_backendpg_terminate_backend

postgres服务器使用SIGQUIT来告诉子服务器进程终止但不做正常的清理。该信号不应该\被用户使用。向一个服务器进程发送SIGKILL也是不明智的 — 主postgres进程将把这解释为一次崩溃,并且作为其标准崩溃恢复过程的一部分,它将强制所有的后代进程退出。

缺陷

--选项在FreeBSD或OpenBSD上无法运行,应该使用-c。这在受影响的系统里是个缺陷; 如果这个缺陷没有被修复,将来的PostgreSQL版本将提供一种解决方案。

单用户模式

要启动一个单用户模式的服务器,使用这样的命令

-D给服务器提供正确的数据库目录的路径,或者确保环境变量PGDATA被设置。同时还要指定你想在其中工作的特定数据库的名字。

通常,单用户模式的服务器会把换行符当做命令输入的终止符。它不明白分号的作用,因为那属于psql。要想把一个命令分成多行,必须在最后一个换行符以外的每个换行符前面敲一个反斜线。这个反斜线和旁边的新行都会被从输入命令中去掉。注意即使在字符串或者注释中也会这样做。

但是如果使用了-j命令行选项,那么单个新行将不会终止命令输入。相反,分号-新行-新行的序列才会终止命令输入。也就是说,输入一个紧跟着空行的分号。在这种模式下,反斜线-新行不会被特殊对待。此外,在字符串或者注释内的这类序列也不会被特殊对待。

不管在哪一种输入模式中,如果输入的一个分号不是正好在命令终止符之前或者不是命令终止符的一部分,它会被认为是一个命令分隔符。当真正输入一个命令终止符时,已经输入的多个语句将被作为一个单个事务执行。

要退出会话,输入EOF(通常是Control+D)。如果从上一个命令终止符以来已经输入了任何文本,那么EOF将被当作命令终止符,并且如果要退出则需要另一个EOF。

请注意单用户模式的服务器不会提供复杂的行编辑特性(例如没有命令历史)。但用户模式也不会做任何后台处理,例如自动检查点或者复制。

例子

要用默认值在后台启动postgres

要用指定端口启动postgres,例如 1234:

要使用psql连接到这个服务器,用 -p 选项指定这个端口:

或者设置环境变量PGPORT

命名运行时参数可以用这些形式之一设置:

两种形式都覆盖postgresql.conf中可能存在的work_mem设置。请注意在参数名中的下划线在命令行可以写成下划线或连字符。除了用于短期的实验外,更好的习惯是编辑postgresql.conf中的设置, 而不是倚赖命令行开关来设置参数。

标签:

头像

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

10 + 16 =

 

嘿,我是小麦,需要帮助随时找我哦
  • 18509239930
  • 个人微信

  • 麦老师QQ聊天
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部
返回顶部