小编elB*_*rde的帖子

PostgreSQL - 限制总日志大小

我有一个非常简单的要求 - PostgreSQL 日志目录应该有固定的最大大小,例如所有 PostgreSQL 日志的最大大小为 10 GB。

它可以通过创建固定大小的日志并使用日志轮换(例如轮换10个日志文件,每个日志文件1 GB)来实现。

我尝试使用 PostgreSQL 日志记录配置进行设置,但没有成功。问题是“log_truncate_on_rotation”不适用于基于大小的旋转,仅适用于基于时间的旋转。

所以,我的问题是 - 可以仅使用 PostgreSQL 配置来实现还是我必须使用其他东西?如果没有,为什么 PostgreSQL 没有这个功能?

我有几个选择:

  • 使用“log_rotation_size”属性将最大文件大小设置为 1 GB,然后设置 CRON 作业,如果文件计数超过 10,该作业将删除最旧的文件
  • 使用 logrotate 实用程序,但我必须每天执行一次以上

postgresql logging

6
推荐指数
1
解决办法
9101
查看次数

使用 Spring SPEL 解析 JSON

有人可以告诉我为什么这不起作用:

@Test
public void should_parse_json() {
    Expression expression = new SpelExpressionParser().parseExpression("#jsonPath(get('JsonData'), '$.someData')");

    Map<String, Object> data = new HashMap<>();
    data.put("JsonData", "{\"someData\": 100}");

    StandardEvaluationContext context = new StandardEvaluationContext(data);
    context.addPropertyAccessor(new JsonPropertyAccessor());

    assertThat(expression.getValue(context, Object.class)).isEqualTo(100);
}
Run Code Online (Sandbox Code Playgroud)

我收到错误“org.springframework.expression.spel.SpelEvaluationException:EL1006E:找不到函数‘jsonPath’”

我在类路径中有以下 jar:

    <dependency>
        <groupId>com.jayway.jsonpath</groupId>
        <artifactId>json-path</artifactId>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

SPEL 文档对我没有帮助。

spring spring-integration jsonpath spring-el

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

PostgreSQL `IS NOT NULL` 对于复合类型无法正常工作

我正在尝试创建一个函数,该函数应该将表行映射到我的用户定义类型(这是复合类型)并返回结果。如果该表中的某些列为 NULL,则IS NOT NULL检查我的自定义类型不起作用!

例子

我有一个简单的复合类型:

CREATE TYPE my_custom_type AS (
  sender VARCHAR(30),
  destination VARCHAR(30),
  count INTEGER
);
Run Code Online (Sandbox Code Playgroud)

还有一张桌子:

CREATE TABLE messages (
  id INTEGER PRIMARY KEY,
  sender VARCHAR(30),
  destination VARCHAR(30),
  count INTEGER
);
Run Code Online (Sandbox Code Playgroud)

在此示例中插入单行:

INSERT INTO messages VALUES (1, 'sender', 'destination', 100);
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个函数,它将将该行作为自定义 Postgres 类型返回:

CREATE OR REPLACE FUNCTION my_custom_function() 
RETURNS my_custom_type AS
$$
DECLARE
    result my_custom_type;
BEGIN

    SELECT sender, destination, count
    FROM messages
    LIMIT 1
    INTO result;

    IF result IS NULL THEN
        RAISE EXCEPTION 'no data'; …
Run Code Online (Sandbox Code Playgroud)

postgresql plpgsql composite-types sql-null

2
推荐指数
1
解决办法
896
查看次数