小编Gue*_*ing的帖子

PostgreSQL从pg_catalog表中撤消权限

有没有办法可以撤消用户对目录对象(即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)

有任何想法吗?或者这是不可能的?谢谢...

莱斯利

postgresql permissions

7
推荐指数
2
解决办法
6515
查看次数

PostgreSQL错误:SELECT ... INTO的EXECUTE未实现

当我从我定义的函数运行以下命令时,我收到错误"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)

postgresql user-defined-functions postgresql-8.4

6
推荐指数
1
解决办法
2025
查看次数

PostgreSQL - 选择INTO ARRAY

我一直在搜索这个网站,以了解如何将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)

postgresql multidimensional-array

6
推荐指数
1
解决办法
6129
查看次数