相关疑难解决方法(0)

什么是VARIADIC声明在postgreSQL中意味着什么?

在PostgreSQL 9.3.4发行说明中它说:

Ensure that the planner sees equivalent VARIADIC and non-VARIADIC function calls as equivalent (Tom Lane)
Run Code Online (Sandbox Code Playgroud)

我搜索了PostgreSQL手册,找不到它的定义.

我发现它与功能参数模式(IN,OUT,VARIADIC)有关,但我不明白这意味着什么?我什么时候想用它?如果函数具有VARIADIC属性,它在性能方面意味着什么?

sql postgresql

8
推荐指数
2
解决办法
4171
查看次数

查询 jsonb 数组的整数成员

背景:我们使用 PaperTrail 来保存我们不断变化的模型的历史。现在我想查询属于某个客户的项目。PaperTrail 可选择存储object_changes,我需要查询此字段以了解何时使用此 ID 创建或更改为此 ID。

我的表看起来像这样简化:

item_type | object_changes
----------|----------------------------------------------------------
"Item"    | {"customer_id": [null, 5], "other": [null, "change"]}
"Item"    | {"customer_id": [4, 5], "other": ["unrelated", "change"]}
"Item"    | {"customer_id": [5, 6], "other": ["asht", "asht"]}
Run Code Online (Sandbox Code Playgroud)

如何查询从 ID 5 更改为或更改为 ID 5 的元素(所以上面的所有行)?我试过:

SELECT * FROM versions WHERE object_changes->'customer_id' ? 5;
Run Code Online (Sandbox Code Playgroud)

这让我:

ERROR:  operator does not exist: jsonb ? integer
LINE 1: ...T * FROM versions WHERE object_changes->'customer_id' ? 5;
                                                                 ^
HINT:  No operator matches the given name …
Run Code Online (Sandbox Code Playgroud)

postgresql ruby-on-rails paper-trail-gem jsonb postgresql-9.6

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

PostgreSQL错误:函数to_tsvector(字符变化,未知)不存在

这个psql会话片段应该是不言自明的:

psql (9.1.7)
Type "help" for help.
=> CREATE TABLE languages(language VARCHAR NOT NULL);
CREATE TABLE
=> INSERT INTO languages VALUES ('english'),('french'),('turkish');
INSERT 0 3
=> SELECT language, to_tsvector('english', 'hello world') FROM languages;
 language|     to_tsvector     
---------+---------------------
 english | 'hello':1 'world':2
 french  | 'hello':1 'world':2
 turkish | 'hello':1 'world':2
(3 rows)

=> SELECT language, to_tsvector(language, 'hello world') FROM languages;
ERROR:  function to_tsvector(character varying, unknown) does not exist
LINE 1: select language, to_tsvector(language, 'hello world')...
                         ^
HINT:  No function matches the given …
Run Code Online (Sandbox Code Playgroud)

sql postgresql types full-text-search casting

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

在PostgreSQL中找不到函数

我在PostgreSQL 11.2中创建了一个用户定义的函数,如下所示。它基本上将值插入到两个不同的表中:

CREATE OR REPLACE FUNCTION public.insertTest(
IN ID1 integer, 
IN Value1 character varying,
IN Value2 character varying,
IN Value3 character varying,
IN Status character varying,
IN Active_Flag integer, 
IN Stuff1 smallint,
IN stuff2 smallint)
RETURNS void
LANGUAGE 'plpgsql'

AS $BODY$
BEGIN

Insert into TableA 
(TA_ID,
 TA_Value1, 
 TA_Value2,
 TA_Value3, 
 TA_Value4,
 TA_Time, 
 TA_Flag)
values 
(ID1,
 Value1, 
 Value2,
 Value3, 
 Status,
 now(), 
 1);

Insert into TableB
(TA_ID,
 TB_ID,      Confidence,     Sev_Rate, 
 Last_Update_Time,   TB_Flag)
values
(currval('tablea_t_id_seq'), --TableA has an auto-increment field
 Active_Flag,    Stuff1,     Stuff2,
 now(), …
Run Code Online (Sandbox Code Playgroud)

postgresql types casting user-defined-functions postgresql-11

4
推荐指数
1
解决办法
217
查看次数

奇怪的 JSON 解释(多态类型),如何解决?

这个合法(!)CASE构造返回一个 JSON 数据类型:

 SELECT CASE WHEN true THEN to_json(1) ELSE to_json('hello') END;
Run Code Online (Sandbox Code Playgroud)

但:

错误:无法确定多态类型,因为输入的类型为“未知”

它不是“多态”,它是 JSON。

...所以,作为糟糕的解决方法(丢失数字/字符串 JSON 表示),

 SELECT to_json(CASE WHEN true THEN 1::text ELSE 'hello' END);
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来执行 SQL 到 JSON 的转换?

postgresql polymorphism json casting

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

如何访问Postgresql中的记录元素?

PostgreSQL v8.2(Greenplum)

CREATE OR REPLACE FUNCTION util.retrec(OUT p1 date, OUT p2 boolean)
RETURNS RECORD
AS
$BODY$
DECLARE
BEGIN
 p1 := current_date;
 p2 := true;
 RETURN;
END;
$BODY$
LANGUAGE plpgsql VOLATILE;

SELECT util.retrec();
Run Code Online (Sandbox Code Playgroud)

这将返回(2016-03-24,t)-我该如何分别提取这两个值?

我可以与之交互进行操作,SELECT p1,p2 FROM util.retrec();但是如何在过程中将两个值分配给两个变量?我尝试了这个:

SELECT util.retrec() INTO r1, r2;
Run Code Online (Sandbox Code Playgroud)

运气不好,这试图将记录分配到r1中。

postgresql greenplum

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