当我在相关表中添加一行时,我看不到表大小有任何增长。即使添加了 5 行,我也看到相同的内存空间。谁能帮助我并解释我做错了什么?
我有一个查询可以在同一个数据集上运行,有时会失败,有时会成功
查询是由 hive 元数据服务生成的,我无法修改。
这是查询的简化版本:
select
"TBLS"."TBL_ID",
"FILTER0"."PART_ID",
"TBLS"."TBL_NAME",
"FILTER0"."PART_KEY_VAL"
from
"PARTITIONS"
inner join "TBLS" on
"PARTITIONS"."TBL_ID" = "TBLS"."TBL_ID"
and "TBLS"."TBL_NAME" = 'test_table_int'
inner join "PARTITION_KEY_VALS" "FILTER0" on
"FILTER0"."PART_ID" = "PARTITIONS"."PART_ID"
where
cast("FILTER0"."PART_KEY_VAL" as decimal(21, 0)) = 1
当我启动一个新数据库并填充相关表时,这就是整个数据的样子(没有任何过滤器的查询):
并运行上面的查询将返回一行(PART_KEY_VAL
= 1 的那一行)
在我运行一些写入这些表的自动化测试后,问题就开始了。我找不到任何模式,我只是运行了一些写入这些表的复杂测试
现在,如果我再次填充这些表,数据看起来很相似:
但运行上面的查询将导致:
SQL 错误 [22P02]:错误:数字类型的无效输入语法:“c”
出于某种原因,值“c”被转换为十进制并且它失败了,即使对相同数据的相同查询在早些时候工作
这种行为的原因可能是什么?
作为参考,这里是生成查询的地方,但我在上面简化了一点:https ://github.com/apache/hive/blob/rel/release-3.1.2/standalone-metastore/src/main/java /org/apache/hadoop/hive/metastore/MetaStoreDirectSql.java#L1289-L1339
我需要帮助来了解此错误的原因以及如何解决它。
我有一台运行 PostgreSQL 9.3 的服务器。该集群有大约1.000 个数据库。我使用 pgBouncer 来池连接,并且我为每个数据库设置了一个只有 1 个连接的 pool_size。任何时候的活动连接总数为 ~80 。这是因为大多数数据库几乎没有任何活动。
在过去的几个月里,我的应用程序负载一直在缓慢增加,在过去的几天里,我开始看到 postgres 日志文件中间歇性地出现错误。记录错误的时间对应于负载比平时稍高的短暂时刻。请注意,当 postgres 尝试分叉一个新进程以进行连接甚至是 autovacuum 进程时,会发生错误:
2020-05-07 07:16:16 -03 LOG: main could not fork new process for connection: Cannot allocate memory
2020-05-07 07:16:17 -03 LOG: could not fork autovacuum worker process
这些是我的一些 PostgreSQL 设置:
max_connections = 300
shared_buffers = 2GB
effective_cache_size = 2GB
maintenance_work_mem = 1GB
work_mem = 288MB
wal_buffers = 8MB
checkpoint_segments = 16
该服务器有 64GB 的总 RAM,16 个 CPU 内核,运行 CentOS 7。我的堆栈是:Nginx、uWSGI、Redis、pgBouncer 和 PostgreSQL。它们都安装在同一台服务器上,因此必须在堆栈的元素之间共享资源。Redis 设置为使用不超过 30GB 的 RAM。Nginx ~8GB 内存。uWSGI 使用约 10GB 的 RAM。PostgreSQL 使用约 8GB 的 RAM。
我不是 PostgreSQL 方面的专家。我一直在阅读有关内存消耗的文档,考虑到我的设置,我最好的猜测是我需要为 shared_buffers 和 Effective_cache_size 设置更高的值。我得出这个结论是因为这些设置已经存在了很长时间(当我的服务器资源少得多时)。但在过去的几年里,我一直在向我的服务器添加资源,但与此同时它变得更加繁忙。所以我认为shared_buffers 至少应该是8gb,你怎么看?
此外,对于我所读到的内容,我认为我应该使 Effective_cache_size 高于 shared_buffers(考虑到服务器可用的 RAM 量)。我对吗?
还有一件事:你觉得我的 work_mem 设置怎么样?我打算减少它(我不确定为什么将它设置为 288MB)。我知道绝大多数查询都非常简单和快速。这是因为所有数据库都对应于简单的博客应用程序,其中大多数查询都是 SELECT,而 UPDATE 涉及更改特定行的某些值,并不复杂。所以你怎么看?我打算减少work_mem,我的方向正确吗?
非常感谢您!热烈的问候,丽山卓。
我有一个表,其中closure_date 表示为字符变化列。一些日期保存为“43684.5708564815”,也保存为“2019-05-24 18:51:17”。现在我需要从列中提取周数。我尝试了以下查询:
SELECT closure_date,
extract('week' from timestamp '1899-12-30' + interval '1 day' * cast(closure_date as double
precision)) as closure_week,
FROM <table_name>
LIMIT 10000
此查询对于 43684.5708564815 之类的值运行良好,但是在尝试从“2019-05-24 18:51:17”中提取 week_number 时导致错误,说明:
ERROR: invalid input syntax for type double precision: "2019-05-24 18:51:17"
SQL state: 22P02
如何处理错误?有什么建议么?
使用 PostgreSQL 9.3.24
问题
只是简单的操作,但我不知道如何做最简单的方法。
available_count
只有当 sum of s for same product_id
is 0
and onway
is 0
or时,我才能显示结果NULL
?即130479
在这种情况下。我想为每个显示所有值store_id
。
谢谢你。
更新
我尝试在 WHERE 中不允许使用聚合函数。
select
*
from
j_product_store_availability psa
where
sum(available_count) = '0'
and onway = '0'
group by
product_id
order by
product_id
输入。
product_id | store_id | available count | onway
1 | 1 | 0 | 0
1 | 2 | 0 | 0
1 | 3 | 0 | 0
2 | 1 | 0 | 0
2 | 2 | 0 | 0
2 | 3 | 0 | 0
3 | 1 | 0 | 0
3 | 2 | 0 | 0
3 | 3 | 1 | 0
4 | 1 | 0 | 0
4 | 2 | 0 | 0
4 | 3 | 0 | 1
预期输出。
product_id | store_id | available count | onway
1 | 1 | 0 | 0
1 | 2 | 0 | 0
1 | 3 | 0 | 0
2 | 1 | 0 | 0
2 | 2 | 0 | 0
2 | 3 | 0 | 0
我收到以下错误:
pg_restore: [archiver (db)] Error while INITIALIZING:
pg_restore: [archiver (db)] could not execute query: ERROR: unrecognized configuration parameter "idle_in_transaction_session_timeout"
命令是:SET idle_in_transaction_session_timeout = 0;
当我尝试使用恢复数据时
pg_restore -h 172.16.0.70 -U postgres -d newdb05aug19 -1 dirfrmt;
postgres 版本是 PostgreSQL 9.3.23
pg_dump 版本是 pg_dump (PostgreSQL) 9.3.23
pg_restore 版本是 pg_restore (PostgreSQL) 9.3.23
假设我有一个架构,最初有几个年度切片数据,例如:
schema: land_price
- land_price_1990
- land_price_1991
...
- land_price_2010
现在我想创建一个父表,以便更好地管理它们。我首先尝试
ALTER TABLE land_price.land_price_2010 INHERIT land_price.land_price_parents;
但是,它可以工作,当我尝试更改第二个表时,它会失败并返回
ERROR: relation "land_price_parents" would be inherited from more than once
那么在这种情况下,我该如何解决这个问题呢?
ps 这里是版本信息:
select version()
PostgreSQL 9.3.23 on x86_64-unknown-linux-gnu (Ubuntu 9.3.23-2.pgdg14.04+1), compiled by gcc (Ubuntu 4.8.4-2ubuntu1~14.04.4) 4.8.4, 64-bit
两个 pg_catalog 表的vacuum 会遇到以下错误并停在那里。
在真空期间从 relfrozenxid Y 之前找到 xmin X
我可以找到很多关于这个问题的讨论,但很难找到解决方案。除了从备份中恢复数据库之外,这个问题有什么解决方案吗?
postgresql 9.3.22(我知道它很旧,服务器正在逐步淘汰,但现在需要继续工作)。
我有一个场景,我必须动态地将行列表旋转到列。对于特定的order_number
可能有几个product
s。我希望所有这些产品都放在一个单独的列中,以及它的product_id
(也在列中),但我们无法预测特定的order_number
.
附加示例输入表和所需的输出。我已经尝试过该crosstab
功能,但结果不正确。
表值:
期望的输出:
我们使用 Postgres 数据库 (9.3) 作为我们的生产数据库。它正在生成巨大的 lo 对象。因此,规模增长非常快。所以我们需要经常做数据库清理。为了移除这些 lo 对象,我们需要很长的停机时间。
为了清理数据库,我们按顺序执行以下步骤:
Vacuumlo 数据库名称
Vacuumdb 数据库名称 -t pg_largeobject
Vacuumdb 数据库名称 -t pg_largeobject_metadata
reindexdb -t pg_largeobject 数据库名称
reindexdb -t pg_largeobject_metadata 数据库名称
我们可以在没有任何停机时间的情况下在线(在夜间)进行上述操作吗?