AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-3935

François Beausoleil's questions

Martin Hope
François Beausoleil
Asked: 2014-03-20 11:31:35 +0800 CST

仅给定字段名称,如何访问 NEW 或 OLD 字段?

  • 10

我正在写一个验证触发器。触发器必须验证数组的总和是否等于另一个字段。由于我有很多这种验证的实例,我想编写一个过程并创建多个触发器,每个触发器都有一组不同的字段要检查。

例如,我有以下架构:

CREATE TABLE daily_reports(
     start_on date
   , show_id uuid
   , primary key(start_on, show_id)

     -- _graph are hourly values, while _count is total for the report
   , impressions_count bigint not null
   , impressions_graph bigint[] not null

   -- interactions_count, interactions_graph
   -- twitter_interactions_count, twitter_interactions_graph
);

验证必须确认impressions_count = sum(impressions_graph).

我被卡住了,因为我不知道如何NEW从 plpgsql 中动态访问字段:

CREATE FUNCTION validate_sum_of_array_equals_other() RETURNS TRIGGER AS $$
DECLARE
  total bigint;
  array_sum bigint;
BEGIN
  -- TG_NARGS = 2
  -- TG_ARGV[0] = 'impressions_count'
  -- TG_ARGV[1] = 'impressions_graph'

  -- How to access impressions_count and impressions_graph from NEW?
  RETURN NEW;
END
$$ LANGUAGE plpgsql;

CREATE TRIGGER validate_daily_reports_impressions
ON daily_reports BEFORE INSERT OR UPDATE
FOR EACH ROW EXECUTE
  validate_sum_of_array_equals_other('impressions_count', 'impressions_graph');

我尝试通过做来执行动态命令EXECUTE 'SELECT $1 FROM NEW' INTO total USING TG_ARGV[0],但是 PL/PGsql 抱怨 NEW 是一个未知的关系。

我专门针对 PostgreSQL 9.1。

postgresql trigger
  • 1 个回答
  • 11272 Views
Martin Hope
François Beausoleil
Asked: 2012-12-06 12:09:24 +0800 CST

使用 PgBouncer 与 HAProxy 的优势?

  • 7

使用其中一个有什么优势吗?我只是在查看从我的进程中隐藏主服务器和从服务器的实际 IP 地址的选项,如果主服务器失败,则不必重新启动它们。

如果 Nagios 检测到失败的 master,我仍然想参与进行故障转移,包括告诉 HAproxy / PgBouncer 关于新的 master。

postgresql clustering
  • 2 个回答
  • 5504 Views
Martin Hope
François Beausoleil
Asked: 2012-06-01 17:56:01 +0800 CST

在 9.1 下是否仍建议使用常规 VACUUM ANALYZE?

  • 39

我在 Ubuntu 上使用 PostgreSQL 9.1。是否VACUUM ANALYZE仍建议按计划进行,还是 autovacuum 足以满足所有需求?

如果答案是“视情况而定”,那么:

  • 我有一个较大的数据库(30 GiB 压缩转储大小,200 GiB 数据目录)
  • 我在数据库中进行 ETL,每周导入近 300 万行
  • 变化最频繁的表都继承自一个主表,主表中没有数据(数据按周分区)
  • 我创建每小时汇总,并从那里创建每日、每周和每月报告

我问是因为计划VACUUM ANALYZE影响了我的报告。它运行了 5 个多小时,我这周不得不杀死它两次,因为它影响了常规的数据库导入。check_postgres没有报告数据库有任何明显的膨胀,所以这不是一个真正的问题。

从文档中,autovacuum 也应该处理事务 ID 环绕。问题是:我还需要一个VACUUM ANALYZE吗?

postgresql etl
  • 3 个回答
  • 39541 Views
Martin Hope
François Beausoleil
Asked: 2012-03-01 09:11:22 +0800 CST

在报告服务器上可以允许/限制哪些 DML 命令?

  • 0

我有一个大型数据库 (PostgreSQL 9.1),我正准备使用流复制对其进行复制。第二台服务器将用于报告和备份目的。构建报告时,构建“临时”表通常很有用。通过使用“临时”,我的意思是被认为是临时表,但没有使用CREATE TEMPORARY TABLE.

我可以强制用户只为他们单独的模式创建新表吗?这些架构更改会对流复制产生任何影响吗?主服务器仅在公共架构中有更改。

postgresql replication
  • 1 个回答
  • 134 Views
Martin Hope
François Beausoleil
Asked: 2012-02-10 19:29:05 +0800 CST

PostgreSQL下加快IN查询的方法

  • 6

我有以下形式的查询:

SELECT * FROM twitter_personas WHERE twitter_user_id IN ($1, $2, $3, ..., $25000)

IN 查询有 10 到 25000 个值。查询一次运行几分钟。我有将近 500,000 个这样的查询积压。

twitter_user_id 列已编入索引。关于如何加快速度的任何想法?

# \d twitter_personas
                                    Table "public.twitter_personas"
      Column      |          Type          |                         Modifiers                          
------------------+------------------------+------------------------------------------------------------
 persona_id       | uuid                   | not null
 twitter_user_id  | bigint                 | 
 screen_name      | character varying(40)  | not null
 avatar_url       | text                   | 
 hashval          | integer                | not null default nextval('personas_hashval_seq'::regclass)
Indexes:
    "twitter_personas_pkey" PRIMARY KEY, btree (persona_id)
    "index_twitter_personas_on_screen_name" UNIQUE, btree (screen_name)
    "index_twitter_personas_on_screen_name_persona_id" btree (screen_name, persona_id)
    "index_twitter_personas_twitter_user_id" btree (twitter_user_id) WHERE twitter_user_id IS NOT NULL
postgresql performance
  • 2 个回答
  • 5959 Views
Martin Hope
François Beausoleil
Asked: 2012-02-10 11:56:17 +0800 CST

PostgreSQL下如何指定触发执行顺序?

  • 12

我正在使用触发器使用“经典”基于时间的分区。我发现需要一个单独的触发器,它在原始表上运行。

CREATE TABLE twitter_interactions(...);
CREATE OR REPLACE FUNCTION insert_twitter_interactions ...;
CREATE TRIGGER insert_twitter_interactions_trig
  BEFORE INSERT OR UPDATE on twitter_interactions
  FOR EACH ROW EXECUTE PROCEDURE insert_twitter_interactions();

CREATE OR REPLACE FUNCTION maintain_data_pointers ...;
CREATE TRIGGER maintain_data_pointers_trig
  BEFORE INSERT OR UPDATE on twitter_interactions
  FOR EACH ROW EXECUTE PROCEDURE insert_twitter_interactions();

我还没有完全验证,但我怀疑分区逻辑在维护触发器之前运行,并且由于该行没有最终出现在父表中,所以第二个触发器永远不会触发。

如果我也想运行 an 会发生什么AFTER INSERT OR UPDATE?由于该行没有进入原始表,所以我无法实现 after 逻辑。

postgresql trigger
  • 2 个回答
  • 11328 Views
Martin Hope
François Beausoleil
Asked: 2011-12-06 13:46:58 +0800 CST

在 PostgreSQL 中存储位集?

  • 4

我需要计算覆盖率,按不同的标准分组,并且希望将所有内容都保存在我的数据库中。我正在寻找 PostgreSQL 的预构建位集实现,或者关于如何实现我的目标的指针。

我目前正在做的是将 EWAHCompressedBitSet 的序列化 Java 实例存储在 bytea 列中,但这意味着我必须往返到 Java 进程才能继续我的计算。

理想情况下,我希望能够执行以下操作:

-- Unique people reached during a time window
SELECT   service_name, last_updated_at, bitset_or(followers_bs)
FROM     followers
GROUP BY service_name, last_updated_at

我使用了具有这种功能的商业解决方案(Truviso),它也是基于 PostgreSQL 的。

请注意,我确实有一个表,其中包含未压缩格式的数据,但是由于数据非常庞大(10M 行并且还在计数),加入它所花费的时间比我想要投入的时间要长。

postgresql
  • 1 个回答
  • 1728 Views
Martin Hope
François Beausoleil
Asked: 2011-11-09 05:08:47 +0800 CST

获得对长时间运行的可见性 INSERT INTO ... SELECT

  • 7

我有一个更新汇总表的大型 SQL 插入语句。该过程通常每小时运行一次,大约需要 5 到 10 分钟来计算该时间段内的唯一身份。我“愚蠢地”选择在 15 天的时间内运行它,我想知道我是否可以做些什么来了解它的位置。该过程已经运行了 9 个小时。我只是想知道它是否仍在运行 SELECT 查询,或者它是否正在插入数据:我需要知道我是否应该停止它并执行较小的批次,或者我是否应该让它完成。

由于该声明,我知道服务器已经使用了 9 个小时:

select
    now() - xact_start
  , procpid
  , client_addr
  , client_port
  , current_query
from pg_stat_activity
where xact_start is not null
order by 1 desc

实际查询是:

INSERT INTO summary_show_unique_personas(period, show_id, persona_id, interactions_count)
  SELECT
      date_trunc('hour', created_at) AS period
    , show_id
    , persona_id
    , COUNT(*)
  FROM
          twitter_interactions
    JOIN  show_bindings        USING(interaction_id)
    JOIN  twitter_personas     USING(screen_name)
  WHERE
        created_at >= '__PERIOD_START_AT__' AND created_at < '__PERIOD_END_AT__'
    AND interaction_created_at >= '__PERIOD_START_AT__' AND interaction_created_at < '__PERIOD_END_AT__'
  GROUP BY
    1, 2, 3;
postgresql
  • 1 个回答
  • 1174 Views
Martin Hope
François Beausoleil
Asked: 2011-10-18 18:01:15 +0800 CST

我是否应该花时间将列类型从 CHAR(36) 更改为 UUID?

  • 14

我的数据库中已经有几百万行了。当我设计我的架构时,我不知道 PostgreSQL UUID 数据类型。

其中一张表有 1600 万行(每个分片大约 350 万到 400 万条记录),每天增长大约 50 万条记录。如果需要,我仍然可以将生产系统关闭几个小时。我不会在一两个星期内享受这种奢侈。

我的问题是,这样做值得吗?我想知道 JOIN 性能、磁盘空间使用(完整的 gzip 转储为 1.25 GiB),以及这种性质的事情。

表架构是:

# \d twitter_interactions
                Table "public.twitter_interactions"
         Column          |            Type             | Modifiers 
-------------------------+-----------------------------+-----------
 interaction_id          | character(36)               | not null
 status_text             | character varying(1024)     | not null
 screen_name             | character varying(40)       | not null
 twitter_user_id         | bigint                      | 
 replying_to_screen_name | character varying(40)       | 
 source                  | character varying(240)      | not null
 tweet_id                | bigint                      | not null
 created_at              | timestamp without time zone | not null
Indexes:
    "twitter_interactions_pkey" PRIMARY KEY, btree (interaction_id)
    "twitter_interactions_tweet_id_key" UNIQUE, btree (tweet_id)
    "index_twitter_interactions_on_created_at" btree (created_at)
    "index_twitter_interactions_on_screen_name" btree (screen_name)
Triggers:
    insert_twitter_interactions_trigger BEFORE INSERT ON twitter_interactions FOR EACH ROW EXECUTE PROCEDURE twitter_interactions_insert_trigger()
Number of child tables: 9 (Use \d+ to list them.)
postgresql
  • 4 个回答
  • 3137 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve