Auto-commit biçimde large object kullanılamaz hatası
@Lob
@Column(name=”text”)
String text; -> yerine
@Column(name=”text”, length = Length.LOB_DEFAULT )
String text; ifadesini kullan. (Hibernate > 6.* sürümleri için)
Materialized View
Belli durumlarda her bir select işlemi için sisteme sorgu atmak yerine materialized view kullanılarak sorgu süreleri azaltılabilir. View otomatik olarak güncellenmediği için job çalıştırarak belli aralıklarla veri bütünlüğü sağlanmalıdır.
Materialized view uygulama içinde bir tablo gibi davranabilir. Controller ve repository üzerinden diğer tablolara erişildiği gibi erişilebilir.
Çalıştığımız Projelerde Kullandığım Belli Senaryolara Göre SQL Sorguları
- Personel bilgilerini tutuğumuz bir tablomuz olsun. Bu tabloda personelno alanı ve diğer alanlar bulunsun. personelno değerinin unique olmasını ve diğer satırlarda aynı personelno’nun olmamasını istiyorum. Mevcutta tabloda birden fazla bulunan personelno alanlaını bulmak istiyorum.
- SELECT personelno, COUNT() FROM personel GROUP BY personelno HAVING COUNT() > 1;
- Bir tabloda name isimli bir alan olsun bu tabloda ROLE_TAS ile başlayan alanları ROLE ile değiştir.
- UPDATE tablo_adi SET name = REPLACE(NAME, ‘ROLE_TAS’, ‘ROLE’) WHERE name LIKE ‘ROLE_TAS%’
- Bir tablo alanının, şemada bulunan tüm tablolar içinde hangi tablolarda bulunduğunu görebilmek için;
SELECT table_name
FROM information_schema.columns
WHERE column_name = 'aranilan_alan'
AND table_schema = 'calisilan_sema';
Postgresql Veritabı Yedekleme ve Başka Bir Veritabanına Aktarma
- Postgresql’in yüklü olduğu klasöre git. Örneğin Library altında Postgresql. (/Kitaplık/Postgresql)
- Postgresql klasörü altında bin klasörünün path bilgisini al. (/Library/PostgreSQL/14/bin)
- open ~/.zshrc ile zshrc dosyasını aç ve path’i ekle. (export PATH=”/Library/PostgreSQL/14/bin:$PATH”)
- Terminali kapat yeniden aç. pg_dump -U kullanici_adi(postgres) -h localhost -p 5432 -d veritabani_adi > /Users/macbook/dev/yedeklerim/dbYedek/yedek_veritabani.sql komutunu çalıştır.
- Veritabanı yedeği oluştu. createdb -U kullanici_adi -h localhost -p 5432 yedek_veritabani komutunu çalıştır ve yeni bir veritabanı oluştur.
- Yedeklenmiş veritabanını yeni oluşturduğun veritabanına aktar. psql -U kullanici_adi -h localhost -p 5432 -d yedek_veritabani < /Users/macbook/dev/yedeklerim/dbYedek/yedek_veritabani.sql
PostgreSQL’de bir tabloya index ekleme
CREATE INDEX index_name ON table_name (column1, column2);
Tabloda iki alanı sorguladığımız bir sorgumuz olsun. (Örn: findTop50ByCourseIdAndTeacherId). Index olmadığı durumda çalışma sürelerini hesapladığımda şöyle bir çıktı alıyorum : çalışma süresi: 4947 milisaniye. Sadece bir kod bloğunun çalışması yaklaşık 5 saniye sürüyor.
Index ekleme işleminden sonra aldığım çıktı: çalışma süresi: 446 milisaniye. Bu da çok uzun bir süre ancak indexin etki ettiğini görmüş oldum.
SETVAL() FONKSİYONU
Tablonun sequence değeri belirlenir. true, false flagleri vardır ve bunlara göre bir sonraki eklenecek kaydın sequnce değeri (nextval) belirlenir.
select setval(‘sequence’, 8) -> Bir sonraki sequence değeri 9
select setval(‘sequence’, 8, true) -> Bir sonraki sequence değeri 9
select setval(‘sequence’, 8, false) -> Bir sonraki sequence değeri 8
Tabloya Yeni Alan Ekleme
Uygulama geliştirme sürecinde tabloya yeni bir alan eklemen gerektiğinde aşağıdaki komutu çalıştırman gerekir.
alter table tabloAdi add column alanAdi character varying(255);
character varying(255) kısmını eklediğin alandaki ihtiyacına göre date, integer, boolean, character varying, timestamp, numeric vb. veri tiplerini kullanabilirsin.
Bir Tablo Alanını Unique Hale Getirme
Tablomuzu oluşturduktan sonra bir alanı unique hale getirmek istediğimizde aşağıdaki sorguyu kullanacağız.
ALTER TABLE tablo_adi ADD CONSTRAINT constraint_name UNIQUE (tablo_alani);
Json oluşturma
SELECT json_agg(json_build_object(‘birimId’, uniqueid, ‘birimAdi’, tanim)) as json_data
FROM (
SELECT DISTINCT uniqueid, tanim
FROM deybisbirim
) as distinct_values;
SELECT json_agg(json_build_object(‘unvanId’, unvanid, ‘unvanAdi’, unvantext)) as json_data
FROM (
SELECT DISTINCT unvanid, unvantext
FROM deybispersonel
) as distinct_values;
Tabloda Bir Alanı Silme
ALTER TABLE tablo_adi DROP COLUMN sutun_adi; sorgusu çalıştırılır.