标签: postgresql

最大分区 PostgreSQL

我有 400,000 条记录需要分区。记录将每年增加 100,000 条,这些新记录可能需要添加 1000 个新分区。

以下是我的一些担忧:

  • 多少个分区太多
  • 小分区是否坏(每个分区可能少于 150 条记录)
  • 大分区将有 10,000 条或更多记录
  • 分区是按字段创建的,而不是按日期创建的
  • 新记录可以每天添加到较大的分区,但较小的分区可能是每月一次
  • 可能需要合法地分离分区数据(某些情况但不是全部)

例子:

假设 100,000 条中的 10,000 条需要分成 100 条记录的分区,因此将创建 1000 个分区,并创建 9 个额外的分区,每个分区包含 10,000 条记录,总共 1009 个分区。

问题:

  • 这种方法行得通吗
  • 这是最好的方法吗,如果不是,还有什么其他想法

笔记:

  • 大多数记录将落入更大的分区

postgresql database-design partitioning

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

如何使用except但从except运算符比较-psql中排除列?

我想比较两组列,但从比较中排除一列,因为它永远不会出现在第二个表中,我的结果需要它。所以,解释:

两个表的列:

  • ID (独特的价值,所以我不想比较)
  • amount
  • email
  • date

我想要实现的目标:从表 1 中获取在amountemail和上具有完全相同值的所有事务date。我也希望ID在最终结果集中,但如果我使用except子句进行比较,我的查询将有 0 个结果。

代码:

Select /*ignoreAtComparison*/ t1.ID, t1.amount, t1.email, t1.date from t1

except

Select /*ignoreAtComparison*/ t2.ID, t2.amount, t2.email, t2.date from t2 ;
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

postgresql except

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

postgresql - 向用户授予架构

我有 (2) 个 postgresql 数据库。我基本上使用相同的 pg_dump 导出文件在不同的机器上创建 (2) db。DDL 是相同的,但是,我收到了no relations其中之一的消息。search_path 设置正确。我相信我错过了让我的(2)个用户看到这个模式的授权。Host2 上的设置是正确的。我只是不知道使用哪个赠款。

信息:

mra_prd_99999=> \dt
No relations found.
Run Code Online (Sandbox Code Playgroud)

主机 1:

mra_prd_99999=> \z
                                                   Access privileges
      Schema       |           Name            | Type  |          Access privileges          | Column access privileges
-------------------+---------------------------+-------+-------------------------------------+--------------------------
 mra_dev_schm_99999 | abc_bounce_category       | table | mra_prd_99999=arwdDxt/mra_prd_99999 |
Run Code Online (Sandbox Code Playgroud)

主机 2:

mra_prd_99999=> \z
                                                        Access privileges
      Schema       |           Name            | Type  |              Access privileges               | Column access privileges
-------------------+---------------------------+-------+----------------------------------------------+--------------------------
 mra_dev_schm_99999 | abc_bounce_category       | table | mra_prd_99999=arwdDxt/mra_prd_99999         +|
                   |                           |       | mra_prd_99999_user1=arwdDxt/mra_prd_99999+|
                   | …
Run Code Online (Sandbox Code Playgroud)

postgresql

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

Postgres 自动插入带时区的时间戳(印度)

有没有办法在插入查询时自动插入带区域的时间戳?(就像 id 自动递增,因为我不想在 sql 中传递参数作为时间,如果我们使用 zone,则每个地方都相同)。pg 9.1 版。以及如何使用所需的时间格式?

postgresql timestamp postgresql-9.1 timezone

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

减少对同一张表的查询次数

我需要使用两个表构建一些报告:

AuthorTitles: id(pk), author_id, title_id
AuthorReports: id(pk), author_id, title_id, items_sold, date
Run Code Online (Sandbox Code Playgroud)

我的报告需要输出以下内容: author_id, max_items_sold_wavg, items_sold_wavg, date

下面的代码可能有一些错误,请检查小提琴。

max_items_sold_wavg 是空闲查询的加权平均值:

WITH maxitems AS ( 
 SELECT
   at.author_id,
   at.title_id,
   max(ar.items_sold) as sold,
   ar.date::date as date
 FROM author_titles at
 LEFT JOIN author_reports ar ON ar.author_id = at.author_id AND at.title_id = ar.title_id
 GROUP BY 1, 2, 4
), totitems AS (
    SELECT
      mi.author_id
      count(ti.title_id) as total,
      count(CASE WHEN (mi.sold = 1) THEN mi.title_id END) AS sold1,
      count(CASE WHEN (mi.sold = 2) THEN mi.title_id END) AS …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-9.3

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

比较日期字符串时的神秘不等式行为

有人可以解释这种神秘的 Postgres 行为吗?我正在psql命令行执行以下查询。

mydb=> select '20150526' > '2015-05-25';
-[ RECORD 1 ]
?column? | t

mydb=> select '20150526' > '2015-05-26';
-[ RECORD 1 ]
?column? | f

mydb=> select '20150526' > '2015-05-27';
-[ RECORD 1 ]
?column? | f
Run Code Online (Sandbox Code Playgroud)

如果 Postgres 实际上是直接比较字符串,则这三个值要么为真,要么为假,这取决于字符排序的定义方式。这似乎表明 Postgres 试图在比较之前将字符串转换为日期,大概是基于对格式的一些启发。然而:

mydb=> select '20150526' < '2015-05-27';
-[ RECORD 1 ]
?column? | t

mydb=> select '20150526' < '2015-05-26';
-[ RECORD 1 ]
?column? | t

mydb=> select '20150526' < '2015-05-25';
-[ RECORD 1 ]
?column? …
Run Code Online (Sandbox Code Playgroud)

postgresql collation datatypes cast

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

PostgreSQL:避免多次对相同值进行 SUM

我有一个学生表和一个不同科目的分数表。我想将所有科目的每个学生的 score1 和 score2 相加,然后为每个学生加上奖金。

CREATE TABLE student (
   id serial PRIMARY KEY,
   name text NOT NULL,
   bonus integer NOT NULL,
);

CREATE TABLE score (
  id serial PRIMARY KEY,
  subject text NOT NULL,
  score1 integer NOT NULL,
  score2 integer NOT NULL,
  student_id integer NOT NULL,
  CONSTRAINT s_id FOREIGN KEY (student_id) REFERENCES student (id),
);
Run Code Online (Sandbox Code Playgroud)

连接 score1 和 score2 的查询如下所示:

SELECT st.name, sum(sc.score1 + sc.score2) as total
FROM student st
LEFT JOIN score sc ON sc.student_id = st.id
group by …
Run Code Online (Sandbox Code Playgroud)

postgresql aggregate sum

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

从 T 中选择行,使得 sum(T.quantity) 大于参数

TLDR:我需要一种方法来限制我的选择,以便只返回填充新订单所需的行。

嘿,我正在寻找一种更好的方法来查询下面的简化玩具表。现在我做了一个简单的选择,然后在 Python 中做一些额外的逻辑来处理完全或部分可填充的行。

id |name   | category |  price  | quantity
---+-------+----------+---------+---------
1  |Robby  | buy      | 45      | 4
2  |Blane  | buy      | 48      | 5
3  |Shawn  | buy      | 43      | 10
4  |Valva  | sell     | 62      | 9
5  |Chris  | buy      | 42      | 15
Run Code Online (Sandbox Code Playgroud)

如果我以 40 美元的价格插入一个新的卖单,数量 = 12

SELECT id, name, price, category
FROM my_table
WHERE price > 40 AND category = 'buy' 
ORDER BY price DESC;
Run Code Online (Sandbox Code Playgroud)

然后在 Python 中,我的逻辑看起来像这样: …

postgresql select

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

PostgreSQL,如何提取表中所有可能的主键对?

我想找出一个 PostgreSQL 命令,它读取一个表的内容,并返回该表的主键的所有可能的耦合。

像这样的东西:

input_table(ID为主键):

- - - - - - - - - - 
ID | label | name
- - - - - - - - - - 
11 | aaa | Jenny

24 | bbb | Larry

35 | ccc | Trevor

48 | ddd | Jules
- - - - - - - - - - 
Run Code Online (Sandbox Code Playgroud)

查询应该返回主键的所有可能的耦合:

- - - - - - - - - - 
ID_left | ID_right
- - - - - - …
Run Code Online (Sandbox Code Playgroud)

postgresql duplication

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

我如何压缩 WAL 文件?

我喜欢紧凑的 WAL 文件。其实我这样做:

archive_command = 'cp "%p"C:\\%f"'
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

postgresql backup windows log write-ahead-logging

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