Geliştirici olarak bir projeden/işyerinden ayrılırken “bu projeye çok emek verdi(m)(k), bazı kısımlar şahane, lazım olur günün birinde, zipleyeyim de atayım kenarda dursun” hissiyatı çoğumuzda olur. Ben ise şu iki sebeple bunu yapmaya gerek görmüyorum:
- Geçmiş deneyimlerimiz ile yeni çevrede öğrenilen yeni bilgileri harmanlayarak daha iyilerini yazabileceğimize inanıyorum
- Geçmiş deneyimlerimi unutmamak için blog ve Gist yazıyorum
(Ayrıca projeyi o şekilde başka yerlere kopyalamak yasal olarak da sıkıntılı olsa gerek.)
Gist yazmak da blog yazmak gibi, ama ağırlıklı olarak kod parçaları -hatta çoğu zaman dosyalar- içermekte. Bir baktım 2015’ten bu yana Gist karalıyormuşum. Bazıları public, bazıları private, bazıları blog tarzında uzunca (onları buraya taşısam daha iyi olacak), bazıları bir kaç kelime açıklama ardından bir kaç dosyadan oluşmakta. Her gün işim düşmese de 1-2 ayda bir işim düşüyor oradaki notlarıma.
Bu sabah production ortamındaki bir durumu çözmeye çalışırken öğrendiğim bir yöntem için yeni bir Gist yazınca, ben neden Gist yazıyorum diye tekrardan bir düşünüp yazıya dökmek istedim. Gist PostgreSQL üzerineydi. Geriye dönüp bakınca farkettim, 1 yıl içinde PostgreSQL ile alakalı faydalı olduğunu düşündüğüm 5 adet Gist yazmışım. Günün birinde sizlere de faydalı olması dileğiyle, buyrunuz…
ALTER TABLE ve başka pahalı sorguların çok daha hızlı çalışması için:
BEGIN; | |
LOCK TABLE … IN SHARE MODE; | |
SET LOCAL WORK_MEM = '256MB'; | |
ALTER TABLE …; | |
COMMIT; |
Tabloyu kilitlemeden INDEX ekleyip çıkarmak için:
CREATE INDEX CONCURRENTLY your_index_name on your_table_name (your_column_name); | |
DROP INDEX CONCURRENTLY your_index_name; |
Cryptography fonksiyonlarını kullanabilmek için:
CREATE EXTENSION pgcrypto; | |
— Examples | |
SELECT ENCODE(DIGEST('password', 'md5'), 'hex'); | |
SELECT ENCODE(DIGEST('password', 'sha1'), 'hex'); | |
SELECT ENCODE(DIGEST('password', 'sha224'), 'hex'); | |
SELECT ENCODE(DIGEST('password', 'sha256'), 'hex'); | |
SELECT ENCODE(DIGEST('password', 'sha384'), 'hex'); | |
SELECT ENCODE(DIGEST('password', 'sha512'), 'base64'); |
Bir SCHEMA’yı bir yerden “export” alıp başka bir yere “import” etmek için:
# export | |
PGPASSWORD="<PASSWORD>" pg_dump -U <USERNAME> -h <HOST> -d <DB_NAME> -n <SCHEMA_NAME> > export.sql | |
# import | |
PGPASSWORD="<PASSWORD>" psql -U <USERNAME> -h <HOST> -d <DB_NAME> -n <SCHEMA_NAME> -f export.sql |
-Spring Boot’da “integration” testlerinde kullandığımız in-memory veritabanı kütüphanesi- HSQLDB’nin PostgreSQL söz dizimine (syntax) uygun çalışması için:
spring.datasource.url=jdbc:hsqldb:mem:testdb;sql.syntax_pgs=true |
…
“Biz bunları … anlattık” geyiği için: