PostgreSQL 9.2 引入了json字段类型。为什么以及何时应该使用它?它比文本字段有什么好处?
我以为有新的查询选项可用,但我没有看到任何选项。我错过了什么吗?
我正在尝试创建一个 Postgres 触发器,以确保在设置列的值后,它无法更新(基本上使其成为只读)。到目前为止,我已经提出了以下草案触发器。
1) 首先,我在正确的轨道上吗?
2) 有回报价值NEW吗?
3) 我必须original_id以NEW.?
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) 每隔几天就会遇到一些问题,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(我使用的是 9.1 版)是否可以通过单个查询批量更新具有另一列值的列值,但如果另一列值为空,则使用第三列的值,如果没有第三个使用当前日期时间(所有列都有 type timestamp)
我需要改变
列A 列B 列C 空 foo 栏 null null baz 空空空
到
列A 列B 列C foo foo 酒吧 巴兹空巴兹 quz null null
quz当前日期时间在哪里。
我想问一个关于仅使用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) 我有两个表,我想查询:pest_counts和pests看起来像:
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) 我有一个这样的查询:
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可能是我想要的 - 但我愿意接受更好的想法:
我正在尝试使用 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。
错误日志窗口不会记录错误,所以我没有更多信息。
如何为 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 应该使用列数据类型的默认值(就像我上面的例子一样),而不是具体指定哪个值。
在 Postgres 12 中,我正在跟踪照片。每个都很大,每个大约 6 到 8 兆。为了快速浏览,我将与完整图像一起存储缩略图。full 和thumbnail 都是 BYTEA 类型的列。
为了性能,我想避免在只需要缩略图时加载完整图像。据我了解,访问一行时,所有 BYTEA 字段值都将加载到内存中。因此,即使在查询中没有明确请求,向用户显示缩略图列表也必然会在服务器上加载完整的照片。
因此,我将把照片表分成两部分,将缩略图存储在主表中,并将缩略图存储在单独的子表中,以一对一的方式。
在这种情况下,子全图表携带其父缩略图行的 ID 作为外键。该外键列在逻辑上也可以用作主键。
我可以指定子项的一列既是外键又是主键吗?如果是这样,是否有任何需要注意的注意事项?
postgresql ×10
array ×1
datatypes ×1
dbeaver ×1
ddl ×1
foreign-key ×1
hierarchy ×1
json ×1
memory ×1
null ×1
order-by ×1
primary-key ×1
ssh ×1
trigger ×1
update ×1