标签: postgresql

我可以用新的 json 字段做什么?

PostgreSQL 9.2 引入了json字段类型。为什么以及何时应该使用它?它比文本字段有什么好处?

我以为有新的查询选项可用,但我没有看到任何选项。我错过了什么吗?

postgresql postgresql-9.2 postgresql-9.3 json

8
推荐指数
1
解决办法
6251
查看次数

如何创建 Postgres 触发器以确保字段不可更新

我正在尝试创建一个 Postgres 触发器,以确保在设置列的值后,它无法更新(基本上使其成为只读)。到目前为止,我已经提出了以下草案触发器。

1) 首先,我在正确的轨道上吗?
2) 有回报价值NEW吗?
3) 我必须original_idNEW.?

CREATE FUNCTION check_id_change() RETURNS TRIGGER AS $$
    BEGIN
        IF OLD.original_id <> NEW.original_id THEN
            RAISE EXCEPTION 'cannot change original_id'; 
        END IF;
        RETURN NEW;
    END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER client_update_trigger AFTER UPDATE ON client FOR EACH ROW
      EXECUTE PROCEDURE check_id_change();
Run Code Online (Sandbox Code Playgroud)

postgresql trigger

8
推荐指数
2
解决办法
7241
查看次数

PostgreSQL 无法分叉 autovacuum 工作进程:无法分配内存

每隔几天就会遇到一些问题,postgres 崩溃并进入恢复模式。postgres 的日志看起来像这样

... Lots of this for 5-10minutes

2015-09-24 10:07:27 GMT LOG:  could not fork autovacuum worker process: Cannot allocate memory
2015-09-24 10:07:28 GMT LOG:  could not fork autovacuum worker process: Cannot allocate memory
2015-09-24 10:07:29 GMT LOG:  could not fork autovacuum worker process: Cannot allocate memory
2015-09-24 10:07:30 GMT LOG:  could not fork autovacuum worker process: Cannot allocate memory
2015-09-24 10:07:32 GMT LOG:  server process (PID 16244) was terminated by signal 9: Killed
2015-09-24 10:07:32 GMT DETAIL:  Failed …
Run Code Online (Sandbox Code Playgroud)

postgresql memory

8
推荐指数
1
解决办法
7215
查看次数

使用另一列或另一列的值更新列

使用 PostgreSQL(我使用的是 9.1 版)是否可以通过单个查询批量更新具有另一列值的列值,但如果另一列值为空,则使用第三列的值,如果没有第三个使用当前日期时间(所有列都有 type timestamp

我需要改变

列A 列B 列C
空 foo 栏
null null baz
空空空

列A 列B 列C
foo foo 酒吧
巴兹空巴兹
quz null null

quz当前日期时间在哪里。

postgresql update

8
推荐指数
2
解决办法
3万
查看次数

如何使用 VIEW 将 Postgresql ltree 结构转换为嵌套集?

我想问一个关于仅使用VIEWs将 PostgreSQL ltree 结构转换为仅具有一个查询的嵌套集结构的方法的问题。

例如,我有一个表,其中包含相互关联的数据,如下图所示:

表结构

所以,表声明是

KeywordLtree(id INT PRIMARY KEY, value TEXT, path ltree);

-- And the data is:

pk |  value  |  path  |
0  |   'A'   |   ''   |
0  |   'B'   |   '1'  |
0  |   'C'   |   '2'  |
0  |   'D'   |  '1.3' |
0  |   'E'   |  '1.4' |
0  |   'F'   |  '1.5' |
0  |   'G'   |  '2.6' |
0  |   'H'   |  '2.7' |
Run Code Online (Sandbox Code Playgroud)

我必须将此表转换为这样的表:

KeywordSets(id INT PRIMARY KEY, …
Run Code Online (Sandbox Code Playgroud)

postgresql hierarchy postgresql-9.4

8
推荐指数
1
解决办法
1362
查看次数

postgresql 中多种记录类型的 generate_series

我有两个表,我想查询:pest_countspests看起来像:

CREATE TABLE pests(id,name)
AS VALUES
  (1,'Thrip'),
  (2,'Fungus Gnosts');

CREATE TABLE pest_counts(id,pest_id,date,count)
AS VALUES
  (1,1,'2015-01-01'::date,14),
  (2,2,'2015-01-02'::date,5);
Run Code Online (Sandbox Code Playgroud)

我想使用 postgres'generate_series来显示日期系列中发现的每种害虫的数量:

预期成绩

name         | date       | count
-------------+------------+-------
Thrip        | 2015-01-01 | 14
Thrip        | 2015-01-02 | 0
....
Fungus Gnats | 2015-01-01 | 0
Fungus Gnats | 2015-01-02 | 5
...
Run Code Online (Sandbox Code Playgroud)

我知道我需要类似以下的东西,但我不确定如何做剩下的事情:

SELECT date FROM generate_series('2015-01-01'::date, '2015-12-31'::date, '1 day') date
Run Code Online (Sandbox Code Playgroud)

postgresql

8
推荐指数
1
解决办法
2865
查看次数

没有元素时如何获得 0 作为 array_length() 结果

我有一个这样的查询:

select id, array_length(users_who_like_ids,1) as ct
from queryables
order by 2 desc;
Run Code Online (Sandbox Code Playgroud)

但是空数组(没有元素)排在最前面。array_length()对于这种情况,我宁愿返回 0,以便将其排序到底部。

我可能不理解array_length()(好吧,绝对)但是:

embers_dev2=# select array_length(array[1,2], 1), array_length(ARRAY[]::integer[],1);
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

应该返回 0 而不是没有(NULL),对吗?

我可以在上面做一个像内联这样的 if 语句吗?

编辑

根据关于 SO 的这个相关答案,它看起来COALESCE可能是我想要的 - 但我愿意接受更好的想法:

postgresql null order-by array

8
推荐指数
1
解决办法
6763
查看次数

DBeaver:通过 SSH 连接到 PostgreSQL 数据库服务器:无法初始化隧道,身份验证失败

我正在尝试使用 DBeaver 通过 SSH 连接到 PostgreSQL 数据库服务器:

can't initialize tunnel
cannot establish tunnel
com.jcraft.jsch.JSchException: auth fail
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我确信 SSH 服务器工作正常。我设法使用 pgAdmin 3 和 RazorSQL 通过同一台 SSH 服务器连接到同一台 PostgreSQL 数据库服务器。我检查了IP,用户名和密码,它们是正确的。我禁用了所有防火墙。可能是什么问题?

我的设置:

在此处输入图片说明

在此处输入图片说明

我使用 DBeaver 3.7.3 x64 便携版和 Windows 7 SP1 x64 Ultimate。

错误日志窗口不会记录错误,所以我没有更多信息。

postgresql ssh dbeaver

8
推荐指数
1
解决办法
3万
查看次数

如何使用数据类型的默认值作为列默认值?

如何为 DDL 中的列指定默认值?我很确定以下方法不久前有效:

CREATE TABLE test
(
  col_1 CHAR(12) NOT NULL,
  col_2 INTEGER  NOT NULL WITH DEFAULT,
  col_3 CHAR(12) NOT NULL WITH DEFAULT
);
Run Code Online (Sandbox Code Playgroud)

我只想定义 DB 应该使用列数据类型的默认值(就像我上面的例子一样),而不是具体指定哪个值。

postgresql database-design datatypes ddl

8
推荐指数
2
解决办法
4万
查看次数

当主键也是外键时,在 Postgres

在 Postgres 12 中,我正在跟踪照片。每个都很大,每个大约 6 到 8 兆。为了快速浏览,我将与完整图像一起存储缩略图。full 和thumbnail 都是 BYTEA 类型的列。

为了性能,我想避免在只需要缩略图时加载完整图像。据我了解,访问一行时,所有 BYTEA 字段值都将加载到内存中。因此,即使在查询中没有明确请求,向用户显示缩略图列表也必然会在服务器上加载完整的照片。

因此,我将把照片表分成两部分,将缩略图存储在主表中,并将缩略图存储在单独的子表中,以一对一的方式。

在这种情况下,子全图表携带其父缩略图行的 ID 作为外键。该外键列在逻辑上也可以用作主键。

我可以指定子项的一列既是外键又是主键吗?如果是这样,是否有任何需要注意的注意事项?

postgresql foreign-key primary-key

8
推荐指数
1
解决办法
5956
查看次数