search_path修改了postgresql.conf没有生效 ,应该修改这个配置postgresql.auto.conf文件
修改了postgresql.conf没有生效
优先级 postgresql.auto.conf > postgresql.conf
方法1 修改 postgresql.auto.conf
[root@s101 /var/lib/pgsql/13/data]#nano postgresql.auto.conf # Do not edit this file manually! # It will be overwritten by the ALTER SYSTEM command. password_encryption = 'scram-sha-256' search_path = '"$user", public,myschema,myschema1'
方法2
postgres@[local]:5432=#alter system set search_path = "$user",public,myschema; ALTER SYSTEM postgres@[local]:5432=#SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row)
再次加载
[root@s101 /var/lib/pgsql/13/data]#sudo systemctl restart postgresql-13
或是重启服务
postgres@[local]:5432=#SELECT pg_reload_conf();
pg_reload_conf
----------------
t
(1 row)
postgres@[local]:5432=#show search_path;
search_path
------------------------------------
"$user", public,myschema,myschema1
(1 row)
配置是否被成功应用 pg_file_settings
select * from pg_file_settings where name = 'search_path'
视图pg_file_settings
提供了服务器配置文件 内容的概要。这个视图中的每一行表示配置文件中出现的一个 “name = value”项,还带有注解指示该值是否被成功地应用。在 配置文件有问题时,有可能出现额外的行,它们没有相关的 “name = value”项,一个例子是配置文件中有语法错误。
附:官方文档说明
通过配置文件影响参数
设置这些参数最基本的方法是编辑postgresql.conf
文件, 它通常被保存在数据目录中(当数据库集簇目录被初始化时,一个默认的拷贝将会被安装在那里)。一个该文件的例子看起来是:
# This is a comment log_connections = yes log_destination = 'syslog' search_path = '"$user", public' shared_buffers = 128MB
每一行指定一个参数。名称和值之间的等号是可选的。空白是无意义的(除了在一个引号引用的参数值内)并且空行被忽略。井号(#
)指示该行的剩余部分是一个注释。非简单标识符或者数字的参数值必须用单引号包围。要在参数值里嵌入单引号, 要么写两个单引号(首选)或者在引号前放反斜线。 如果文件包含相同参数的多个条目,则忽略除最后一个之外的所有条目。
以这种方式设定的参数为集簇提供了默认值。除非这些设置被覆盖,活动会话看到的就是这些设置。 下面的小节描述了管理员或用户覆盖这些默认值的方法。
主服务器进程每次收到SIGHUP信号(最简单的方法是从命令行运行pg_ctl reload
或调用 SQL 函数pg_reload_conf()
来发送这个信号)后都会重新读取这个配置 文件。主服务器进程还会把这个信号传播给所有正在运行的服务器进程,这样现有的会话也能采用新 值(要等待它们完成当前正在执行的客户端命令之后才会发生)。另外,你可以直接向一个单一服务 器进程发送该信号。有些参数只能在服务器启动时设置,在配置文件中对这些条目的修改将被忽略, 直到下次服务器重启。配置文件中的非法参数设置也会在SIGHUP处理过程中被 忽略(但是会记录日志)。
除postgresql.conf
之外,PostgreSQL 数据目录还包含一个文件postgresql.auto.conf
, 它具有和postgresql.conf
相同的格式但是原自动编辑,而不是手工编辑。 这个文件保存了通过ALTER SYSTEM命令提供的设置。 每当postgresql.conf
被读取时这个文件会被自动读取,并且它的设置会以同样的方式生效。 postgresql.auto.conf
中的设置会覆盖postgresql.conf
中的设置。
外部工具也可以修改 postgresql.auto.conf
. 不建议在服务器运行时执行此操作,因为并发的 ALTER SYSTEM
可能会覆盖这些更改。 这些工具可能只是简单地在末尾附加新的设置,或者它们可能删除重复的设置和/或注释(就像 ALTER SYSTEM
)。
ALTER SYSTEM
ALTER SYSTEM — 更改一个服务器配置参数
大纲
ALTER SYSTEM SETconfiguration_parameter
{ TO | = } {value
| 'value
' | DEFAULT } ALTER SYSTEM RESETconfiguration_parameter
ALTER SYSTEM RESET ALL
描述
ALTER SYSTEM
被用来在整个数据库集簇范围内更改 服务器配置参数。它比传统的手动编辑postgresql.conf
文件的方法更方便。ALTER SYSTEM
会把给出的参数 设置写入到postgresql.auto.conf
文件中,该文件会随着 postgresql.conf
一起被读入。把一个参数设置为 DEFAULT
或者使用RESET
变体可以 把该配置项从postgresql.auto.conf
文件中移除。使用 RESET ALL
可以移除所有这类配置项。
用ALTER SYSTEM
设置的值将在下一次重载服务器 配置后生效,那些只能在服务器启动时更改的参数则会在下一次服务器重启后生效。 重载服务器配置可以通过以下做法实现:调用 SQL 函数pg_reload_conf()
, 运行pg_ctl reload
或者向主服务器进程发送一个SIGHUP信号。
只有超级用户能够使用ALTER SYSTEM
。还有,由于 这个命令直接作用于文件系统并且不能被回滚,不允许在一个事务块或者函数中使用它。