Ошибка записи значения в БД PostgreSQL

Почему-то user_id не записывается в БД postgresql

pool = None

async def init_db():
    global pool
    pool = await asyncpg.create_pool(
        user="postgres",
        password="password",
        database="usersdb",
        host="localhost",
        port="5432",
        max_size=10,
        max_inactive_connection_lifetime=100
    )
    print('База создана')
    async with pool.acquire() as conn:
        await conn.execute('''
            CREATE TABLE IF NOT EXISTS users(
                user_id BIGINT PRIMARY KEY,
                username TEXT
            )
        ''')


async def add_user(user_id: int, username: str):
    async with pool.acquire() as conn:
        await conn.execute(
            "INSERT INTO users(user_id, username) VALUES($1, $2)",
            user_id, username
        )

async def get_users():
    async with pool.acquire() as conn:
        rows = await conn.fetch("SELECT user_id FROM users")
        return [row["user_id"] for row in rows]

пишет что asyncpg.exceptions.DataError: invalid input for query argument $1: 5752585424 (value out of int32 range)


Ответы (1 шт):

Автор решения: Evgenii Evstafev

Возможно получится отладить следующим образом:

async def add_user(user_id: int, username: str):
    async with pool.acquire() as conn:
        try:
            # Явно приводим первый параметр к типу BIGINT в SQL
            await conn.execute(
                "INSERT INTO users(user_id, username) VALUES($1::bigint, $2) ON CONFLICT (user_id) DO NOTHING", # + Добавлен ON CONFLICT для избежания ошибок при дубликатах
                user_id, username
            )
            print(f"Пользователь {user_id} ({username}) добавлен или уже существует.")
        except Exception as e:
            print(f"Ошибка при добавлении пользователя {user_id}: {e}")
→ Ссылка