我有 postgresql 9.4。
我知道关于 DBA 和 SO 有很多答案,我知道 wiki 和文档。
但是无论如何,我无法以简单的方式理解拥有主 postgresql 服务器和从主服务器更新的从属 postgresql 服务器的正确方法是什么(尽快,以减少数据丢失)。
此外,我还需要一种方法来在主控失败的情况下自动将从属提升为主控。
我应该使用Repmgr吗?或者我应该只使用 Postgresql 的函数?
谢谢
我有 postgresql 9.4。
我知道关于 DBA 和 SO 有很多答案,我知道 wiki 和文档。
但是无论如何,我无法以简单的方式理解拥有主 postgresql 服务器和从主服务器更新的从属 postgresql 服务器的正确方法是什么(尽快,以减少数据丢失)。
此外,我还需要一种方法来在主控失败的情况下自动将从属提升为主控。
我应该使用Repmgr吗?或者我应该只使用 Postgresql 的函数?
谢谢
我有一些不是时间序列的数据库快照。例如:
第一天快照:
+----+---------------+------------+------------+
| ID | Title | Category | Date |
+----+---------------+------------+------------+
| 1 | My First Post | helloworld | 2015-01-01 |
+----+---------------+------------+------------+
第 2 天快照(今天添加了一个新帖子):
+----+----------------+------------+------------+
| ID | Title | Category | Date |
+----+----------------+------------+------------+
| 1 | My first post | helloworld | 2015-01-01 |
| 2 | My second post | other | 2015-01-02 |
+----+----------------+------------+------------+
第 3 天快照(今天删除了第 2 个帖子):
+----+---------------+------------+------------+
| ID | Title | Category | Date |
+----+---------------+------------+------------+
| 1 | My First Post | helloworld | 2015-01-01 |
+----+---------------+------------+------------+
所以在几天之间,表格的一行可能是不变的,也可能不是。现在,我需要能够使用这样的查询:
SELECT category, COUNT(*) from day1.My_table group by category
这是一天的一张桌子。如果我们想按类别计算一个月内的每日平均帖子数,我们应该执行以下操作:
SELECT category, SUM(cnt) / 30
from (
SELECT category, COUNT(*) as cnt
from day1.My_table
group by category
UNION ALL SELECT category, COUNT(*) as cnt
from day2.My_table
group by category
UNION ALL ...
UNION ALL SELECT category, COUNT(*) as cnt
from day30.My_table
group by category
) group by category
另一个例子,一个月内发表的帖子数:
SELECT COUNT(distinct id)
from (
SELECT id
from day1.My_table
UNION ALL ...
UNION ALL SELECT id
from day30.My_table
)
基本上我们需要考虑权重。如果我们有 day1.My_table 和 day5.My_table,那么第 1 天而不是第 5 天的每个帖子都将被计算为第 2、3、4 天的帖子。第 1 天和第 5 天的每个帖子都将被视为一个月中的每一天(= 直到下一个快照)。
因此,如果我想考虑平均每天 >=6 个月的帖子数,而我只有 1 个快照,我会为该快照分配 30 的权重。
因此,>= 6 个月前一个月内发布的平均帖子为:
SELECT category, SUM(cnt) / 30
from (
SELECT category, COUNT(*)*30 as cnt
from day1.My_table
group by category --- Note: I'm not considering the range defined from the user in this example.
) group by category;
正如评论还指出的那样,我需要进行如下查询:
Select category, AVG(*)
from [fromRange-toRange].MyTable;
对于一个极端的解决方案,我正在考虑实施一种元语言来让未来的用户(例如营销人员)进行这样的查询。
你认为有没有一种方法可以在没有元语言的情况下在 Drill 中实现这一点?我会使用递归 UDF 来执行此操作,但它们无法返回查询。
每个快照都是 250GB 大,我希望能够将这些数据集与其他外部数据进行比较(我事先不知道这些数据集的方案)。
有适合 Apache Drill 的解决方案吗?或者这个问题有其他解决方案吗?
此外,任何有关此问题的元语言或论文都值得赞赏。
编辑: 我们没有交易数据。我们有随时间变化的数据,可以添加或删除;因此,我们需要每天的快照。此外,我们事先不知道将要执行的查询,因此我们无法知道要进行哪种类型的聚合。此外,每行大约有 100 列,每个快照(Mysql 表)有 250GB。我们还需要在每一天、每一行对这些数据进行全文搜索。
搜索的一个例子可以是“有多少帖子是关于某个主题的?” 所以它必须在所有帖子中搜索 sometopic 关键字。每个快照可能有也可能没有相同的行。两个快照也可以有相同的帖子,但稍作修改。
我必须保存几年的时间间隔,例如:
id intervalYears
1 2014/2015
2 2015/2016
3 2016/2017
等等。这些年就像学年,所以第一年必须小于第二年,但大于或等于实际年份。
那么,如何保存这个数据类型呢?我应该分开日期并添加一些约束吗?
我必须创建一个间隔两年的自定义域,但实际上我需要这两年。例如:
'2013/2014'
'2015/2016'
有没有办法将这两年都打包在一个域中,或者我必须将它们分开在关系的两个属性中?
我在postgresql上。我有一个表用户(id 序列不为空)和另一个表客户端(id)我需要创建一个:外键客户端(id)引用用户(id)。
客户端(id)类型应该是什么?整数还是串行?感谢帮助。
我正在创建一个依赖于 PostgreSQL 的 PHP 应用程序。现在我有这个查询:
$query= 'INSERT INTO "users" ("name", "username", "email", "phone") VALUES (\''. $name .'\', \''. $username .'\', \''. $email.'\', '. $phone .')';
$email
,$phone
并且$name
值可以为空。
当我运行这个查询时,我得到一个语法错误。
所以我的问题是:要插入一个空值,我必须手动写入空值还是我在查询中遗漏了什么?
编辑:
似乎我被迫将 null 写为值。