Libove Blog

Personal Blog about anything - mostly programming, cooking and random thoughts

Django Migrate MySQL to Postgres

I've recently migrated my tools project from an old the server to a new one. In the process I've decided to change the used database from MySQL to PostgreSQL. To do so I've used this amazing guide from calazan.com.

As the guide was written for django 1.6 some minor changes were necessary when working with newer versions (I've used django 3.1.4).

Setup for migration

Steps 1 + 2 work as described in the guide above. A new database is created and added to the settings.py.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dbname',
        'USER': 'dbuser',
        'PASSWORD': 'dbpass',
        'HOST': 'mysql.example.com',
        'PORT': '',
    },
    'postgresql': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'dbname',
        'USER': 'dbuser',
        'PASSWORD': 'dbpass',
        'HOST': 'postgresql.example.com',
        'PORT': '',
    }
}

Apply migrations to new database

python manage.py migrate --database=postgresql

syncdb is no longer available in newer django versions and was replaced by migrate. The flag --no-initial-data is no longer available and I didn't find a substitution.

Clean Up the new database

Some migrations will create initial data in your database. This will probably create conflicts, as we are migrating existing data into this database. I did this step by hand, but the command python manage.py sqlflush --database=postgresql will give you the SQL query to do it automatically.

Copy data to new database

In order to copy the data we use dumpdata and loaddata.

When dumping the data it is important to use the flag --natural-foreign, otherwise the import process cannot import data with foreign keys.

python manage.py dumpdata --all --natural-foreign > dump.json

The dumped data can be loaded into the new database. This process can take a long time. Ensure that your machine executing this command is as close as possible to the database, ideally running on the same machine. First, I started this command on my local machine. After 30 minutes I decided that it took too long and uploaded the dump to the server running the database, which finished the command in about a minute. My dump file was only 16 MB big.

python manage.py loaddata dump.json --database=postgresql

Adjust config

Now all data is available in the new database. Just adjust the settings to use the postgresql as the default database.



C̸u̴r̶s̷e̷ ̶o̵f̵ ̴B̵l̷o̶o̸d̴

Nyarlathotep, ee ilyaa h'n'ghft llll shugg lloig throd

nafluh'e Chaugnar Faugn ch'.

H̸a̶s̶t̷u̷r̶o̸r̷ ̸i̸l̵y̴a̴a̴ ̸g̵o̷f̵'̴n̸n̶o̷g̸ ̵s̸h̵u̸g̷g̷ ̶p̴h̴'̴u̴h̸'̸e̵ ̵t̵h̴r̶o̶d̸ ̷a̶t̷h̶g̸

v̷͈̓u̸͍̓l̴̝͌g̶̮͠t̷̜͆m̴̗̿ ̷̪̈k̵̮͑ň̷̤'̶͍̊a̵̝̽ ̸̫̐ṇ̵̊a̸͈̅f̸̘̊l̶̺͠ó̴̢r̷̂ͅȓ̴̨'̸̡̓è̷̹,̸̘̈́

c̷̹͝ȋ̶̟l̴̨̈́y̸̨̽ạ̴̊â̴͇ ̴̙̂c̸̭͋h̵̲̓'̸͎͗ ̷͕́s̸̲̾ḧ̴̢́ů̶͈g̸̈́͜g̴̢̅o̴̧̔ṱ̴͆h̸̪̃ ̶̹̆h̴̲̊ủ̷̙p̸͇̒a̵̪͆d̵̲͗g̷̖̊h̸̳̋ ̷̖̊ń̸̥a̴̖͌f̷̦͝l̶̯̊'̵̞̃f̷̳̒h̸̢͋á̴͜l̵͕̐m̴̳͑a̶̢̾ ̸̘̈́e̵̯̎b̶͍͝u̵̮͘n̸̻̎m̵̺̃ả̴̝o̷̩͊r̸̨͝

b̷̼̏ṵ̷͋g̶̥̈ ̶̧͂'̸̭̉b̴̮͛ṱ̶͘h̵̬́n̵̝̊ḵ̸̄ǫ̶̛t̷̛̳h̶̹̿ ̸́͜H̴̜̿a̴̛̲s̴̡̓t̶̢̚u̶̢͆r̶̦̔ ̴̰̃f̸͍͘h̸̖̄t̵̛̹a̶̯̽g̸̮͠n̷͓͒ ̶͇̾s̴̖̄ḩ̴͆a̵͔̔g̷͗ͅg̵͕͠.̷̰̆

Blood Ring

Music: Remix of THE OLD ONES - Scott Buckly CC-BY 4.0


Kommunalwahlen Aachen 2020

Um die Ergebnisse der Kommunalwahlen in Aachen besser zu verstehen habe ich die Ergebnisse der einzelnen Stimmbezirke in einer Kartenansicht visualisiert. Hierbei habe ich für jede Partei eine Grafik erstellt, die zeigt wo die Partei besonders stark ist.

Quelle: https://wahlen.regioit.de/1/km2020/05334002/html5/Kreistagswahl_NRW_78_Uebersicht_stbz.html

![Karte mit Wahlergebnissen für Städteregion Aachen: CDU](media/Städteregion: CDU.png) ![Karte mit Wahlergebnissen für Städteregion Aachen: GRÜNE](media/Städteregion: GRÜNE.png) ![Karte mit Wahlergebnissen für Städteregion Aachen: SPD](media/Städteregion: SPD.png) ![Karte mit Wahlergebnissen für Städteregion Aachen: LINKE](media/Städteregion: LINKE.png) ![Karte mit Wahlergebnissen für Städteregion Aachen: FDP](media/Städteregion: FDP.png) ![Karte mit Wahlergebnissen für Städteregion Aachen: PIRATEN](media/Städteregion: PIRATEN.png) ![Karte mit Wahlergebnissen für Städteregion Aachen: UWG](media/Städteregion: UWG.png) ![Karte mit Wahlergebnissen für Städteregion Aachen: AfD](media/Städteregion: AfD.png) ![Karte mit Wahlergebnissen für Städteregion Aachen: PARTEI](media/Städteregion: PARTEI.png)


Home Office Pizza

Vegan Pizza with bell peppers, onions and basil

This is my pizza recipe for an easy to prepare lunch. It takes 15 minutes to prepare the dough. I typically prepare enough dough for 4 servings. The dough can be stored for several days and improves each day ;).

Preparing the pizza takes around 10 minutes.

Ingredients

Dough (per serving):

Toppings

  • Passata
  • Olive Oil
  • Salt and pepper
  • (Chili, optional)
  • Oregano
  • vegan cheese (I use Simply V)
  • whatever you like on a pizza!

Preparation

  • Mix your flour and salt
  • Dissolve your yeast in the water
  • Add water and oil to the dry ingredients and mix everything
  • Once all liquid is absorbed start kneading the dough until you reach an even consistency
  • Put your dough in the fridge overnight

Cooking

In the morning take 275g of your dough out of the fridge. Fold or knead it shortly to create a round ball. Put the ball into a bowl and cover it.

After 1-3 hours fold the dough once. Be careful to keep the air building up!

Preheat your oven to 250°C (20-30 minutes before your lunch).

Put the dough ball on a floured surface and carefully push and pull it into shape. Be gentle and keep as much air as possible inside the dough! Put the pizza dough on your baking sheet.

Coat the pizza lightly with olive oil. Add 3-5 tablespoon passata and spread it evenly. You don't need a lot of sauce, only cover the dough lightly.

Season the sauce with salt, pepper and oregano (I also add chili). Add your ingredients and cheese.

Bake the pizza for 10 minutes.


Wealth Tax

Paul Graham wrote an article about wealth tax. In the article he 'models' the effect of a wealth tax on the fortune of a person. His assumption for the modeling is a person who earned a lot of money with a startup in her 20s. Paul Graham shows how much of the earned stocks/money would be taken by the government by a wealth tax.

Paul Graham comes to the conclusion that wealth taxes have "dramatic effects" and that "even a .5% wealth tax would start to keep founders away from a state or country that imposed it."

I think this conclusion is wrong. His model assumes that the earned money just lies on a big pile and is not used for 60 years. A more reasonable model would include interest being earn with the money. For this I will use an extended model:

(growth * (1-wealth_tax)^years

If we assume a reasonable return of investment of 2% per year the number shifts dramatically. Instead of "losing" 25% at 0.5% wealth tax you end up with 242% of your original value after 60 years. Even a wealth tax of 3% would only half your wealth.

Wealth Tax Graham Model With 2% Interest
0.10% 94.17% 308.99%
0.50% 74.03% 242.88%
1.00% 54.72% 179.52%
2.00% 29.76% 97.63%
3.00% 16.08% 52.76%
4.00% 8.64% 28.33%
5.00% 4.61% 15.12%

Paul Graham's article also misses to mention that a wealth tax only affect people with ALOT of money. Elizabeth Warren's "Ultra-Millionaire Tax" would only tax assets over $50 million. Once you are affected by a wealth tax you have enough money to live a luxurious life (and your children will probably never have to work to live). Most startup founders never reach this amount of wealth.

As this tax only targets the super rich let's look at the effect this tax would have on Jeff Bezos (data source: Wikipedia):

Effect of Wealth Tax on Jeff Bezos

Even a high wealth tax of 5% leaves Bezos the majority of his wealth. If Bezos stopped earning new wealth in 2018 he could bequeath $30 billion to his children in 2080 with a 2% wealth tax. With a 5% wealth tax his children would still inherit over $4 billion!

The questions I'm asking myself when thinking about a wealth tax are the following:

  • Should a person have virtually unlimited resources for the rest of her life, just because she had a clever idea in her 20s?
  • Should children have virtually unlimited resources for the rest of their lives, just because one of their parents had a clever idea in her 20s?
  • Should grandchildren have virtually unlimited resources for the rest of their lives, just because one of their grandparents had a clever idea in her 20s?