相关疑难解决方法(0)

如何将 JSON 数组转换为 Postgres 数组?

我有一个data类型的列,json其中包含这样的 JSON 文档:

{
    "name": "foo",
    "tags": ["foo", "bar"]
}
Run Code Online (Sandbox Code Playgroud)

我想将嵌套tags数组转换为连接字符串 ( 'foo, bar')。array_to_string()从理论上讲,使用该函数很容易做到这一点。但是,此功能不接受json输入。所以我想知道如何将这个 JSON 数组变成 Postgres 数组(类型text[])?

postgresql array postgresql-9.3 json

97
推荐指数
4
解决办法
28万
查看次数

优化 PostgreSQL 中的批量更新性能

在 Ubuntu 12.04 上使用 PG 9.1。

目前,我们在数据库上运行大量 UPDATE 语句最多需要 24 小时,它们的形式如下:

UPDATE table
SET field1 = constant1, field2 = constant2, ...
WHERE id = constid
Run Code Online (Sandbox Code Playgroud)

(我们只是覆盖由 ID 标识的对象的字段。)这些值来自外部数据源(尚未在数据库中的表中)。

每个表都有几个索引,没有外键约束。直到最后都没有提交。

导入pg_dump整个数据库的一个需要 2 小时。这似乎是我们应该合理定位的基线。

除了生成以某种方式重建数据集以供 PostgreSQL 重新导入的自定义程序之外,我们是否可以做些什么来使批量 UPDATE 性能更接近导入的性能?(这是一个我们认为日志结构合并树处理得很好的领域,但我们想知道是否可以在 PostgreSQL 中做任何事情。)

一些想法:

  • 删除所有非 ID 索引然后重建?
  • 增加 checkpoint_segments,但这真的有助于维持长期吞吐量吗?
  • 使用这里提到的技术?(将新数据加载为表,然后“合并”在新数据中找不到 ID 的旧数据)

基本上有很多事情要尝试,但我们不确定什么是最有效的,或者我们是否忽略了其他事情。我们将在接下来的几天里进行实验,但我们想我们也会在这里问。

我确实在表上有并发负载,但它是只读的。

postgresql performance bulk update

47
推荐指数
1
解决办法
7万
查看次数

在 PostgreSQL 中实现 UPSERT 的惯用方式

我已经阅读了UPSERTPostgreSQL 中的不同实现,但所有这些解决方案都相对较旧或相对奇特(例如,使用可写 CTE)。

而且我根本不是 psql 专家,无法立即找出这些解决方案是否过时,因为它们被很好地推荐,或者它们(好吧,几乎所有这些都是)只是不适合生产使用的玩具示例。

在 PostgreSQL 中实现 UPSERT 的最线程安全的方法是什么?

postgresql plpgsql upsert

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

UPSERT 函数中的复合类型问题

我在 PostgreSQL 9.1 中有一个名为fun_test. 它有一个复合类型作为输入参数,我在调用它时不断收到转换错误。

CREATE OR REPLACE FUNCTION netcen.fun_test(myobj netcen.testobj)
  RETURNS boolean AS
$BODY$
DECLARE 
tmp_code smallint;
cur_member refcursor;
BEGIN
-- Check if the member exists first
OPEN cur_member FOR 
EXECUTE 'SELECT testkey FROM netcen.test WHERE testkey=' || myobj.testkey ;
FETCH cur_member INTO tmp_code;
CLOSE cur_member;
CASE tmp_code
    WHEN COALESCE(tmp_code,0)=0 THEN
    -- Record not found INSERT a new record
    -- will skip user defined validation for now
    insert into netcen.test values(myobj.testkey,
    myobj.tes,
    myobj.testname);

    ELSE
    -- Record found …
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql postgresql-9.1 upsert

7
推荐指数
2
解决办法
895
查看次数