假设我有一个父表,其中的子分区是根据字段的值创建的。
如果该字段的值发生变化,是否有办法让 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在这种情况下,如果我将一行中的值从 更改aaa为bbb,我怎样才能让它自动将该行移动到my_table_b。
当我尝试这样做时(即update my_table set name = 'bbb' where name = 'aaa';),我收到以下错误:
ERROR: new row for relation "my_table_a" violates partition constraint
我使用三个插入语句,如果第三个语句中有错误,我想回滚第一个和第二个.如果没有办法做到这一点,请告诉我一个不同的方法来处理PostgresqQL中的这个.
如果我使用COMMIT或ROLLBACK,我收到错误.
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函数不支持.
从服务器上的转储文件恢复数据库时出现以下错误:
错误:关系"table_id_seq"不存在第
1行:SELECT pg_catalog.setval('table_id_seq',362,true);
这是我的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)
请帮忙,谢谢.
我是 postgres 新手
如何创建带有列名检查约束的表,比如污染,只需要在插入时接受“是”或“否”值。
对于其他值,它应该提示错误消息
我的表名称是车辆
运行 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) 我在这里查看休眠文档:https : //docs.jboss.org/hibernate/orm/5.0/javadocs/org/hibernate/dialect/package-summary.html尝试查找hibernate.dialect在persistence.xml中使用的文档
它没有提到Postgres 10.x的类。我应该使用PostgreSQL94Dialect吗?
我在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作为DBMS,我使用的Postgres版本是10.3,安装了扩展名Postgis。
有时我注意到,在随机的时间间隔内,dbms变慢并卡在一些SELECT查询中。
从pg_stat_activity我注意到,wait_event_type和wait_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) 如何设置将( docs ) 数据类型lc_monetary显示为 EUR?money
我试过:
postgresql.conf并设置lc_monetary="de_DE.UTF-8@euro。PG 不会因此更改而启动(当前设置为en_US.UTF-8)set我得到ERROR: invalid value for parameter "lc_monetary"我当前的整理是en_US.UTF-8.
postgresql-10 ×10
postgresql ×9
arrays ×1
collation ×1
hibernate ×1
jsonb ×1
partitioning ×1
pg-dump ×1
pgadmin-4 ×1
sql ×1