Questions tagged «postgresql»

PostgreSQL的所有版本。如果该上下文很重要,请添加其他特定于版本的标记,例如postgresql-11。

2
具有pgpool架构的Postgres
下面是一个示例pgpool架构: 这意味着您只需要在单个服务器上安装pgpool。这是真的?当我查看配置时,我还看到您在其中配置了后端pgpool.conf。因此它进一步暗示了这一点。但是,这并不能解释为什么我也在后端服务器上看到pgpool。 查看文档时,我还会看到: 如果您使用的是PostgreSQL 8.0或更高版本,则强烈建议在所有可由pgpool-II访问的PostgreSQL上安装pgpool_regclass函数,因为它在pgpool-II内部使用。 所以我不确定该怎么想;最好的做法是在所有后端上或仅在专用服务器上都使用pgpool?


1
如何回收由部分构建并因断电而终止的索引占用的空间
我正在Mac(10.10.4)上运行Postgres(postgis)9.4.2。 我有几个大桌子(几个TB)。 在其中一个索引建立大约一个星期的过程中,我看到了可用的HD空间下降,正如您所期望的那样,当断电持续时间比电池单元和系统更长时,索引将接近完成索引的时间点下去了。fillfactor=100由于它是静态数据源,因此在构建过程中需要缓冲。重新启动后,驱动器上剩余的可用空间恰好接近索引构建即将结束时的位置。真空分析无法释放空间。 我试着放下桌子并重新吃东西,但并没有减少空间。现在,我在一个没有足够空间来建立索引的地方。 索引构建期间生成的文件是否卡在某个状态中,由于机器在断电期间停机而无法被系统删除? 当我查看db中的表大小+索引(这是该驱动器上的唯一数据)时,它们的总和约为6TB。该驱动器为8TB,而驱动器上剩余的空间不足500GB,因此似乎某个地方丢失了约1.5TB的数据,其大小与索引的大小差不多。 有任何想法吗?

2
对范围内的每个日期运行复杂的查询
我有一张订单表 Column | Type | Modifiers ------------+-----------------------------+----------------------------------------------------- id | integer | not null default nextval('orders_id_seq'::regclass) client_id | integer | not null start_date | date | not null end_date | date | order_type | character varying | not null 数据的client_id具有不重叠的常规,并且在临时数据具有匹配的client_id时,有时会覆盖其start_date上的常规。存在应用程序级别约束,以防止相同类型的订单重叠。 id | client_id | start_date | end_date | order_type ----+-----------+------------+------------+------------ 17 …

3
将除一列以外的所有列标记为主键是否合理?
我有一张代表电影的桌子。字段是: id (PK), title, genre, runtime, released_in, tags, origin, downloads。 我的数据库不能被重复的行污染,所以我想强制唯一性。问题在于,除了tags和之外,不同的电影可能具有相同的标题,甚至相同的字段downloads。如何实施唯一性? 我想到了两种方法: 使除downloads主键之外的所有字段。我将其downloads排除在外,因为它是JSON,它可能会影响性能。 仅保留id为主键,但为所有其他列添加唯一约束(再次除外downloads)。 我读过这个非常相似的问题,但是我不太明白该怎么办。当前,该表与任何其他表均不相关,但将来可能与此相关。 目前,我的记录略少于20,000,但是我希望这个数字会增加。我不知道这是否与问题有关。 编辑:我修改了架构,这是我将如何创建表: CREATE TABLE movies ( id serial PRIMARY KEY, title text NOT NULL, runtime smallint NOT NULL CHECK (runtime >= 0), released_in smallint NOT NULL CHECK (released_in > 0), genres text[] NOT NULL default …

2
查找整数序列包含给定子序列的行
问题 注意:我指的是数学序列,而不是PostgreSQL的序列机制。 我有一张表,代表整数序列。定义是: CREATE TABLE sequences ( id serial NOT NULL, title character varying(255) NOT NULL, date date NOT NULL, sequence integer[] NOT NULL, CONSTRAINT "PRIM_KEY_SEQUENCES" PRIMARY KEY (id) ); 我的目标是使用给定的子序列查找行。也就是说,其中sequence字段是包含给定子序列的序列的行(在我的情况下,该序列是有序的)。 例 假设该表包含以下数据: +----+-------+------------+-------------------------------+ | id | title | date | sequence | +----+-------+------------+-------------------------------+ | 1 | BG703 | 2004-12-24 …

2
在Postgres 9.4中将json_to_record与JSON数组元素一起使用时出现“错误:格式错误的数组文字”
这很好地说明了这个问题: 当b列是文本类型而不是数组类型时,将执行以下操作: select * from json_to_record('{"a":1,"b":["hello", "There"],"c":"bar"}') as x(a int, b text, d text); a | b | d ---+--------------------+--- 1 | ["hello", "There"] | 但是,如果我将b列定义为数组,则会出现此错误: select * from json_to_record('{"a":1,"b":["hello", "There"],"c":"bar"}') as x(a int, b text[], d text) ERROR: malformed array literal: "["hello", "There"]" DETAIL: "[" must introduce explicitly-specified array …

2
PostgreSQL中的批量插入M:N关系
我需要将数据从旧数据库导入到新数据库,结构稍有不同。例如,在旧数据库中,有一个表记录员工及其主管: CREATE TABLE employee (ident TEXT PRIMARY KEY, name TEXT, supervisor_name TEXT) 现在,新数据库如下: CREATE TABLE person (id BIGSERIAL PRIMARY KEY, name TEXT, old_ident TEXT); CREATE TABLE team (id BIGSERIAL PRIMARY KEY); CREATE TABLE teammember (person_id BIGINT, team_id BIGINT, role CHAR(1)); 也就是说,新的(更通用的)数据库可以代替创建带有主管名称的普通员工表,而是创建人员团队。员工是有角色的成员'e',主管是有角色的's'。 问题是如何轻松地将数据从迁移employee到新结构,每个员工-主管对一个团队。例如员工 employee: ('abc01', 'John', 'Dave'), ('abc02', 'Kyle', 'Emily') 将被迁移为 …

3
Postgres正在执行顺序扫描而不是索引扫描
我有一个表,其中包含约1000万行,并且在日期字段上有一个索引。当我尝试提取索引字段的唯一值时,即使结果集只有26个项目,Postgres也会运行顺序扫描。为什么优化师会选择此计划?而我该如何避免呢? 从其他答案中,我怀疑这与查询和索引都息息相关。 explain select "labelDate" from pages group by "labelDate"; QUERY PLAN ----------------------------------------------------------------------- HashAggregate (cost=524616.78..524617.04 rows=26 width=4) Group Key: "labelDate" -> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4) (3 rows) 表结构: http=# \d pages Table "public.pages" Column | Type | Modifiers -----------------+------------------------+---------------------------------- pageid | integer | not null default nextval('... …

1
在Postgres中存储大量文本有哪些压缩选项?
我需要在Postgres中存储大量文本,主要是命令日志和长时间运行的命令的输出,并且需要知道是否有一些设置可以使用zlib之类的工具或其他本机空间节省方法来透明地压缩数据。 。 数据主要是只读数据,因此写入不是问题。

1
PostgreSQL bytea与smallint []
我希望将大型(100Mb-1 GB)多通道时间序列数据导入PostgreSQL数据库。数据来自EDF格式文件,该文件将数据分块为通常每个几秒钟的“记录”或“纪元”。每个时期的记录将每个数据通道的信号保存为短整数的连续数组。 我被授权将文件存储在数据库中,在最坏的情况下,存储为BLOB。鉴于此,我想研究一些选项,这些选项将使我可以对数据库中的数据做更多的事情,例如,促进基于信号数据的查询。 我最初的计划是将每个纪元记录的数据存储为一行。我要权衡的是将实际信号数据存储为bytea还是smallint [](甚至是smallint [] [])类型。谁能推荐一个?我对存储和访问成本感兴趣。用法可能只插入一次,偶尔读取,就永远不会更新。如果更容易将其包装为自定义类型,以便我可以添加用于分析比较记录的函数,那就更好了。 毫无疑问,我的细节不够完善,请随时添加您要我澄清的内容的评论。

2
在单个SELECT语句中返回多个范围的计数
我有一个Postgres数据库表foo,除其他外,该表的列score介于0到10之间。我希望查询返回总得分数,0到3之间的得分数,4之间的得分数和6,分数在7到10之间。类似以下内容: SELECT COUNT(*) as total, COUNT( SELECT * from foo where score between 0 and 3; ) as low, COUNT( SELECT * from foo where score between 4 and 6; ) as mid, COUNT( SELECT * from foo where score between 7 and 10; ) as high FROM foo; 我想这一点,但与得到一个错误SELECT的COUNT语句。有什么想法可以做到吗?我敢肯定Postgres中有一种超级简单的方法。我只是想不出正确的字词给Google。

1
如何查看完整的阻止postgres查询?
我正在使用此页面上的语句来查看Postgres中的阻塞查询 SELECT bl.pid AS blocked_pid, a.usename AS blocked_user, ka.query AS blocking_statement, now() - ka.query_start AS blocking_duration, kl.pid AS blocking_pid, ka.usename AS blocking_user, a.query AS blocked_statement, now() - a.query_start AS blocked_duration FROM pg_catalog.pg_locks bl JOIN pg_catalog.pg_stat_activity a ON a.pid = bl.pid JOIN pg_catalog.pg_locks kl ON kl.transactionid = bl.transactionid AND kl.pid != …

2
在Postgres中拥有成千上万的用户可行吗?
我们正在创建SAAS,最多将有50.000个客户。我们正在考虑在Postgres数据库中为每个客户创建一个用户。我们将每个登录我们服务的用户映射到数据库中的一个用户,以确保他们只能访问自己的数据。我们还希望通过此解决方案在触发器中直接在数据库中实现审计跟踪。如果每个客户都有自己的数据库用户,那么即使两个客户共享相同的数据,也很容易看到谁做了什么。 因为我们的数据库中有50.000个用户,我们是否会遇到一些意外问题?绩效方面或管理方面。也许连接池会更困难,但是我真的不知道我们是否需要它。

2
多行插入与多个单行插入
在我的应用程序中,我会尽可能执行多行插入操作,因为这会减少数据库与应用程序之间的往返次数。 但是,我很好奇,还有其他优势吗?例如,如果像这样一次插入多行: insert into tbl (c1, c2) values (v1, v2) (v3, v4) 与: insert into tbl (c1, c2) values (v1, v2) insert into tbl (c1, c2) values (v3, v4) 并且该表具有索引,在第一种情况下该索引是计算一次,在第二种情况下是两次计算?还是每次插入总是一次?假定两个查询都在同一事务中。 我正在使用PostgreSQL。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.