标签: postgresql

如何访问PL/pgSQL中RETURNs累积的行数

表演时

RETURN QUERY ...
Run Code Online (Sandbox Code Playgroud)

在 PL/pgSQL 函数中,之后是否可以直接访问累积到记录堆中的行数,在函数结束时返回这些行数?

例子:

RETURN QUERY SELECT * FROM tableA; -- 14 records
RETURN QUERY SELECT * FROM tableB; -- 8 records
RETURN QUERY SELECT * FROM tableC; -- 22 records
Run Code Online (Sandbox Code Playgroud)

累积记录的数量现在应该是 44。

postgresql plpgsql functions

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

在 MySQL 中实现 PostgreSQL hstore 功能

请建议任何可以支持键值对集合存储在表的任何列中的 MySQL 5.5+ 引擎。

我不知道这个特性是否在 MySQL 中开箱即用,如 PostgreSQL 等价于HSTORE,它非常有用并增加了一些 NoSQL 的好处..

PostgreSQL 中的示例 -

SELECT 'a=>1,a=>2'::hstore;
  hstore
----------
 "a"=>"1"
Run Code Online (Sandbox Code Playgroud)

来源 - http://www.postgresql.org/docs/current/static/hstore.html

mysql postgresql hstore

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

setof 类型或 setof 记录的串联

我在 Ubuntu 12.04 上使用 Postgresql 9.1。

在一个plpgsql函数中,我尝试连接setof从另一个函数返回的类型。

type pair_id_value问题的创建与create type pair_id_value as (id bigint, value integer);

返回基本的函数setof pair_id_value(稍后将被连接的那些)是这样的:

create or replace function compute_pair_id_value(id bigint, value integer)
    returns setof pair_id_value
as $$
    listResults = []
    for x in range(0,value+1):
        listResults.append({ "id": id, "value": x})
    return listResults
$$
language plpython3u;
Run Code Online (Sandbox Code Playgroud)

这个直截了当的 plpython 代码应该很好,例如查询:select * from compute_pair_id_value(1712437,2);返回很好:

  id            | value 
 ---------------+-----------
        1712437 |         0
        1712437 |         1
        1712437 |         2
 (3 rows) …
Run Code Online (Sandbox Code Playgroud)

postgresql stored-procedures plpgsql postgresql-9.1 set-returning-functions

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

REST web 服务作为 postgresql 中的外部数据包装器

我知道可以将来自外部资源的数据作为外部表嵌入到 postgresql 数据库中,并且已经看到了包括 redis、另一个 postgres 数据库等在内的示例,但我真的找不到任何关于如何使用的资源(或者如果可能的话)将 REST API 的 XML 输出嵌入到外部表中。

任何人都知道这是否可行,如果可以,是否有任何关于如何实施的线索?

postgresql

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

防止重复最有效

我正在构建一个应用程序,它将每隔一段时间使用 JSON 获取消息并将这些消息存储在 postgres 数据库中。现在我想防止重复,所以我计算了消息的 sha-512 并将其设置为主键。由于我想防止重复,我可以做两件事:

  1. 从数据库中获取所有散列,并查看何时插入新消息,如果散列已经存在(检查代码)
  2. 使用插入忽略(在 postgres 中可能是更新,因为 postgres 不支持插入忽略)并让数据库处理这些异常

考虑到我可能会一次插入几条消息,我想知道方法 2 是否会查找主键并查看每个插入是否存在,而不是仅使用方法 1 在内存中存储一​​个列表。什么是最多的高效的?

postgresql

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

流式复制故障转移 - 如何将第二个从站指向新的主站?

我在实验室中设置了一个 Postgres 数据库 HA 集群。我正在使用 PgPool-II 来管理故障转移。

对于集群本身,我设置了三个相同的 Postgres 9.2 服务器,如下所示:

  • 服务器 A - 主数据库
  • 服务器 B - 具有同步流式复制的从数据库
  • 服务器 C - 带有异步流复制的从数据库(可能的同步服务器)

当服务器 A 出现故障时,服务器 B 接管(这里没有问题)。但是,我需要确保服务器 C 被“重新指向”以从服务器 B 进行流传输。

目前,我正在通过从 B 到 C 进行完整的基本备份来实现这一点 - 它有效,但鉴于两个数据库应该几乎在服务器 A 出现故障时相同......

是否有一种明智的方法可以让服务器 C 在不进行完整基础备份的情况下从服务器 B 开始流式传输?

我不是在寻找黑客来让它工作 - 实验室系统最终将进入生产环境,所以我需要一个可靠的解决方案......

任何建议或指示将是最受欢迎的!

干杯。

postgresql replication

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

如何在 PostgreSQL 中获取用户特定的设置?

我必须收集一些PostgreSQL角色的信息。一条信息是角色是否具有与“通常”不同的设置,这里通常意味着只有少数参数的默认值(例如log_statement)。

到目前为止,我只有一个想法:遍历所有用户并发出命令

\c postgres username

SHOW log_statement;
Run Code Online (Sandbox Code Playgroud)

然后处理输出。

我想知道是否有类似查询pg_settings视图、显示每个用户设置的类似方法?我不需要知道特定于会话的差异,只需要知道那些持久化的差异。

postgresql role configuration users

5
推荐指数
2
解决办法
7500
查看次数

PosgreSQL:设置高 work_mem 不会避免磁盘合并

这不是我使用 postgres 的一天。在我使用 PosgreSQL 9.2.3 的服务器机器上,我将 work_mem 设置为 4MB 以避免Sort Method: external merge Disk: 2072kB但它没有帮助:

cwu=# vacuum analyze web_city;
VACUUM
cwu=# SHOW work_mem;
 work_mem 
----------
 4MB
(1 row)
cwu=# explain analyze select count(*) from web_city GROUP BY (left(name,5));
                                                          QUERY PLAN                                                          
------------------------------------------------------------------------------------------------------------------------------
 GroupAggregate  (cost=18304.35..20487.34 rows=95562 width=10) (actual time=1557.871..1809.029 rows=64459 loops=1)
   ->  Sort  (cost=18304.35..18633.84 rows=131796 width=10) (actual time=1557.856..1707.069 rows=131796 loops=1)
         Sort Key: ("left"((name)::text, 5))
         Sort Method: external merge  Disk: 2072kB
         ->  Seq Scan on web_city  (cost=0.00..4842.45 rows=131796 width=10) (actual time=1.050..174.907 …
Run Code Online (Sandbox Code Playgroud)

postgresql

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

删除一组具有相似名称模式的模式

考虑一种情况,需要执行一堆本质上相同的操作,唯一的变量是某个对象的名称。

在我的情况下,我需要删除一些模式,所有的形式ceu_shard_test_merge_*,以使用 shell globbing 术语。所以,从概念上讲,这可以写成

DROP SCHEMA ceu_shard_test_merge_* CASCADE;
Run Code Online (Sandbox Code Playgroud)

以类比 Unix shell。

当然这个命令不起作用,那么如何用一个命令来做到这一点呢?我的理解是,这不能以可移植的方式完成。我使用的是 PostgreSQL 8.4,但用于更新 PG 版本的方法也很好。

如果解决方案有一个试运行或虚拟选项,那就太好了,这样人们就可以在实际运行之前看到将要运行哪些命令。也许只是打印命令的一种方法?

此外,指示如何处理比给出的示例更通用的模式会很好。

postgresql dynamic-sql pattern-matching catalogs

5
推荐指数
2
解决办法
6263
查看次数

为了完整性而去规范化是不是一个好主意?

我正在使用 Postgres 9.2 开发一个测验应用程序,在该应用程序中,我向用户展示了一系列问题并记录了他们的答案。

这些问题可以有多种形式——它们可能是多项选择(什么是 2 + 2?A:2。B:3。C:4),或者它们可能需要用户自己计算答案,在这种情况下我需要将他们的输入限制为“440”或“1/2”或“.333”之类的内容。一些问题可能会提示用户输入一篇文章。而且,当然,我以后可能需要添加更多类型的问题。

我设想的表格,以简化的形式,是这样的:

CREATE TABLE problems
(
  problem_id serial NOT NULL PRIMARY KEY,
  problem_type text NOT NULL, -- Refers to a lookup table
  answer_letter text, -- If not null, refers to the correct answer in the answers table below.
  response text -- If not null, represents a correct answer to be input, like '0.4'
);

CREATE TABLE answers
(
  problem_id integer, -- Foreign key
  answer_letter text,
  content text,

  CONSTRAINT answers_pkey PRIMARY KEY (problem_id, answer_letter) …
Run Code Online (Sandbox Code Playgroud)

postgresql database-design

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