我使用QGIS 3.2.4将PostGIS2.5模式的名称从public更改为supervisor;
在那之后,我发现我的数据现在无法显示几何图形。如果您检查pgAdmin 4中的几何图形列,它现在显示**“supervisor.geometry”而不是“geometry”**
看看geom列如何与
类似
当我尝试在pgAdmin中更改列的数据类型时,显示**“geometry”数据类型不再存在,可以找到的是supervisor.geometry**
我使用QGIS 3.2.4将PostGIS2.5模式的名称从public更改为supervisor;
在那之后,我发现我的数据现在无法显示几何图形。如果您检查pgAdmin 4中的几何图形列,它现在显示**“supervisor.geometry”而不是“geometry”**
看看geom列如何与
类似
当我尝试在pgAdmin中更改列的数据类型时,显示**“geometry”数据类型不再存在,可以找到的是supervisor.geometry**
2条答案
按热度按时间n6lpvg4x1#
您已经以用户Postgres(可以在数据库中做任何想做的事情)的身份登录并重命名了公共模式,现在存储在公共模式中的扩展不再工作。
老实说,这句话里的一切都是错的。
将其重命名为
public
-小写,这应该可以解决您的直接问题。然后,决定你想要什么:在另一个方案中有postgis函数?禁止在
public
中创建对象?默认情况下允许在另一个方案中创建新对象?将GIS表移动到另一个方案?然后阅读有关在另一个模式中安装或移动
Postgis
扩展,有关创建新用户,有关创建新模式,有关向用户授予对模式和表的使用/读/写访问权限,有关设置search_path
等。最后但并非最不重要的是,请记住以下两个提示:
1.保持公共模式不变(如果您愿意,可以阻止用户使用它)
1.永远不要使用超级用户帐户(如
Postgres
)来执行日常任务(相反,创建不同的数据库用户,只需为其任务提供足够的权限即可。如果用户只需要对几个表进行读/写,则不需要删除整个数据库)fiei3ece2#
由于
"$user", public
的默认search_path
设置(数据库设置,而不是环境变量),您以前所知道的geometry
实际上是public.geometry
。每当你引用一个表、类型或任何没有指定模式的东西时,Postgres首先检查是否有一个模式与你当前的用户同名(
"$user"
),如果该对象在其中。然后它检查了public
,因为它是PostGIS类型和函数默认所在的位置,它实际上还检查pg_catalog
的内置内容,以及特定于会话的pg_temp_nnn
,其中您的temp
对象。现在您将
public
重命名为Supervisorrrrr
,geometry
不再位于它在search_path
列表中检查的任何架构中。但你最好把它改回来以免弄坏其他东西。
如果你想把你的东西从
public
中移出来,运行一系列的alter
:为了在将来保持整洁(-er/-ish),您可以
public
中的其他内容。这样,后续的查询将在默认情况下针对新的模式,而不会乱丢
public
,同时仍然能够引用public
中的类型和函数。