#python #postgresql #discord #discord.py #asyncpg
#python #postgresql #Discord #discord.py #asyncpg
Вопрос:
Я работаю над discord.py бот. Я переключаюсь с sqlite3 на postgresql (в частности, asyncpg) и сталкиваюсь с ошибкой value out of int32 range
при попытке сохранить идентификаторы гильдий. Я могу решить это, используя что-то вроде bigint, но меня беспокоит, что это занимает слишком много места? Было бы лучше использовать строку вместо этого?
[РЕДАКТИРОВАТЬ]: Числа, которые я использую, состоят из 18 цифр
Ответ №1:
Используйте bigint
всеми средствами.
18-значные числа хорошо вписываются в a bigint
, и это занимает всего 8 байт. Строка будет занимать не менее байта на символ плюс один байтовый заголовок TOAST .
Кроме того, bigint
сравнения поддерживаются аппаратным обеспечением и выполняются намного быстрее.
Комментарии:
1. Что происходит, когда целые числа превышают 20 цифр
2. В какой-то момент вы переключаетесь на
numeric
, тем самым теряя большинство преимуществtext
, кроме проверки типов. Хранилище все равно будет более эффективным, чемtext
.3. Хорошо, спасибо. Вы сказали, что «сравнения bigint поддерживаются аппаратным обеспечением и выполняются намного быстрее». Это больше не так, если я использую числовой тип?
4. Правильно,
numeric
двоично-десятичное кодирование, а код написан на C.