我试图找出是否有办法从已设置服务器复制的从属 PostgreSQL 服务器查询主服务器。
从奴隶,我可以:
SELECT pg_is_in_recovery()
Run Code Online (Sandbox Code Playgroud)
如果我在从站上,这会给我一个“t”结果,而在主站上给我一个“f”结果,这是第一步。
接下来,我想运行一个查询,该查询为我提供有关它正在复制的主节点的一些信息。最好是 IP 地址或主机名。
作为记录,我可以使用以下命令查询 master:
SELECT * from pg_stat_replication
Run Code Online (Sandbox Code Playgroud)
这会给我关于奴隶的信息。我希望有一种查询奴隶的互惠方法。
这可能吗?如果是这样,如何?
我有几个表,每个表有 100-300 列整数类型,它们保存高度易变的数据。数据集由一两个主键作为键,刷新时删除整个数据集,并在一个事务中插入新数据。数据集大小通常是几百行,但在极端情况下可以达到几千行。每秒刷新一次,不同键的数据集更新通常是脱节的,因此删除和重新创建表是不可行的。
我如何调整 Postgres 来处理这样的负载?如果这有什么不同,我可以使用最新和最好的版本。
我已经使用 pgadmin3 工具从 system1 备份了 postgresql 数据库。创建的备份文件的扩展名为“.backup”
我试图在安装了 postgresql 9.0 和 pgadmin3 1.8 的另一个系统 2 上恢复它,但我收到错误
无法执行查询:错误:无法识别的配置参数“lock_timeout” 命令为:SET lock_timeout = 0;
两个系统的配置
system1 win7-64 位 postgresql 9.0.13-1 - 64 位 pgadmin 1.8
system2 win7-32bit postgresql 9.0.13-1 - 32bit pgadmin 1.8
我想知道自定义 pg_dump 格式在 Postgres 版本之间有多稳定。例如,我可以在 postgres 9.x 中恢复使用 Postgres 8.x 创建的自定义格式转储吗?
背景:
我正在构建一个虚拟设备,其中包含 PostgreSQL 数据库中的所有配置。我必须决定是使用 SQL 格式还是自定义格式进行备份。随着设备随着时间的推移(几年)不断发展,我将使用更新的 PostgreSQL 版本,并且仍然需要能够轻松恢复旧备份。
假设表“entity.eid”是自动递增的,我希望能够引用稍后在同一事务中分配的自动递增值。我一直这样做的方式是进行我认为不是最佳的多个交易。
START TRANSACTION;
INSERT INTO entity ...;
INSERT INTO t2 (eid, ...) VALUES (?NEW EID REF HERE?, ...), (...), (...);
COMMIT;
Run Code Online (Sandbox Code Playgroud) 我有一个 PostgreSQL 表,我需要创建一个带有新列的视图。此列需要是从 1 开始到 N 的自动增量列。
这是否可以在不影响遗留数据结构的原始模式的情况下完成?
令我大吃一惊(而且令人担忧)的是,我刚刚意识到我的表有数百万行,只有几行,其中主键 (ID) 是重复的!我不明白这怎么会发生,以及我将来如何防止它?
保存主键的列是,并且一直受制于 CONSTRAINT fruits_pkey PRIMARY KEY(id);
我在 ubuntu 上运行 postgreql 9.3.4。
更新
@Mat:数据类型是integer
@ypercube:是的,select count(*) from (select count(*) from fruits group by id having count(*) > 1) as t1返回41。
@Craig:是的,我之前做过故障转移,我的slave实际上是9.3.3
我有一个巨大的整数数组列表(300,000,000 条记录)存储在 Postgres 9.2 DB 中。我想有效地搜索这些记录以获得完全匹配(仅相等)。我听说过 intarray 模块和相应的 gist-gin 索引。我想问以下问题:
我已经看到了使用此示例进行批量插入的好方法:
WITH p AS (
INSERT INTO parent_table (column_1)
SELECT $1
RETURNING id)
INSERT INTO child_table (parent_table_id, column_a)
SELECT p.id, a
FROM p, unnest($2::text[]) AS a
Run Code Online (Sandbox Code Playgroud)
但是,我需要从多个数组中插入多行,所以我尝试了以下语法:
WITH p AS (
INSERT INTO parent_table (column_1)
SELECT $1
RETURNING id)
INSERT INTO child_table (parent_table_id, column_a, column_b)
SELECT p.id, a, b
FROM p, unnest($2::text[]) AS a, unnest($3::bigint[]) AS b
Run Code Online (Sandbox Code Playgroud)
我在parent_table_idand上有一个主键column_a,当我尝试执行此查询时,Postgres 抱怨重复键冲突。
应该如何解开数组以便它们形成单独的行?
换句话说,如果$2和$3都有两个条目,那么第一个条目如何$2只插入第一个条目,$3并且对于各自的第二个条目都相同?
如果这是不可能的,我可以构造一个多维数组吗?如果是这样,它应该如何与多种数组类型一起传递,多维数组语法是什么?
我正在尝试在格式为 PostgreSQL 查询中返回一个文本字段
'stringOne' || string_agg(field, ',') || 'stringTwo'
Run Code Online (Sandbox Code Playgroud)
对于 group 子句中的某些元素, wherefield始终为 null。我想要并期望stringOnestringTwo在这种情况下结束,但我得到NULL.
为什么会这样,我如何完成我想要做的事情?
假设我有桌子
foo bar
+----+--------+ +----+-------+--------------+
| id | name | | id | fooid | baz |
+----+--------+ +----+-------+--------------+
| 1 | FooOne | | 1 | 1 | FooOneBazOne |
| 2 | FooTwo | | 2 | 1 | FooTwoBazTwo |
+----+--------+ +----+-------+--------------+
Run Code Online (Sandbox Code Playgroud)
我运行查询
SELECT
foo.name AS foo,
'Bazzes: ' || string_agg(bar.baz, ', ') AS bazzes …Run Code Online (Sandbox Code Playgroud) postgresql ×10
aggregate ×1
array ×1
backup ×1
btree ×1
bulk-insert ×1
concat ×1
gist-index ×1
null ×1
optimization ×1
pgadmin ×1
restore ×1
view ×1