我是 PostgreSQL 数据库的新手。最近我们的开发人员需要对我们的系统进行一些升级。
因此,我们计划实施一些方法来实现数据库故障转移。
根据我在此处阅读 postgresql wiki ,我们正在尝试实现热备用或热备用。所以我的问题是:
我有一个 Postgres 8.4 表,其中包含类型为“字符变化”的列,但我想将它们转换为枚举类型。
尝试更改表格时
ALTER TABLE logs ALTER COLUMN interface_type TYPE interface_types
USING interface_type::text::interface_types;
Run Code Online (Sandbox Code Playgroud)
我收到一个错误
default for column "interface_type" cannot be cast to type interface_types
Run Code Online (Sandbox Code Playgroud)
该列的默认值是枚举类型中值的文本版本。所以这应该是可能的,尽管我没有运气谷歌搜索解决方案。
我假设我需要为它定义一个演员表。如何?
我有关于在不同国家旅行的人的数据,如下所示:
country | begintimestamp | distance
Germany | 2015-01-01 00:00:00 | 100
Germany | 2015-01-01 01:12:13 | 30
France | 2015-01-01 02:13:14 | 40
France | 2015-01-01 03:14:15 | 20
Spain | 2015-01-01 04:15:16 | 10
France | 2015-01-01 05:16:17 | 30
France | 2015-01-01 05:17:18 | 5
Germany | 2015-01-01 06:18:19 | 3
Run Code Online (Sandbox Code Playgroud)
我需要的是能够收到这样的结果 -distance与最早的连续行相加begintimestamp:
country | begintimestamp | distance
Germany | 2015-01-01 00:00:00 | 130 // 100+30, the distance of two first rows summed. …Run Code Online (Sandbox Code Playgroud) 这个答案促使我再次思考我的下表,但我仍然不确定如何存储来自数据分析的变量/结果以便在后处理中快速选择。如果存储,我认为它使用部分索引(B 树)做得很好,因为在我这里描述的应用程序中只需要一个数据子集。假设您有三个标准正交表:measurement、events和headers,其中都有一些静态(以字节为单位的事件大小等)列,但想知道从数据分析中存储一些数字是否有益。
没有名称的表模式测量示例:
SERIAL | NOT NULL
INTEGER | NOT NULL
INTEGER | NOT NULL
TIMESTAMP WITH TIME ZONE | DEFAULT CURRENT_TIMESTAMP
Run Code Online (Sandbox Code Playgroud)
由于我需要统计数据,我担心通过 INTEGER 字段增加架构大小。我不想将很少使用的变量存储在主表中。我不希望我的索引没有像PostgreSQL Up & Running和这篇文章中描述的那样被使用,为什么我的索引没有被索引?
可能的来源
什么时候应该将静态/动态统计信息存储在表中?PostgreSQL 的部分索引中如何高效地存储静态/动态统计信息?
我使用带有Sequelize 的PostgreSQL作为我的 ORM。
我有一种类型,User。第二种类型是Group,它可以通过一个GroupMemberships表将任意数量的用户与其关联。Users 也可以拥有任意数量的Groups。
我的第三种类型 ,Playlist可以属于 aUser或 a group。为这种类型设计模式以便它可以拥有一种类型的所有者或两者之一的最佳方法是什么?
我的第一遍创建了两个关联,但一次只填充一个。这可能有效,但看起来很笨拙并且使查询变得困难。
附加信息
以下是我对 MDCCL 通过评论发布的澄清请求的回应:
(1)如果一个播放列表是由给定资集团,可以说,这个播放列表是关系到一个一对多的用户,只要他们是会员这样的小组,对不对?
我相信这在技术上是正确的,但这种一对多关联并不明确存在。
(2) 那么,一个特定的播放列表是否有可能同时被一对多的群组拥有?
不, a 应该不可能被Playlist一对多拥有Groups。
(3) 特定播放列表是否可能由一对多组拥有,同时由不是该组成员的一对多用户拥有?
不,因为如 (2) 中的一对多 from PlaylisttoGroup不应该存在。此外,如果 aPlaylist …
假设我有一个名为 的表people,其中id是主键:
+-----------+---------+---------+
| id | fname | lname |
| (integer) | (text) | (text) |
+===========+=========+=========+
| 1 | Daniel | Edwards |
| 2 | Fred | Holt |
| 3 | Henry | Smith |
+-----------+---------+---------+
Run Code Online (Sandbox Code Playgroud)
我正在尝试编写一个行重复查询,该查询足够健壮,可以解释表的架构更改。每当我向表中添加一列时,我都不想回去修改重复查询。
我知道我可以做到这一点,这将复制记录 ID 2 并为复制的记录提供一个新 ID:
INSERT INTO people (fname, lname) SELECT fname, lname FROM people WHERE id = 2;
Run Code Online (Sandbox Code Playgroud)
但是,如果我添加一age列,则需要修改查询以同时考虑年龄列。
显然我不能执行以下操作,因为它还会复制主键,从而导致duplicate key value violates unique constraint-- 而且,无论如何我都不希望它们共享相同的 ID:
INSERT INTO people …Run Code Online (Sandbox Code Playgroud) 我pg_dump在 PostgreSQL 8.3 服务器中托管的 JIRA 数据库上做了一个。数据库后的尺寸vacuum full为217132652(大约207 MB)。
然后我使用以下命令在 PostgreSQL 9.4 服务器上恢复了 JIRA 数据库:
$ psql -X -v ON_ERROR_STOP=1 -d jira2 -U jira -h localhost < jiradb2017_03_12.sql
Run Code Online (Sandbox Code Playgroud)
我假设自从我使用 以来,任何错误都会退出恢复ON_ERROR_STOP=1,但 SQL 脚本正确完成(尽管有一些与数据恢复无关的警告)。
我最终得到了一个大小为158019348(大约 151 MB)的数据库。
那么,这里有什么故事呢?我是否可以假设数据库已成功恢复并且 PostgreSQL 优化了其存储(介于 8.3 和 9.4 版本之间)引擎并且更有效地使用了空间?
我在不同的机器上有一个带有应用程序服务器和数据库的敏感应用程序,在从数据库的情况下,在不同的数据中心。
尽管我相信我的 postgresqls 被配置为始终使用 ssl,但我需要一种方法来仔细检查这一点。
是否有一些简单的方法可以检查所有客户端连接是否确实被迫使用 ssl?
我有一个 PostgreSQL 数据库,我运行了大量的负载。我希望这个负载尽可能快。我已经在使用复制命令等。
我一直在阅读关于timescaledb以及它如何提供改进的插入性能。但是,如果我只关心插入性能,我想知道使用 hypertables 而不是常规表是否有任何缺点?
我一直在学习SIMPLE和FULL匹配 PostgreSQL 中的外键,我想知道以下思考过程是否正确:
一旦外键的至少一个引用列包含一个NULL值,就没有指向被引用表的链接。这是因为根据 3VL,aNULL无法与另一个NULL值进行比较。这也意味着在相关列中至少包含一个值的引用行被更新或删除时,定义的级联操作(例如... DO DELETE, ... DO SET NULL, ..)NULL永远不会发生,因为没有指向引用行的链接。更具体地说,假设有一个从表A(x, y)到的外键B(x, y)。如果同时A和B包含的行(5, NULL)为x及y,有没有联系,因为NULL该行A是不是等于NULL在列B。
这样对吗?我对 SQL 很陌生,所以我想知道我是否正确理解了这一点。
postgresql ×10
performance ×2
cast ×1
disk-space ×1
dynamic-sql ×1
foreign-key ×1
index-tuning ×1
linux ×1
restore ×1
schema ×1
size ×1
ssl ×1
statistics ×1
subtypes ×1
timescaledb ×1