HELLO, I’M SERHAT AND THIS IS MY FANCY TITLE.

Rails ve PostgreSQL: Constraint'ler


Not Null Constraint ve Presence Constraint

  • foreign_key türündeki sütunlar için, eğer arada optional: true bir ilişki yoksa null: false kullanın.

  • Integer, boolean ve float türleri için null: false kullanmayın, add_null_constraint kullanın.

  • String türü için null: false kullanmayın, add_presence_constraint kullanın.

Not Null Constraint vs. Not Null Check

PostgreSQL'de NOT NULL durumu hem CONSTRAINT olarak, hem de CHECK olarak tanımlanabiliyor. CONSTRAINT ile CHECK arasında bazı farklar bulunmakta.

  • change_column_null (veya null: false) metodu sütun üzerinde CONSTRAINT tanımlaması yaparken,
  • add_presence_constraint tabloya CHECK tanımlaması yapar.
Read more
Date: 12-01-2019

Rails PostgreSQL Veri Tipleri: Constraint ve Migrasyonlar


Data integrity ve referential integrity konularının epey önemli olduğu bir Rails+PostgreSQL projesinde rein GEM'ini kullanıyoruz. Constraint yönetimini oldukça kolaylaştıran bu aracı kullanırken ekip içerisinde bir takım standartlar da belirledik. İş bu doküman ekip içerisinde kullanılmak üzere yazılmış olup, benzer ihtiyaçları olanlara da faydalı olabilir düşüncesiyle paylaşılmıştır. Constraint'ler için bknz Rails ve PostgreSQL: Constraint'ler.

Boolean

  • boolean alanlar için mutlaka null_constraint eklenmelidir.

  • boolean alanlara mutlaka default bir değer tanımlanmalıdır. Örn: default: false gibi.

  • Boolean bir alanın nil olması beklenen bir durum değildir. Örneğin:

    Student.where(active: nil).count => 50
    Student.where(active: false).count => 40
    Student.where(active: true).count => 60

Bu durumda nil değerini içeren kayıtların tek tek incelenerek düzeltilmesi gerekir.

Read more
Date: 12-01-2019

Import huge databases faster in mysql


Recently I needed to import very huge SQL dumps to my local machine. There were 10 different .sql files dumped from Moodle and each of them were sized more than 10GB with approximately 5 million rows. First of all, I tried to import them in a traditional way by using:

mysql -u username -p some_db < database1.sql

However each import request took a very long time, approximately 6-7 hours for each .SQL file. Please also you consider that I conducted this operation in a brand new laptop with Intel i7 CPU, 16GB RAM and 512GB SSD disk. Since I didn't have 60 hours for importing all these dump files, I took a look for potential solutions and found a very effective one.

Read more

MySQL find and replace


MySQL'de bir tablo alanında bulunan herhangi bir karakteri bul-değiştir yapmak için şöyle bir sorgu yeterli;

UPDATE tablo_adi SET alan_adi = replace(alan_adi,'before','after');

Başarılar.

Read more

Moodle'da silinmiş kullanıcıları tamamen yok etmek


Öğrenmiş oldum ki, moodle asla bir kullanıcıyı silmiyormuş. Yani uygulama tarafında kullanıcı silinse bile, aslında yapılan işlem veritabanında (mdl_user tablosunda) sadece kullanıcının boolean olan deleted alanının 1'e dönüşmesi işlemiymiş. Bu konu hakkında Moodle forumlarında güzel bir tartışma da var.

Özetle bu tartışmada söylenen, bu silinmiş kullanıcıların SQL hareketleriyle uçurulmasının riskli olabileceği. Çünkü kullanıcıların forum mesajı, sınav sonucu vs. bilgilerini de tespit edip temizlemek gerekecek. Aksi halde arkamızda nereye bağlı olduğu veya nasıl oluştuğu belli olmayan bir yığın çöp veri bırakmış oluruz ki - fayda sağlayalım derken daha çok zararı dokunur. Moodle veritabanının karmaşık yapısı ise bu ilişki tespit işlemini çok zorlaştırıyor.

Read more