相关疑难解决方法(0)

生成PostgreSQL中两个日期之间的时间序列

我有这样的查询,很好地生成两个给定日期之间的一系列日期:

select date '2004-03-07' + j - i as AllDate 
from generate_series(0, extract(doy from date '2004-03-07')::int - 1) as i,
     generate_series(0, extract(doy from date '2004-08-16')::int - 1) as j
Run Code Online (Sandbox Code Playgroud)

它在2004-03-07和之间生成162个日期2004-08-16,这就是我想要的.这段代码的问题是,它不会得到正确的答案时,这两个日期都不同年份,例如,当我尝试2007-02-012008-04-01.

有更好的解决方案吗?

postgresql date time-series postgresql-9.1 generate-series

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

search_path如何影响标识符解析和"当前架构"

是否可以定义默认情况下创建新表的模式?(由"不合格的表名称"引用.)

我已经看到了在Postgres中使用"搜索路径"的一些细节,但我认为它只在检索数据时有效,而不是创建.

我有一堆SQL脚本,它们创建了许多表.我没有修改脚本,而是希望默认情况下在特定模式中设置数据库创建表 - 当它们具有非限定名称时.

这可能吗?

postgresql schema search-path database-table

46
推荐指数
2
解决办法
3万
查看次数

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
查看次数

生成一系列日期 - 使用日期类型作为输入

文档generate_series说这样的说法可能是intbigint用于generate_series(start, stop)generate_series(start, stop, step)案件timestamptimestamp with time zonegenerate_series(start, stop, step interval).

generate_series使用date类型作为输入和返回的原因是什么timestamp with timezone

pg=# select generate_series('2014-01-01'::date,'2014-01-02'::date,'1 day');
    generate_series     
------------------------
 2014-01-01 00:00:00+01
 2014-01-02 00:00:00+01
(2 rows)
Run Code Online (Sandbox Code Playgroud)

postgresql types timestamp postgresql-9.1 generate-series

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

奇怪的 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 错误:整数的无效输入语法:“1e+06”

完整的错误信息是:

ERROR: invalid input syntax for integer: "1e+06"
SQL state: 22P02
Context: In PL/R function sample
Run Code Online (Sandbox Code Playgroud)

我正在使用的查询是:

WITH a as
(
 SELECT a.tract_id_alias,
     array_agg(a.pgid ORDER BY a.pgid) as pgids,
     array_agg(a.sample_weight_geo ORDER BY a.pgid) as block_weights
 FROM results_20161109.block_microdata_res_joined a
 WHERE a.tract_id_alias in (66772, 66773, 66785, 66802, 66805, 66806, 66813)
 AND a.bldg_count_res > 0 
 GROUP BY a.tract_id_alias

)
SELECT NULL::INTEGER agent_id, 
     a.tract_id_alias,
     b.year,
    unnest(shared.sample(a.pgids, 
                       b.n_agents, 
                       1 * b.year, 
                       True, 
                       a.block_weights)
                       ) as pgid
FROM a
LEFT JOIN results_20161109.initial_agent_count_by_tract_res_11 b
ON a.tract_id_alias = …
Run Code Online (Sandbox Code Playgroud)

postgresql integer casting function plr

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