آموزش تغییر و انتقال دیتابیس maddy از SQLite به PostgreSQL

نصب PostgreSQL و ساخت دیتابیس جدید:

apt update
apt install -y postgresql postgresql-client

ساخت دیتابیس PostgreSQL:

sudo -u postgres psql

CREATE DATABASE maddy;
CREATE USER maddy WITH ENCRYPTED PASSWORD 'password';
GRANT ALL PRIVILEGES ON DATABASE maddy TO maddy;
\q

اعطای دسترسی ها به کاربر maddy:
ویرایش فایل pg_hba.conf:
sudo nano /etc/postgresql/16/main/pg_hba.conf

مسیر ممکن است با نسخه PostgreSQL متفاوت باشد، برای: Ubuntu 24.04 و PostgreSQL 16 → /etc/postgresql/16/main/pg_hba.conf

احتمالاً شبیه این است:
local all all peer

تغییر peer به md5:
local all all md5

ریستارت PostgreSQL:
sudo systemctl restart postgresql

ورود به PostgreSQL:
sudo -u postgres psql

دادن کامل روی دیتابیس maddy به کاربر maddy:
ALTER SCHEMA public OWNER TO maddy;
\c maddy
GRANT ALL PRIVILEGES ON DATABASE maddy TO maddy;
ALTER SCHEMA public OWNER TO maddy;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO maddy;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO maddy;

آموزش انتقال دیتابیس ایمیل سرور از SQLite به PostgreSQL (اگر به تازگی madmail رو نصب کردید و هنوز کاربری ندارید این قسمت رو رد کنید):

نصب ابزار pgloader برای انتقال راحت‌تر دیتابیس:
sudo apt install pgloader

متوقف کردن ایمیل سرور:
systemctl stop maddy

بکاپ گرفتن از دیتابیس maddy:
rsync -aH /var/lib/maddy/credentials.db ~/maddy-backup/
rsync -aH /var/lib/maddy/imapsql.db* ~/maddy-backup/

بهینه سازی دیتابیس:
sudo apt install sqlite3

sqlite3 -cmd 'vacuum' ~/maddy-backup/imapsql.db
sqlite3 -cmd 'pragma wal_checkpoint(truncate)' ~/maddy-backup/imapsql.db

پاک کردن تیبل msgs (چون در روند انتقال دیتابیس ارور ایجاد میکنه و تیبل ضروری نیستش و بعد از اینکه maddy رو به postgre متصلش کردیم خودش این تیبل رو ایجاد میکنه):
sqlite3 imapsql.db
DROP TABLE msgs;

انتقال دیتابیس به PostgreSQL:
pgloader sqlite:///~/maddy-backup/credentials.db postgresql://maddy:password@localhost/maddy

pgloader sqlite:///~/maddy-backup/imapsql.db postgresql://maddy:password@localhost/maddy

کانفیگ maddy برای استفاده از PostgreSQL:

فایل کانفیگش رو تغییر میدیم:
nano /etc/maddy/maddy.conf

قسمت auth.pass_table رو پیدا کنید و بصورت زیر تغییرش بدید:
auth.pass_table local_authdb {
auto_create yes
table sql_table {
driver postgres
dsn "host=127.0.0.1 port=5432 dbname=maddy user=maddy password=password sslmode=disable"
table_name passwords
}
}
دقت کنید که فقط مقدار driver و مقدار dsn رو تغییر دادیم و همچنین اگر ssl داره، sslmode رو enable بکنید

بعد قسمت storage.imapsql رو پیدا کنید:
storage.imapsql local_mailboxes {
driver postgres
dsn "host=127.0.0.1 port=5432 dbname=maddy user=maddy password=STRONG_PASSWORD sslmode=disable"
retention 24h
default_quota 1G
}
دقیقا مطابق با توضیحات قبلی تغییرش بدید و سیو کنید بیایید بیرون.

راه‌اندازی دوباره Maddy:

systemctl start maddy
journalctl -u maddy -f
در این مرحله maddy باید بدون خطا اجرا بشه. اگر تعداد کاربرانتون زیاده، یکم استارتش طول میکشه.
اگر مشکلی در اجرا شدن نداشت میتونید فایل های دیتابیس قبلی رو پاک کنید که حجم نگیره:
rm /var/lib/maddy/credentials.db
rm /var/lib/maddy/imapsql.db*
ارتباط با من