Postgresql 与其他用户共享sql脚本时替换架构名称
与同事协作时,每次收到SQL脚本(Postgres)时,我都需要更改模式名称 我只是公司数据库的普通用户(没有更改任何内容的权限)。此外,我们不允许在Postgresql 与其他用户共享sql脚本时替换架构名称,postgresql,Postgresql,与同事协作时,每次收到SQL脚本(Postgres)时,我都需要更改模式名称 我只是公司数据库的普通用户(没有更改任何内容的权限)。此外,我们不允许在PUBLICschema中创建表。但是,我们可以使用BASEschema中的所有表(只读) 这对于用户团队来说很麻烦,因为每个人都在创建SQL脚本(主要用于创建表),需要在其他人之间共享。每个用户都有自己的模式 是否可以更改下面的脚本,我将在不需要其他用户查找/替换架构的情况下将脚本共享给其他用户,在本例中为user1 如果存在,则删除表格user
PUBLIC
schema中创建表。但是,我们可以使用BASE
schema中的所有表(只读)
这对于用户团队来说很麻烦,因为每个人都在创建SQL脚本(主要用于创建表),需要在其他人之间共享。每个用户都有自己的模式
是否可以更改下面的脚本,我将在不需要其他用户查找/替换架构的情况下将脚本共享给其他用户,在本例中为user1
如果存在,则删除表格user1.table1;
将表user1.table1创建为
从base.table1中选择*;
您可以在脚本开始时设置默认模式(类似于pg_dump
生成的模式):
由于更改为包含user1
作为第一个架构,因此在删除和创建时将在该架构中搜索表。由于搜索路径不包括任何其他模式,因此不会参考任何其他模式
如果你
但是,默认的
搜索路径是“$user”,public
,这意味着将在与当前用户同名的架构中搜索或创建任何不符合条件的表
小心
请注意,DROP TABLE
将在这种情况下找到的第一个模式中删除该表。因此,如果table1
不存在于用户的模式中,而存在于公共模式中,它将从公共模式中删除。因此,对于您的用例,将路径设置为恰好一个模式可能更安全
set search_path = user1;
DROP TABLE IF EXISTS table1;
CREATE TABLE table1 AS
SELECT * FROM base.table1;