小编mou*_*r11的帖子

pg_trigger_depth() 用于防止触发器级联(递归)是否不好?

为什么pg_trigger_depth() = 0在防止触发器级联(递归)时使用(除调试之外的)不好?

有人可以提供代码来证明它为什么不好吗?

我猜测是因为如果多个触发器同时处理相同的数据,则停止使用触发器的条件pg_trigger_depth() = 0将停止任何排在第二位的触发器。

我认为这将是解决这个(我的)问题的好方法,但有人告诉我:

认为这会是一个很好的问题。

它在此处作为解决方案提供:

Postgres 9.3 文档:

https://www.postgresql.org/docs/9.3/static/functions-info.html

postgresql trigger

9
推荐指数
2
解决办法
4178
查看次数

季度的通用结束日期,PostgreSQL

我想生成给定日期的通用季度结束日期。

例如:如果我有2010-01-01,我想返回2010-03-31,等等。

我可以得到季度号和年份:

select to_char(date_trunc('quarter',  current_date)::date, 'yyyy-q');
Run Code Online (Sandbox Code Playgroud)

2017-3从今天起返回的是2017-07-14

我如何很好地获得季度结束日期?

我可以得到答案,但它非常丑陋:

select to_char(date_trunc('year',  date '2015-01-01'),'yyyy') || '-' ||case
    when (select extract('quarter' from date_trunc('quarter', date '2015-01-01')::date )) = 1 then '03-31'
    when (select extract('quarter' from date_trunc('quarter', date '2015-01-01')::date )) = 2 then '06-30'
    when (select extract('quarter' from date_trunc('quarter', date '2015-01-01')::date )) = 3 then '09-30'
    when (select extract('quarter' from date_trunc('quarter', date '2015-01-01')::date )) = 4 then '12-31'
    else '?'
    end 
Run Code Online (Sandbox Code Playgroud)

返回2015-03-31因为我把2015-01-01

有没有更好的办法?

postgresql functions date interval

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

金融数据库架构

我的公司正在启动一项旨在从头开始构建财务数据库的新计划。

我们将通过以下方式使用它:

  • 时间序列分析:公司的财务数据(例如:IBM 一段时间内的固定资产总额)、聚合(例如:材料部门一段时间内的固定资产总额)等。
  • 单一公司快照:单一公司的各种数据点
  • 在单个时间范围内(通常是当天)跨多个数据字段分析多家公司。
  • 想法和自定义因素的回测、排名分析、数据分析等。

数据的大致范围:

  • 3000家企业
  • 3500 个数据字段(例如:固定资产总额、收益等)
  • 500 个聚合级别

周期:每日、每月、每季度、每年

20 年的回顾会随着时间的推移而增长

问题:在我们的 PostgreSQL 数据库中,我们应该使用什么模式?现在我正在考虑每个公司的一个时间序列表,完全规范化数据库的每个数据字段类别。例如,一个表用于 IBM 的所有资产负债表字段,另一个表用于 IBM 的现金流项目等,用于所有类别的数据和每个公司。时间戳作为记录和数据字段作为列/字段。然后对于快速查询,创建一个仓库和视图等,它们没有完全规范化,但针对我上面列出的用例的查询进行了优化。但是,如果您查看我上面的公司和领域的数量,如果我的表格很宽,我可能会得到超过 200,000 个表格,仅用于我的基本财务数据,这也不是很好。这是很多表,但我没有看到另一种好的方法来做到这一点。

如果有更好的地方问这个问题,请告诉我。

如果您需要更多信息,我很乐意编辑我的问题并添加它。

PS - 我在 SO Quant 网站上问了一个类似的问题,但没有得到太多的架构帮助。此外,非模式集中的答案是可以的,但请注意,我正在寻求模式设计方面的帮助。

schema data-warehouse database-design timestamp

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

加快查询计算。我在哪里可以添加索引或优化查询或服务器?

我希望加快单个表上的一些计算。

这是表,我相信它有超过 9300 万行,并且每天都在增长:

CREATE TABLE daily_data
(
  id serial NOT NULL,
  company_id integer NOT NULL,
  trade_date date NOT NULL,
  daily_val numeric NOT NULL,
  bbg_pulls_id integer,
  gen_qtr_end_dt_id integer,
  ern_release_date_id integer,
  wh_calc_id integer,
  CONSTRAINT daily_data_pkey PRIMARY KEY (id),
  CONSTRAINT daily_data_bbg_pulls_id_fkey FOREIGN KEY (bbg_pulls_id)
      REFERENCES bbg_pulls (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT daily_data_company_id_fkey FOREIGN KEY (company_id)
      REFERENCES company (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT daily_data_ern_release_date_id_fkey FOREIGN KEY (ern_release_date_id)
      REFERENCES ern_dt …
Run Code Online (Sandbox Code Playgroud)

postgresql performance postgresql-9.3 postgresql-performance

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

使用具有不同日期频率的两个表进行计算

我希望将一个表中的日期与另一个表中具有不同频率的日期对齐。我希望与低频表相关联的值在出现新日期之前重复,以便我可以对涉及两个表的数据进行计算。

为了促进这一点,我认为构建索引范围方案会很有用且更快。

这可能会更清楚...

让我们称之为daily表:

CREATE TEMP TABLE daily AS
SELECT date::date, val FROM ( VALUES
  ('2017-01-01',1),
  ('2017-01-02',2),
  ('2017-01-03',1),
  ('2017-01-04',56),
  ('2017-01-05',7),
  ('2017-01-06',6),
  ('2017-01-07',8),
  ('2017-01-08',6),
  ('2017-01-09',4),
  ('2017-01-10',4),
  ('2017-01-11',6),
  ('2017-01-12',8)
) AS t(date,val);
Run Code Online (Sandbox Code Playgroud)

这是low_fq(低频)表:

CREATE TEMP TABLE lowfq AS
SELECT date::date, val FROM ( VALUES
  ( '2017-01-02',700 ),
  ( '2017-01-06',100 ),
  ( '2017-01-08',200 ),
  ( '2017-01-12',500 )
) AS t(date,val);
Run Code Online (Sandbox Code Playgroud)

结果应该是这样的:

?????????????????????????????????????????????????????????????
?   dialy    ?     ?  ?   low_fq   ?      ?  ? low_fg/daily ?
?????????????????????????????????????????????????????????????
? date       ? val ? …
Run Code Online (Sandbox Code Playgroud)

postgresql timestamp

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