小编ala*_*ter的帖子

许多拨款后删除postgres角色和数据库

我正试图drop role从postgres实例高效,并遇到一些问题.我正在寻找一些SQL,drop role以便我可以停止阅读错误消息,而不必手动执行此操作.

在我正在使用的设置中,每个角色都有自己的同名数据库:

CREATE ROLE alpha_user;
CREATE DATABASE alpha_user;
ALTER DATABASE alpha_user OWNER TO alpha_user;
Run Code Online (Sandbox Code Playgroud)

用户通常将对其数据库中的模式的访问权限授予其他用户:

-- alpha_user logs in to the alpha_user database
GRANT USAGE ON SCHEMA myschema TO beta_user;
Run Code Online (Sandbox Code Playgroud)

当我试图放弃时beta_user,会发生这种情况:

-- log in as superuser
DROP ROLE beta_user;
-- ERROR:  role "beta_user" cannot be dropped because some objects depend on it
-- DETAIL:  N objects in database alpha_user
Run Code Online (Sandbox Code Playgroud)

我可以连接到alpha_user数据库,然后删除OWNED BY,但效率很低:

-- log in as superuser
\c alpha_user; …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql database-administration psql

5
推荐指数
1
解决办法
251
查看次数

使用 psycopg cur.execute 创建 postgres 模式

我的 python 应用程序允许用户创建他们命名的模式。我需要一种保护应用程序免受 sql 注入的方法。

要执行的SQL读取

CREATE SCHEMA schema_name AUTHORIZATION user_name;
Run Code Online (Sandbox Code Playgroud)

psycopg 文档(通常)建议像这样传递参数来执行

conn = psycopg2.connect("dbname=test user=postgres")
cur = conn.cursor()
query = 'CREATE SCHEMA IF NOT EXISTS %s AUTHORIZATION %s;'
params = ('schema_name', 'user_name')
cur.execute(query, params)
Run Code Online (Sandbox Code Playgroud)

但这会导致带有单引号的查询失败:

CREATE SCHEMA 'schema_name' AUTHORIZATION 'user_name';
> fail
Run Code Online (Sandbox Code Playgroud)

有没有办法删除引号,或者我应该满足于从模式名称中删除非字母数字字符并称之为一天?后者看起来有点丑,但应该仍然有效。

postgresql psycopg2

3
推荐指数
1
解决办法
4614
查看次数