小编Pat*_*ick的帖子

缺少表的FROM子句条目

我试图使用inner join以下查询使用视图和表

SELECT 
   AcId, AcName, PldepPer, RepId, CustCatg, HardCode, BlockCust, CrPeriod, CrLimit, 
   BillLimit, Mode, PNotes, gtab82.memno 
FROM
   VCustomer 
INNER JOIN   
   vcustomer AS v1 ON gtab82.memacid = v1.acid 
WHERE (AcGrCode = '204' OR CreDebt = 'True') 
AND Masked = 'false'
ORDER BY AcName
Run Code Online (Sandbox Code Playgroud)

而错误是

missing FROM-clause entry for table "gtab82"
Run Code Online (Sandbox Code Playgroud)

sql postgresql

45
推荐指数
2
解决办法
11万
查看次数

引用窗口函数的FILTER子句中的当前行

PostgreSQL 9.4中,窗口函数具有a的新选项,FILTER用于选择窗口框架的子集以进行处理.文档提到了它,但没有提供样本.在线搜索会产生一些样本,包括来自2ndQuadrant的样本,但我发现的所有样本都是具有常量表达式的相当简单的例子.我要找的是一个包含当前行值的过滤器表达式.

假设我有一堆包含一堆列的表,其中一列是date类型:

col1 | col2 |     dt
------------------------
  1  |  a   | 2015-07-01
  2  |  b   | 2015-07-03
  3  |  c   | 2015-07-10
  4  |  d   | 2015-07-11
  5  |  e   | 2015-07-11
  6  |  f   | 2015-07-13
...

date在整个表上处理的窗口定义很简单:WINDOW win AS (ORDER BY dt)

我有兴趣知道在当前行(包括)之前的4天中存在多少行.所以我想生成这个输出:

col1 | col2 |     dt     | count
--------------------------------
  1  |  a   | 2015-07-01 |   1
  2  |  b   | 2015-07-03 |   2
  3 …

sql postgresql window-functions postgresql-9.4

14
推荐指数
1
解决办法
2848
查看次数

检索特定角色的所有对象权限

是否有一种简单的方法可以枚举特定角色具有某些访问权限的所有对象?我知道has_*_privilegepg_catalog 中的一组函数,但它们不能完成这项工作,我想反过来工作.实际上,我希望有一个视图,为pg_class中存储的特定角色的任何内容提供oid和访问权限.

这样的视图非常便于检查数据库的安全性是否正确设置.通常,角色的关系远远少于关系,因此检查角色的麻烦要少得多.应该在标准的PostgreSQL发行版中不提供这样的实用程序吗?

根据源代码(acl.h),aclitem是一个结构:

typedef struct AclItem
{ Oid         ai_grantee;     /* ID that this item grants privs to */
  Oid         ai_grantor;     /* grantor of privs */
  AclMode     ai_privs;       /* privilege bits */
} AclItem;
Run Code Online (Sandbox Code Playgroud)

易于使用.但是,pg_type将其列为用户定义的非复合类型.这是为什么?我现在看到的唯一方法是使用字符串函数解析aclitem []数组.有没有更好的方法来分析aclitem数组?

添加信息 在各种PG列表中进行搜索,很明显这个问题至少从1997年开始以各种形式出现(我们有计算机吗?是电视吗?),在讨论主题"Binary in/out for aclitem"在2011年初的pgsql-hackers上.作为PG技术熟练的用户 - 而不是黑客 - 我很欣赏开发人员对维护稳定界面的关注,但是线程中表达的一些关注点有点儿了远非我的口味.什么是在系统目录中没有pg_acl表的真正原因,其定义等于源代码中的AclItem结构?该结构何时发生变化?我也意识到SE的发展很可能会改变安全性的处理方式 - 当用户选择的时候 - 大概是 - 所以我会满足于提供acl信息的东西,以便很容易枚举授予的权限特定用户,例如:

SELECT * FROM pg_privileges WHERE grantee = 16384;
Run Code Online (Sandbox Code Playgroud)

像这样,它仍然可以是底层结构的抽象,因此引擎盖下的任何变化都可能(可能)仍然被转换为暴露的界面.我会说,与information_schema方法没什么不同.

干杯,帕特里克

postgresql

13
推荐指数
1
解决办法
4513
查看次数

如何从PostgreSQL 9.4中的匿名行类型获取第一个字段?

=# select row(0, 1) ;
  row
-------
 (0,1)
(1 row)
Run Code Online (Sandbox Code Playgroud)

如何进入0同一个查询?我认为以下类型的工作,但有任何简单的方法吗?

=# select json_agg(row(0, 1))->0->'f1' ;
 ?column?
----------
 0
(1 row)
Run Code Online (Sandbox Code Playgroud)

没有运气类似阵列的语法[0].

谢谢!

sql postgresql

11
推荐指数
1
解决办法
1622
查看次数

如何有效地找到排序数组中值的索引?

我有一个排序的值数组和一个值,如下所示:

x <- c(1.0, 3.45, 5.23, 7.3, 12.5, 23.45)
v <- 6.45
Run Code Online (Sandbox Code Playgroud)

v我可以找到要插入的值的索引,x同时保持排序顺序:

max(which(x <= v))
[1] 3
Run Code Online (Sandbox Code Playgroud)

这是漂亮而紧凑的代码,但我有一种直觉,在幕后这确实效率低下:因为which()不知道数组已排序,所以必须检查所有值。

有没有更好的方法来找到这个索引值?

注意:我对实际合并vx. 我只想要索引值。

r bisection

10
推荐指数
3
解决办法
1366
查看次数

SELECT 返回空结果集

当我尝试从表中插入和选择数据时,我得到一个空的结果集。我这样做:

reestr-# INSERT INTO datatype(code) VALUES ('blabla')
reestr-# SELECT * FROM datatype
reestr-#
Run Code Online (Sandbox Code Playgroud)

因此,我在控制台中没有收到错误或警告,但仍然无法插入或选择任何数据。顺便说一句,我什至试图插入一个无效的字段cod而不是code没有错误 - 这真的很奇怪。

postgresql

9
推荐指数
1
解决办法
3877
查看次数

查看PostgreSQL-9.5中定义的行级安全策略

我已经构建了全新的PostgreSQL-9.5(alpha),我对行级安全性的新功能感到非常兴奋.这有望使多角色访问管理变得更加简单明了.

作为一个例子,我到目前为止使用的模型中,NOLOGIN角色是数据库的所有者以及所有表,视图,函数等; 然后创建视图以授予对特定角色的适当访问权限.一切都很好,但观点确实激增.CREATE POLICY表上的新命令ENABLE ROW LEVEL SECURITY看起来更清晰,可以达到同一目的.

但是,到目前为止,我还无法确定哪些表是启用RLS的,以及在它们上定义了哪些策略.(显然已经定义了表和策略之后的所有这些.)是否有一种简单的方法可以在启用RLS的表上识别已建立的策略?

(对于那些感兴趣的人,以及许多性能改进,还有期待已久的功能UPSERT和更多jsonb功能.)

postgresql postgresql-9.5

8
推荐指数
1
解决办法
964
查看次数

如何在PostgreSQL中创建guid

如何在Postgres 9.0+中以Windows格式创建GUID?

我试过功能

CREATE or REPLACE FUNCTION public.getguid() RETURNS varchar AS $BODY$ 
DECLARE 
  v_seed_value varchar(32); 
BEGIN 
  select 
    md5( 
      inet_client_addr()::varchar || 
      timeofday() || 
      inet_server_addr()::varchar || 
      to_hex(inet_client_port()) 
    ) 
  into v_seed_value; 

  return (substr(v_seed_value,1,8) || '-' || 
          substr(v_seed_value,9,4) || '-' || 
          substr(v_seed_value,13,4) || '-' || 
          substr(v_seed_value,17,4) || '-' || 
          substr(v_seed_value,21,12)); 
END; $BODY$ LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
Run Code Online (Sandbox Code Playgroud)

http://postgresql.1045698.n5.nabble.com/newid-in-postgres-td1879346.html

试着

select getguid()
union all
select getguid()
Run Code Online (Sandbox Code Playgroud)

但它返回相同的值

"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
"c41121ed-b6fb-c9a6-bc9b-574c82929e7e"
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题,以便返回唯一的行?

postgresql guid plpgsql

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

无法更改视图列SQL的数据类型

我一直收到这个错误

无法将视图列"百分比"的数据类型从整数更改为双精度

我有一个函数调用findIntl()它返回一个浮点数

create or replace function findIntl(integer) returns float as $$
  select cast(count(*) as float)
  from students s
  join program_enrolments pe on (s.id = pe.student)
  where s.stype = 'intl' and pe.semester = $1;
$$ language sql;
Run Code Online (Sandbox Code Playgroud)

我在名为findPercent的视图中使用返回的值

create or replace view findPercent(semester, percent) as
  select q6(s.id), findIntl(s.id)
  from semesters s
  where s.id = id and s.term ~ 'S' and s.year >= 2004;
Run Code Online (Sandbox Code Playgroud)

如果我findIntl()用另一列值替换它完全正常,但findIntl()它什么时候会说cannot change data type of view column "percent" from integer …

sql postgresql

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

在PostgreSQL中选择jsonb列的值

我有一个表'Documents',其中有一个'Tags'列,'jsonb'数据类型.标签列中的示例数据

 [{"Tag": "Social Media"}, {"Tag": "Adobe Creative"}]
 [{"Tag": "Interactive"}]
 [{"Tag": "Web 2.0"}, {"Tag": "Adobe Creative"},{"Tag": "Suite"}]
Run Code Online (Sandbox Code Playgroud)

我需要得到"标签"的不同值

 Social Media 
 Adobe Creative
 Interactive
 Web 2.0
 Suite
Run Code Online (Sandbox Code Playgroud)

我是PostgreSQL的新手.

postgresql jsonb

7
推荐指数
3
解决办法
6045
查看次数