表演时
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。
请建议任何可以支持键值对集合存储在表的任何列中的 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
我在 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
我知道可以将来自外部资源的数据作为外部表嵌入到 postgresql 数据库中,并且已经看到了包括 redis、另一个 postgres 数据库等在内的示例,但我真的找不到任何关于如何使用的资源(或者如果可能的话)将 REST API 的 XML 输出嵌入到外部表中。
任何人都知道这是否可行,如果可以,是否有任何关于如何实施的线索?
我正在构建一个应用程序,它将每隔一段时间使用 JSON 获取消息并将这些消息存储在 postgres 数据库中。现在我想防止重复,所以我计算了消息的 sha-512 并将其设置为主键。由于我想防止重复,我可以做两件事:
考虑到我可能会一次插入几条消息,我想知道方法 2 是否会查找主键并查看每个插入是否存在,而不是仅使用方法 1 在内存中存储一个列表。什么是最多的高效的?
我在实验室中设置了一个 Postgres 数据库 HA 集群。我正在使用 PgPool-II 来管理故障转移。
对于集群本身,我设置了三个相同的 Postgres 9.2 服务器,如下所示:
当服务器 A 出现故障时,服务器 B 接管(这里没有问题)。但是,我需要确保服务器 C 被“重新指向”以从服务器 B 进行流传输。
目前,我正在通过从 B 到 C 进行完整的基本备份来实现这一点 - 它有效,但鉴于两个数据库应该几乎在服务器 A 出现故障时相同......
是否有一种明智的方法可以让服务器 C 在不进行完整基础备份的情况下从服务器 B 开始流式传输?
我不是在寻找黑客来让它工作 - 实验室系统最终将进入生产环境,所以我需要一个可靠的解决方案......
任何建议或指示将是最受欢迎的!
干杯。
我必须收集一些PostgreSQL角色的信息。一条信息是角色是否具有与“通常”不同的设置,这里通常意味着只有少数参数的默认值(例如log_statement)。
到目前为止,我只有一个想法:遍历所有用户并发出命令
\c postgres username
SHOW log_statement;
Run Code Online (Sandbox Code Playgroud)
然后处理输出。
我想知道是否有类似查询pg_settings视图、显示每个用户设置的类似方法?我不需要知道特定于会话的差异,只需要知道那些持久化的差异。
这不是我使用 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) 考虑一种情况,需要执行一堆本质上相同的操作,唯一的变量是某个对象的名称。
在我的情况下,我需要删除一些模式,所有的形式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 版本的方法也很好。
如果解决方案有一个试运行或虚拟选项,那就太好了,这样人们就可以在实际运行之前看到将要运行哪些命令。也许只是打印命令的一种方法?
此外,指示如何处理比给出的示例更通用的模式会很好。
我正在使用 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 ×10
plpgsql ×2
catalogs ×1
dynamic-sql ×1
functions ×1
hstore ×1
mysql ×1
replication ×1
role ×1
users ×1