pg_controldata命令

本文展示了使用 pg_controldata 命令检查 PostgreSQL 数据库的状态信息,包括数据库版本、检查点位置、设置参数等,并通过 strace 追踪了命令执行过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[postgres@pgserver ~]$ /usr/local/pgsql/bin/pg_controldata
pg_control version number:            1002
Catalog version number:               201706241
Database system identifier:           6451527757181954780
Database cluster state:               in production
pg_control last modified:             Sun 25 Feb 2018 06:34:40 AM EST
Latest checkpoint location:           0/17EAE80
Prior checkpoint location:            0/17EA668
Latest checkpoint's REDO location:    0/17EAE48
Latest checkpoint's REDO WAL file:    000000010000000000000001
Latest checkpoint's TimeLineID:       1
Latest checkpoint's PrevTimeLineID:   1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID:          0:573
Latest checkpoint's NextOID:          49414
Latest checkpoint's NextMultiXactId:  1
Latest checkpoint's NextMultiOffset:  0
Latest checkpoint's oldestXID:        548
Latest checkpoint's oldestXID's DB:   1
Latest checkpoint's oldestActiveXID:  573
Latest checkpoint's oldestMultiXid:   1
Latest checkpoint's oldestMulti's DB: 1
Latest checkpoint's oldestCommitTsXid:0
Latest checkpoint's newestCommitTsXid:0
Time of latest checkpoint:            Sun 25 Feb 2018 06:34:40 AM EST
Fake LSN counter for unlogged rels:   0/1
Minimum recovery ending location:     0/0
Min recovery ending loc's timeline:   0
Backup start location:                0/0
Backup end location:                  0/0
End-of-backup record required:        no
wal_level setting:                    replica
wal_log_hints setting:                off
max_connections setting:              100
max_worker_processes setting:         8
max_prepared_xacts setting:           0
max_locks_per_xact setting:           64
track_commit_timestamp setting:       off
Maximum data alignment:               8
Database block size:                  8192
Blocks per segment of large relation: 131072
WAL block size:                       8192
Bytes per WAL segment:                16777216
Maximum length of identifiers:        64
Maximum columns in an index:          32
Maximum size of a TOAST chunk:        1996
Size of a large-object chunk:         2048
Date/time type storage:               64-bit integers
Float4 argument passing:              by value
Float8 argument passing:              by value
Data page checksum version:           0
Mock authentication nonce:            f73c3ed9b7d2db98ff745ccaee4bfd88f53baa7a80a71866902ce6c5d77da062
[postgres@pgserver ~]$ 

pg_controldata命令是读取的pg_control里边的内容,

请用strace的跟踪:

[postgres@pgserver ~]$ strace /usr/local/pgsql/bin/pg_controldata
execve("/usr/local/pgsql/bin/pg_controldata", ["/usr/local/pgsql/bin/pg_controld"...], [/* 18 vars */]) = 0
brk(NULL)                               = 0x130e000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3b7b3a0000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/usr/local/pgsql/lib/tls/x86_64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/local/pgsql/lib/tls/x86_64", 0x7ffe8e4648b0) = -1 ENOENT (No such file or directory)
open("/usr/local/pgsql/lib/tls/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/local/pgsql/lib/tls", 0x7ffe8e4648b0) = -1 ENOENT (No such file or directory)
open("/usr/local/pgsql/lib/x86_64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/local/pgsql/lib/x86_64", 0x7ffe8e4648b0) = -1 ENOENT (No such file or directory)
open("/usr/local/pgsql/lib/libpthread.so.0", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
stat("/usr/local/pgsql/lib", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=22693, ...}) = 0
mmap(NULL, 22693, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f3b7b39a000
close(3)                                = 0
open("/lib64/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\0m\0\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=144792, ...}) = 0
mmap(NULL, 2208904, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3b7af64000
mprotect(0x7f3b7af7b000, 2093056, PROT_NONE) = 0
mmap(0x7f3b7b17a000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x16000) = 0x7f3b7b17a000
mmap(0x7f3b7b17c000, 13448, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3b7b17c000
close(3)                                = 0
open("/usr/local/pgsql/lib/libc.so.6", O_RDONLY|O_CLOEXEC) = -1 ENOENT (No such file or directory)
open("/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\20\35\2\0\0\0\0\0"..., 832) = 832
fstat(3, {st_mode=S_IFREG|0755, st_size=2127336, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3b7b399000
mmap(NULL, 3940800, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x7f3b7aba1000
mprotect(0x7f3b7ad59000, 2097152, PROT_NONE) = 0
mmap(0x7f3b7af59000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x1b8000) = 0x7f3b7af59000
mmap(0x7f3b7af5f000, 16832, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7f3b7af5f000
close(3)                                = 0
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3b7b397000
arch_prctl(ARCH_SET_FS, 0x7f3b7b397740) = 0
mprotect(0x7f3b7af59000, 16384, PROT_READ) = 0
mprotect(0x7f3b7b17a000, 4096, PROT_READ) = 0
mprotect(0x607000, 4096, PROT_READ)     = 0
mprotect(0x7f3b7b3a1000, 4096, PROT_READ) = 0
munmap(0x7f3b7b39a000, 22693)           = 0
set_tid_address(0x7f3b7b397a10)         = 1165
set_robust_list(0x7f3b7b397a20, 24)     = 0
rt_sigaction(SIGRTMIN, {0x7f3b7af6a7e0, [], SA_RESTORER|SA_SIGINFO, 0x7f3b7af735e0}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0x7f3b7af6a870, [], SA_RESTORER|SA_RESTART|SA_SIGINFO, 0x7f3b7af735e0}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM64_INFINITY}) = 0
brk(NULL)                               = 0x130e000
brk(0x132f000)                          = 0x132f000
brk(NULL)                               = 0x132f000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=106070960, ...}) = 0
mmap(NULL, 106070960, PROT_READ, MAP_PRIVATE, 3, 0) = 0x7f3b74678000
close(3)                                = 0
getcwd("/home/postgres", 1024)          = 15
stat("/usr/local/pgsql/bin/pg_controldata", {st_mode=S_IFREG|0755, st_size=42632, ...}) = 0
access("/usr/local/pgsql/bin/pg_controldata", R_OK) = 0
access("/usr/local/pgsql/bin/pg_controldata", X_OK) = 0
getcwd("/home/postgres", 1024)          = 15
chdir("/usr/local/pgsql/bin")           = 0
lstat("pg_controldata", {st_mode=S_IFREG|0755, st_size=42632, ...}) = 0
getcwd("/usr/local/pgsql/bin", 1024)    = 21
chdir("/home/postgres")                 = 0
open("/usr/local/pgsql/data/global/pg_control", O_RDONLY) = 3 ------------------->>>>注意此处。
read(3, "\334*gAPn\210Y\352\3\0\0\1\313\5\f\6\0\0\0\0\0\0\0P\237\222Z\0\0\0\0"..., 296) = 296
close(3)                                = 0
open("/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=3519, ...}) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=3519, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3b7b39f000
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\4\0\0\0\4\0\0\0\0"..., 4096) = 3519
lseek(3, -2252, SEEK_CUR)               = 1267
read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\5\0\0\0\5\0\0\0\0"..., 4096) = 2252
close(3)                                = 0
munmap(0x7f3b7b39f000, 4096)            = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3519, ...}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f3b7b39f000
write(1, "pg_control version number:      "..., 43pg_control version number:            1002
) = 43
write(1, "Catalog version number:         "..., 48Catalog version number:               201706241
) = 48
write(1, "Database system identifier:     "..., 58Database system identifier:           6451527757181954780
) = 58
write(1, "Database cluster state:         "..., 52Database cluster state:               in production
) = 52
write(1, "pg_control last modified:       "..., 70pg_control last modified:             Sun 25 Feb 2018 06:34:40 AM EST
) = 70
write(1, "Latest checkpoint location:     "..., 48Latest checkpoint location:           0/17EAE80
) = 48
write(1, "Prior checkpoint location:      "..., 48Prior checkpoint location:            0/17EA668
) = 48
write(1, "Latest checkpoint's REDO locatio"..., 48Latest checkpoint's REDO location:    0/17EAE48
) = 48
write(1, "Latest checkpoint's REDO WAL fil"..., 63Latest checkpoint's REDO WAL file:    000000010000000000000001
) = 63
write(1, "Latest checkpoint's TimeLineID: "..., 40Latest checkpoint's TimeLineID:       1
) = 40
write(1, "Latest checkpoint's PrevTimeLine"..., 40Latest checkpoint's PrevTimeLineID:   1
) = 40
write(1, "Latest checkpoint's full_page_wr"..., 41Latest checkpoint's full_page_writes: on
) = 41
write(1, "Latest checkpoint's NextXID:    "..., 44Latest checkpoint's NextXID:          0:573
) = 44
write(1, "Latest checkpoint's NextOID:    "..., 44Latest checkpoint's NextOID:          49414
) = 44
write(1, "Latest checkpoint's NextMultiXac"..., 40Latest checkpoint's NextMultiXactId:  1
) = 40
write(1, "Latest checkpoint's NextMultiOff"..., 40Latest checkpoint's NextMultiOffset:  0
) = 40
write(1, "Latest checkpoint's oldestXID:  "..., 42Latest checkpoint's oldestXID:        548
) = 42
write(1, "Latest checkpoint's oldestXID's "..., 40Latest checkpoint's oldestXID's DB:   1
) = 40
write(1, "Latest checkpoint's oldestActive"..., 42Latest checkpoint's oldestActiveXID:  573
) = 42
write(1, "Latest checkpoint's oldestMultiX"..., 40Latest checkpoint's oldestMultiXid:   1
) = 40
write(1, "Latest checkpoint's oldestMulti'"..., 40Latest checkpoint's oldestMulti's DB: 1
) = 40
write(1, "Latest checkpoint's oldestCommit"..., 40Latest checkpoint's oldestCommitTsXid:0
) = 40
write(1, "Latest checkpoint's newestCommit"..., 40Latest checkpoint's newestCommitTsXid:0
) = 40
write(1, "Time of latest checkpoint:      "..., 70Time of latest checkpoint:            Sun 25 Feb 2018 06:34:40 AM EST
) = 70
write(1, "Fake LSN counter for unlogged re"..., 42Fake LSN counter for unlogged rels:   0/1
) = 42
write(1, "Minimum recovery ending location"..., 42Minimum recovery ending location:     0/0
) = 42
write(1, "Min recovery ending loc's timeli"..., 40Min recovery ending loc's timeline:   0
) = 40
write(1, "Backup start location:          "..., 42Backup start location:                0/0
) = 42
write(1, "Backup end location:            "..., 42Backup end location:                  0/0
) = 42
write(1, "End-of-backup record required:  "..., 41End-of-backup record required:        no
) = 41
write(1, "wal_level setting:              "..., 46wal_level setting:                    replica
) = 46
write(1, "wal_log_hints setting:          "..., 42wal_log_hints setting:                off
) = 42
write(1, "max_connections setting:        "..., 42max_connections setting:              100
) = 42
write(1, "max_worker_processes setting:   "..., 40max_worker_processes setting:         8
) = 40
write(1, "max_prepared_xacts setting:     "..., 40max_prepared_xacts setting:           0
) = 40
write(1, "max_locks_per_xact setting:     "..., 41max_locks_per_xact setting:           64
) = 41
write(1, "track_commit_timestamp setting: "..., 42track_commit_timestamp setting:       off
) = 42
write(1, "Maximum data alignment:         "..., 40Maximum data alignment:               8
) = 40
write(1, "Database block size:            "..., 43Database block size:                  8192
) = 43
write(1, "Blocks per segment of large rela"..., 45Blocks per segment of large relation: 131072
) = 45
write(1, "WAL block size:                 "..., 43WAL block size:                       8192
) = 43
write(1, "Bytes per WAL segment:          "..., 47Bytes per WAL segment:                16777216
) = 47
write(1, "Maximum length of identifiers:  "..., 41Maximum length of identifiers:        64
) = 41
write(1, "Maximum columns in an index:    "..., 41Maximum columns in an index:          32
) = 41
write(1, "Maximum size of a TOAST chunk:  "..., 43Maximum size of a TOAST chunk:        1996
) = 43
write(1, "Size of a large-object chunk:   "..., 43Size of a large-object chunk:         2048
) = 43
write(1, "Date/time type storage:         "..., 54Date/time type storage:               64-bit integers
) = 54
write(1, "Float4 argument passing:        "..., 47Float4 argument passing:              by value
) = 47
write(1, "Float8 argument passing:        "..., 47Float8 argument passing:              by value
) = 47
write(1, "Data page checksum version:     "..., 40Data page checksum version:           0
) = 40
write(1, "Mock authentication nonce:      "..., 103Mock authentication nonce:            f73c3ed9b7d2db98ff745ccaee4bfd88f53baa7a80a71866902ce6c5d77da062
) = 103
exit_group(0)                           = ?
+++ exited with 0 +++
[postgres@pgserver ~]$ 



<think>好的,我现在需要解决用户在GitLab中遇到的“global/pg_control: Permission denied”权限问题。首先,我得理解这个错误通常出现在什么情况下。根据经验,PostgreSQL相关的权限问题可能涉及到数据目录的所有权或访问权限不正确。用户可能是在安装或升级GitLab后遇到这个问题,特别是当PostgreSQL的数据目录权限被错误地更改时。 接下来,我应该检查数据目录的权限设置。通常,PostgreSQL的数据目录位于/var/opt/gitlab/postgresql/data,而pg_control文件可能在这个目录下。正确的所有权应该是gitlab用户和gitlab组,比如gitlab-psql。用户可能需要使用chown和chmod命令来调整权限。比如,运行sudo chown -R gitlab-psql:gitlab /var/opt/gitlab/postgresql/data和sudo chmod -R 0700 /var/opt/gitlab/postgresql/data。 然后,可能需要重新配置GitLab,使用gitlab-ctl reconfigure命令,这会重新应用正确的配置和权限。另外,如果用户最近升级了GitLab,可能需要检查升级过程中是否有步骤遗漏,或者是否有残留的旧文件导致权限冲突。 另外,SELinux或AppArmor这样的安全模块有时会限制进程的访问权限。用户可能需要检查这些安全策略是否阻止了PostgreSQL访问相关文件。可以通过暂时禁用SELinux来测试是否是这个问题,或者使用audit2why工具分析日志,调整策略。 还有,需要确认PostgreSQL服务是否正常运行。使用gitlab-ctl status postgresql查看服务状态,如果服务没有启动,可能需要查看日志文件/var/log/gitlab/postgresql/current中的错误信息,进一步诊断问题。 最后,如果以上步骤都无效,可能需要考虑备份数据并重新初始化PostgreSQL,或者联系GitLab支持获取帮助。同时,用户需要确保在操作前备份重要数据,避免数据丢失。 总结一下,解决步骤应该是检查并修复数据目录权限,重新配置GitLab,检查安全模块设置,验证服务状态,查看日志,最后考虑重新初始化或寻求支持。此外,生成相关问题可以帮助用户进一步了解如何预防类似问题,比如如何设置正确的文件权限,或如何配置SELinux以兼容GitLab服务。</think>### GitLab中“global/pg_control: Permission denied”权限问题解决方案 #### 1. 检查文件所有权与权限 PostgreSQL的`pg_control`文件通常位于数据目录中(如`/var/opt/gitlab/postgresql/data`)。权限问题可能因文件所有权错误或访问权限不足导致: - **修复所有权**: ```bash sudo chown -R gitlab-psql:gitlab /var/opt/gitlab/postgresql/data ``` 其中`gitlab-psql`是GitLab默认的PostgreSQL运行用户[^1]。 - **设置严格权限**: ```bash sudo chmod -R 0700 /var/opt/gitlab/postgresql/data ``` 此命令确保仅所有者有读写执行权限,符合PostgreSQL安全要求。 #### 2. 重新配置GitLab 运行以下命令重新生成配置并应用权限: ```bash sudo gitlab-ctl reconfigure ``` 此操作会重置服务配置,包括文件权限和依赖项。 #### 3. 检查SELinux/AppArmor限制 若系统启用了SELinux或AppArmor,可能拦截PostgreSQL访问: - **临时禁用SELinux**(仅用于测试): ```bash sudo setenforce 0 ``` - **调整策略**: 查看审计日志`/var/log/audit/audit.log`,使用`audit2allow`生成新策略模块: ```bash grep pg_control /var/log/audit/audit.log | audit2allow -M mypolicy sudo semodule -i mypolicy.pp ``` #### 4. 验证PostgreSQL服务状态 确保服务正常运行: ```bash sudo gitlab-ctl status postgresql ``` 若服务未启动,检查日志: ```bash sudo journalctl -u gitlab-postgresql ``` #### 5. 处理残留文件或升级问题 若问题出现在升级后,尝试清理旧文件: ```bash sudo gitlab-ctl cleanup ``` #### 6. 备份与重新初始化(最后手段) 备份数据后,重新初始化PostgreSQL: ```bash sudo gitlab-ctl stop postgresql sudo rm -rf /var/opt/gitlab/postgresql/data/* sudo gitlab-ctl reconfigure sudo gitlab-ctl start postgresql ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值