有没有办法可以撤消用户对目录对象(即information_schema)和PostgreSQL表(即pg_catalog)的权限?我已经尝试了几件事并且在网上搜寻.我没有运气.我读到的唯一有用的是我可能不想从系统表中删除"public",以防用户定义的函数依赖于其中一个模式中的对象.下面的命令是我没有使用的一小部分快照,除了单个表.
REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM PUBLIC; -- didn't work
REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM public; -- didn't work
REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM user1; -- didn't work
REVOKE SELECT ON pg_catalog.pg_roles FROM user1; -- worked
REVOKE SELECT ON pg_catalog.pg_database FROM user1; -- didn't work
REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM g_users; -- didn't work
REVOKE SELECT ON pg_catalog.pg_database FROM g_users; -- didn't work
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?或者这是不可能的?谢谢...
莱斯利
当我从我定义的函数运行以下命令时,我收到错误"SELECT ... INTO的EXECUTE未实现".这是否意味着不允许特定命令(即"SELECT ... INTO")?或者它只是意味着我做错了什么?导致错误的实际代码如下.如果答案已经在这里,我道歉,但是我看起来并且找不到这个特定的错误.在此先感谢...无论如何,我都在运行8.4.7
vCommand = 'select ' || stmt.column_name || ' as id ' ||
', count(*) as nCount
INTO tmpResults
from ' || stmt.table_name || '
WHERE ' || stmt.column_name || ' IN (select distinct primary_id from anyTable
WHERE primary_id = ' || stmt.column_name || ')
group by ' || stmt.column_name || ';';
EXECUTE vCommand;
Run Code Online (Sandbox Code Playgroud) 我一直在搜索这个网站,以了解如何将select语句的结果转储到数组中,因此我可以迭代一个数组.但是我没有幸运地找到一个简单的例子.下面的代码是我所做的一个例子.但是,我无法弄清楚如何使用数组执行此操作.只有一行构造.每当我尝试将查询结果分配给数组时,我都会得到这个子查询错误(例如"array:=(select from from sometable)",我理解,但必须有一种方法可以做到这一点.谢谢事先.(补充:PSeudo-Code,我喜欢这个实际代码).
DO
$$
DECLARE
nRowCount bigint;
i record;
BEGIN
DROP TABLE IF EXISTS companies_sample_db_temp;
CREATE TABLE companies_sample_db_temp (
col1 varchar
, col2 varchar
, col3 varchar
);
INSERT INTO companies_sample_db_temp VALUES ('McDonalds','Los Angeles','CA');
INSERT INTO companies_sample_db_temp VALUES ('Starbucks','Seattle','WA');
INSERT INTO companies_sample_db_temp VALUES ('Oracle','San Francisco','CA');
-- SELECT * FROM companies_sample_db_temp;
FOR i IN
with a as
(
SELECT
ARRAY[col1::text
, col2::text
, col3::text
] as coltext
FROM companies_sample_db_temp AS my_arr
)
select row_number() over(), coltext from a
LOOP …Run Code Online (Sandbox Code Playgroud)