You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Logstash无法识别PostgreSQL中已创建的products表问题求助

解决Logstash JDBC无法识别PostgreSQL中已存在的products表问题

针对你遇到的Logstash能连接PostgreSQL但提示products表不存在的问题,以下是几种常见排查方向和解决办法:

1. 检查表名大小写与引号问题

PostgreSQL默认会把未加引号的标识符(表名、列名等)转换为小写。如果你的表实际是Products、PRODUCTS或者带大写字母的命名,直接写SELECT * FROM products;会找不到表。

  • 解决办法:要么把表名改成全小写,要么在SQL语句中给表名加双引号:
    SELECT * FROM "Products";
    

2. 指定表所在的Schema

如果你的products表不是建在默认的public schema下,需要在SQL语句中明确指定schema名:

SELECT * FROM your_schema_name.products;

如果不确定表的schema,可进入PostgreSQL容器执行以下SQL查询:

SELECT table_schema, table_name FROM information_schema.tables WHERE table_name LIKE '%products%';

3. 确认连接的数据库是否正确

检查Logstash配置中的jdbc_connection_string里的shopdb是否是你实际创建products表的数据库。可能存在你在其他库建表,但Logstash连接了空库的情况。

  • 验证方式:进入PostgreSQL容器,切换到shopdb库查看表:
docker exec -it elastic-postgres-1 psql -U postgres -d shopdb
# 进入后执行
\dt

如果看不到products表,说明你建表的库不是shopdb,或者表没创建成功。

4. 检查PostgreSQL数据持久化

如果你的PostgreSQL容器没有挂载本地数据卷,每次重启容器后,之前创建的表和数据都会丢失。检查你的docker-compose.yml中PostgreSQL服务的volumes配置,确保有类似这样的挂载:

services:
  postgres:
    image: postgres:xxx
    volumes:
      - ./postgres-data:/var/lib/postgresql/data

如果没有挂载,重启容器后表会消失,需要重新创建并填充数据,同时添加数据卷配置保证持久化。

5. 验证用户权限(概率较低)

虽然使用的是postgres超级用户,但也可以确认下该用户是否有products表的访问权限:

SELECT has_table_privilege('postgres', 'products', 'select');

返回t表示有权限,f则需要给用户授权:

GRANT SELECT ON products TO postgres;

内容的提问来源于stack exchange,提问作者Nelia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 13:20:29