如何解决如何设置postgres和psycopg2,使其始终搜索架构而不必明确提及?
我有一个postgres DB,我在其中运行此命令以避免显式提及架构:
ALTER DATABASE ibkr_trader SET search_path TO public;
但是,当我在python中使用psycopg2进行连接时,我仍然必须键入此代码才能访问我的表:
select count(*) from "public"."MY_TABLE"
我什至尝试在psycopg2.connect
中设置选项,但这没用:
return psycopg2.connect(
dbname=self.dbname,user=self.user,password=self.password,port=self.port,host=self.host,options="-c search_path=public"
)
设置此网络的最优雅方法是什么,这样我就不必为每个查询键入"public":"MY_TABLE"
?我的数据库中没有任何其他架构,也不需要明确提及。
解决方法
默认搜索路径应类似于`“ $ user”,public'“,这意味着可以在不指定模式名称的情况下引用公共模式中的表/视图,并且服务器将首先搜索与以下内容匹配的模式:角色名称,然后是公共架构。显然,这已在您的服务器上更改了。
可以为每个用户设置search_path
。 alter user命令如下所示。
alter user username set search_path = 'public'
,
您的ALTER DATABASE和您的options="-c search_path=public"
都对我有用。但是通常您的搜索路径通常已经是公开的,因此,除非您竭尽全力破坏某些东西,否则根本不需要使用它们。
我怀疑您在误解某些内容。如果您尝试select count(*) from MY_TABLE
,那将不起作用。不是因为您缺少"public"
,而是因为您缺少"MY_TABLE"
周围的双引号,因此正在使用小写的名称“ my_table”搜索表。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。