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

meilisync同步Postgres至MeiliSearch遇TypeError问题求助

解决meilisync同步PostgreSQL到MeiliSearch时的TypeError: 'async for' requires an object with __aiter__ method错误

问题重现

同步PostgreSQL数据到MeiliSearch时触发以下错误和警告:

  • 核心错误:TypeError: 'async for' requires an object with __aiter__ method, got coroutine
  • 关联警告:RuntimeWarning: coroutine 'Postgres.get_full_data' was never awaited

已尝试重建Docker容器、移除配置中的progress节点,问题仍未解决。

问题原因

这个错误本质是代码中在async for循环里直接调用了协程函数,而非该函数返回的异步迭代器。大概率是meilisync的Postgres适配器存在版本bug,导致get_full_data方法没有正确返回异步迭代器,而是返回了未执行的协程对象。

解决方案

1. 锁定meilisync稳定版本

避免使用latest镜像标签,改用明确的稳定版本(比如v0.1.10,可查看官方仓库确认最新稳定版),旧版本的异步迭代器实现可能存在问题。修改docker-compose.yml中meilisync的镜像配置:

meilisync:
  image: getmeili/meilisync:v0.1.10 # 替换为最新稳定版
  volumes:
    - ./meilisync_config.yml:/app/config.yml
  depends_on:
    - meilisearch
    - postgres

2. 检查并调整同步策略

如果全量同步触发问题,先尝试关闭全量同步,改用增量同步验证:
在meilisync_config.yml中设置full_sync: false:

sync:
  - table: your_table
    index: your_index
    full_sync: false

待增量同步正常后,再手动触发全量同步(可通过临时修改配置为full_sync: true并重启容器实现)。

3. 核对依赖版本(非Docker部署场景)

如果是直接通过pip安装meilisync,确保依赖库版本符合要求,比如asyncpg版本需适配meilisync的版本。执行以下命令安装指定版本:

pip install meilisync==0.1.10 asyncpg==0.27.0

4. 检查自定义适配器(如有)

如果是自定义了Postgres适配器,确保get_full_data方法通过yield返回异步迭代器,示例正确写法:

async def get_full_data(self):
    async with self.pool.acquire() as conn:
        async for record in conn.cursor("SELECT * FROM your_table"):
            yield record

附:参考配置示例

meilisync_config.yml

meilisearch:
  url: http://meilisearch:7700
  api_key: your_master_key
postgres:
  dsn: postgresql://user:password@postgres:5432/your_db
sync:
  - table: users
    index: users_index
    full_sync: false

docker-compose.yml

version: '3.8'
services:
  meilisearch:
    image: getmeili/meilisearch:v1.6.0
    environment:
      MEILI_MASTER_KEY: your_master_key
    ports:
      - "7700:7700"
  meilisync:
    image: getmeili/meilisync:v0.1.10
    volumes:
      - ./meilisync_config.yml:/app/config.yml
    depends_on:
      - meilisearch
      - postgres
  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      POSTGRES_DB: your_db
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 14:47:47