Compare commits

...

3 commits

Author SHA1 Message Date
475accc50c bump version number 2025-01-08 14:23:46 +01:00
50ee99fa88 Migration Skript (Redis -> PostgreSQL) 2025-01-08 14:22:47 +01:00
6ee4b463e0 more on readme 2025-01-08 14:22:44 +01:00
3 changed files with 56 additions and 4 deletions

View file

@ -1,6 +1,6 @@
[package]
name = "kosyncrs"
version = "1.1.1"
version = "2.0.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html

View file

@ -28,14 +28,14 @@ Connect to the database as user *kosync* (with psql) and create the database tab
```sql
CREATE TABLE users (
id BIGSERIAL PRIMARY KEY,
username TEXT NOT NULL,
username TEXT UNIQUE NOT NULL,
password TEXT
);
CREATE TABLE progresses (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT,
document TEXT UNIQUE NOT NULL,
document TEXT NOT NULL,
progress TEXT NOT NULL,
percentage REAL NOT NULL,
device TEXT NOT NULL,
@ -45,4 +45,4 @@ CREATE TABLE progresses (
REFERENCES users(id) ON DELETE CASCADE,
UNIQUE (user_id, document)
);
```
```

52
python/redis2pg.py Normal file
View file

@ -0,0 +1,52 @@
#!/usr/bin/env python3
import psycopg2
import re
import redis
con = redis.Redis()
pgcon = psycopg2.connect("postgresql://kosync:mypassword@localhost/kosync")
pgcur = pgcon.cursor()
userkeys = con.keys('user:*:key')
for key in userkeys:
key = key.decode('utf-8')
match = re.search('user:(.*):key', key)
username = match.group(1)
password = con.get(key).decode('utf-8')
documentkeys = con.keys('user:' + username + ':document:*')
if len(documentkeys) == 0:
print("Skipped:", username)
continue
pgcur.execute("INSERT INTO users (username, password) VALUES (%s, %s) ON CONFLICT (username) DO UPDATE SET username = %s, password = %s",
(username, password, username, password))
pgcur.execute("SELECT id FROM users WHERE username = %s", (username,))
res = pgcur.fetchone()
user_id = res[0]
for dockey in documentkeys:
dockey = dockey.decode('utf-8')
match = re.search("user:.*:(.*)", dockey)
document = match.group(1)
docvals = con.hgetall(dockey)
progress = docvals[b"progress"].decode()
percentage = docvals[b"percentage"].decode()
device = docvals[b"device"].decode()
device_id = docvals[b"device_id"].decode()
timestamp = docvals[b"timestamp"].decode()
pgcur.execute("INSERT INTO progresses (user_id, document, progress, percentage, device, device_id, timestamp) VALUES (%s, %s, %s, %s, %s, %s, %s) ON CONFLICT (user_id, document) DO UPDATE SET user_id = %s, document = %s, progress = %s, percentage = %s, device = %s, device_id = %s, timestamp = %s",
(user_id, document, progress, percentage, device, device_id, timestamp, user_id, document, progress, percentage, device, device_id, timestamp))
pgcon.commit()
pgcur.close()
pgcon.close()