标签: postgresql-10

Postgres 10:行会在分区之间自动移动吗?

假设我有一个父表,其中的子分区是根据字段的值创建的。

如果该字段的值发生变化,是否有办法让 Postgres 自动将行移动到适当的分区中?

例如:

create table my_table(name text)
partition by list (left(name, 1));

create table my_table_a
partition of my_table
for values in ('a');

create table my_table_b
partition of my_table
for values in ('b');
Run Code Online (Sandbox Code Playgroud)

name在这种情况下,如果我将一行中的值从 更改aaabbb,我怎样才能让它自动将该行移动到my_table_b

当我尝试这样做时(即update my_table set name = 'bbb' where name = 'aaa';),我收到以下错误:

ERROR: new row for relation "my_table_a" violates partition constraint

postgresql partitioning postgresql-10

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

如何在PostgreSQL函数中使用COMMIT和ROLLBACK

我使用三个插入语句,如果第三个语句中有错误,我想回滚第一个和第二个.如果没有办法做到这一点,请告诉我一个不同的方法来处理PostgresqQL中的这个.

如果我使用COMMITROLLBACK,我收到错误.

CREATE OR REPLACE FUNCTION TEST1 ()
   RETURNS VOID
   LANGUAGE 'plpgsql'
   AS $$
BEGIN 

    INSERT INTO table1 VALUES (1);

    INSERT INTO table1 VALUES (2);

    INSERT INTO table1 VALUES ('A');
    COMMIT;
EXCEPTION
   WHEN OTHERS THEN
   ROLLBACK;
END;$$;
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用; COMMIT并且ROLLBACKPostgreSQL函数不支持.

postgresql postgresql-10

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

PostgreSql:错误:从转储文件恢复时不存在关系"序列"

从服务器上的转储文件恢复数据库时出现以下错误:

错误:关系"table_id_seq"不存在第
1行:SELECT pg_catalog.setval('table_id_seq',362,true);

  • 我的本地psql版本是10.2
  • server psql版本是9.6.8

这是我的dump命令:

pg_dump -U username -h localhost db_name > filename.sql
Run Code Online (Sandbox Code Playgroud)

这是我在服务器上的恢复命令:

psql -U username -h localhost db_name < filename.sql
Run Code Online (Sandbox Code Playgroud)

请帮忙,谢谢.

postgresql pg-dump postgresql-9.6 postgresql-10

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

带有pgadmin 4 v3.0的Postgresql 10.4问题-Windows 10 x64用户的查询工具初始化错误

我一直在运行pgadmin4 v2.0,没有任何问题。当我将postgresql升级到10.4时会发生这种情况,我遇到了pgadmin 4 v3.0无法初始化查询工具的问题查询工具初始化错误 我已经多次卸载并重新安装了postgresql,但它仍未解决此问题。我也将pgadmin4降级到v2.0,不幸的是pgadmin4 v2.0现在无法初始化了。我不知道是什么原因导致了这个问题。

我已经通过互联网搜索了解决方案,但只找到了Ubuntu用户解决方案

对于Windows 10 x64用户,有没有人遇到过此问题?请帮忙...

initialization pgadmin-4 postgresql-10

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

如何在postgresql中对字符串使用检查约束

我是 postgres 新手

如何创建带有列名检查约束的表,比如污染,只需要在插入时接受“是”或“否”值。

对于其他值,它应该提示错误消息

我的表名称是车辆

postgresql postgresql-10

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

如何提取 JSONB 数组的元素?

运行 PostgresSQL v10.5。

在我的表中有一个类型为 的table_a列。metadatajsonb

它有一个 JSON 数组作为其键之一,array_key其值如下所示:

[{"key1":"value11", "key2":"value21", "key3":"value31"}, 
 {"key1":"value21", "key2":"value22", "key3":"value23"}]
Run Code Online (Sandbox Code Playgroud)

这就是我查询这个密钥的方式

SELECT metadata->>'array_key' from table_a
Run Code Online (Sandbox Code Playgroud)

这给了我整个数组。有什么方法可以只查询选定的键并可能格式化它们?

数组的类型是文本,pg_typeof(metadata->>'array_key')text

理想的输出是

"value11, value13", "value21, value23"
Run Code Online (Sandbox Code Playgroud)

arrays postgresql aggregate-functions jsonb postgresql-10

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

什么是最适合postgresql 10.5的hibernate.dialect?

我在这里查看休眠文档:https : //docs.jboss.org/hibernate/orm/5.0/javadocs/org/hibernate/dialect/package-summary.html尝试查找hibernate.dialect在persistence.xml中使用的文档

它没有提到Postgres 10.x的类。我应该使用PostgreSQL94Dialect吗?

postgresql hibernate hibernate-5.x postgresql-10

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

如何尽可能透明地将现有的Postgres表迁移到分区表?

我在postgres-DB中有一个现有表。为了演示,它是这样的:

create table myTable(
    forDate date not null,
    key2 int not null,
    value int not null,
    primary key (forDate, key2)
);

insert into myTable (forDate, key2, value) values
    ('2000-01-01', 1, 1),
    ('2000-01-01', 2, 1),
    ('2000-01-15', 1, 3),
    ('2000-03-02', 1, 19),
    ('2000-03-30', 15, 8),
    ('2011-12-15', 1, 11);
Run Code Online (Sandbox Code Playgroud)

但是,与这几个值相比,myTable实际上是巨大的,并且还在不断增长。我正在从该表中生成各种报告,但是目前我98%的报告使用一个月,其余查询的工作时间甚至更短。通常,我的查询使Postgres对这个巨大的表进行表扫描,而我正在寻找减少问题的方法。表分区似乎完全适合我的问题。我可以将桌子分成几个月。但是,如何将现有表转换为分区表?该手册明确指出:

无法将常规表转换为分区表,反之亦然

因此,我需要开发自己的迁移脚本,该脚本将分析当前表并将其迁移。需求如下:

  • 在设计时,myTable覆盖的时间框架是未知的。
  • 从该月的第一天到该月的最后一天,每个分区应覆盖一个月。
  • 该表将无限期增长,因此对于要生成多少个表,我没有理智的“停止值”
  • 结果应该尽可能透明,这意味着我想尽可能少地使用现有代码。在最佳情况下,这感觉就像是一张普通表,我可以在其中插入或选择它们而没有任何特殊之处。
  • 可以接受数据库停机以进行迁移
  • 与纯Postgres相处而无需在服务器上安装任何插件或其他东西的情况是高度首选的。
  • 数据库是PostgreSQL 10,无论如何迟早都会升级到较新版本,因此如果有帮助,则可以选择此选项

我该如何迁移要分区的表?

sql postgresql database-partitioning postgresql-10

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

Postgres 10.3:SELECT查询挂起几个小时

我的应用程序使用Postgres作为DBMS,我使用的Postgres版本是10.3,安装了扩展名Postgis。

有时我注意到,在随机的时间间隔内,dbms变慢并卡在一些SELECT查询中。

pg_stat_activity我注意到,wait_event_typewait_event这些查询的情况如下:

 select wait_event_type, wait_event from pg_stat_activity where state='active'; 
 wait_event_type |  wait_event  
-----------------+--------------
 IO              | DataFileRead
 IO              | DataFileRead
 IO              | DataFileRead
 IO              | DataFileRead
 LWLock          | buffer_io
 LWLock          | buffer_io
 IO              | DataFileRead
 LWLock          | buffer_io
 LWLock          | buffer_io
 IO              | DataFileRead
 IO              | DataFileRead
 LWLock          | buffer_io
 LWLock          | buffer_io
 IO              | DataFileRead
 LWLock          | buffer_io
 IO              | DataFileRead
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io
 LWLock          | buffer_io …
Run Code Online (Sandbox Code Playgroud)

postgresql postgresql-10

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

为 PostgreSQL 设置 lc_monetary

如何设置将( docs ) 数据类型lc_monetary显示为 EUR?money

我试过:

  • 更改postgresql.conf并设置lc_monetary="de_DE.UTF-8@euro。PG 不会因此更改而启动(当前设置为en_US.UTF-8
  • 通过 pgAdmin 和 psql (使用)做同样的事情,set我得到ERROR: invalid value for parameter "lc_monetary"

我当前的整理是en_US.UTF-8.

postgresql collation postgresql-10

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