Kod parçacıkları

Sık kullandığım sorgular, komutlar ve kısa kodlar. Açıklamadan çok doğrudan kopyalayıp kullanmak için.

En büyük tablolar ve indeksleri

SQL

Veritabanındaki tabloları, indeksleriyle birlikte diskte kapladıkları alana göre sıralar.

SELECT
relname AS tablo,
pg_size_pretty(pg_total_relation_size(relid)) AS toplam,
pg_size_pretty(pg_relation_size(relid)) AS veri,
pg_size_pretty(pg_indexes_size(relid)) AS indeksler
FROM pg_catalog.pg_statio_user_tables
ORDER BY pg_total_relation_size(relid) DESC
LIMIT 20;

Uzun süredir çalışan sorgular

SQL

5 dakikadan uzun süredir çalışan sorguları, süreleri ve kilit bekleme durumlarıyla listeler.

SELECT
pid,
now() - query_start AS sure,
state,
wait_event_type,
left(query, 120) AS sorgu
FROM pg_stat_activity
WHERE state <> 'idle'
AND now() - query_start > interval '5 minutes'
ORDER BY sure DESC;

Sorguyu durdurmak için SELECT pg_cancel_backend(pid);, bağlantıyı tamamen kapatmak için pg_terminate_backend(pid).

Güvenli bash script başlangıcı

Bash

Hata olduğunda duran, tanımsız değişkenleri yakalayan ve geçici dosyaları temizleyen script iskeleti.

#!/usr/bin/env bash
set -Eeuo pipefail
tmp="$(mktemp -d)"
trap 'rm -rf "$tmp"' EXIT
trap 'echo "Hata: satır $LINENO" >&2' ERR
main() {
# ...
}
main "$@"

HTTP sunucusunu düzgün kapatmak

Go

SIGINT veya SIGTERM geldiğinde yeni bağlantı almayı bırakıp açık istekleri bitiren Go sunucusu.

package main
import (
"context"
"errors"
"log"
"net/http"
"os/signal"
"syscall"
"time"
)
func main() {
ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
defer stop()
srv := &http.Server{Addr: ":8080", Handler: http.DefaultServeMux}
go func() {
if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Fatal(err)
}
}()
<-ctx.Done()
shutdownCtx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer cancel()
if err := srv.Shutdown(shutdownCtx); err != nil {
log.Printf("kapatma hatası: %v", err)
}
}

switch içinde tüm durumların ele alındığını garanti etmek

TypeScript

Union tipine yeni bir değer eklendiğinde, ele alınmayan yerlerde derleme hatası verir.

function assertNever(value: never): never {
throw new Error(`Beklenmeyen değer: ${JSON.stringify(value)}`);
}
type Status = 'pending' | 'paid' | 'refunded';
function label(status: Status): string {
switch (status) {
case 'pending':
return 'Bekliyor';
case 'paid':
return 'Ödendi';
case 'refunded':
return 'İade edildi';
default:
return assertNever(status);
}
}

TypeScript Playground'da aç ↗

Klavye kısayolları

Arama ve komutlar
K
Ara
/
Ana sayfa
gh
Yazılar
gy
Notlar
gn
Kod parçacıkları
gk
Arşiv
ga
Projeler
gp
Sonraki yazı
j
Önceki yazı
k
Temayı değiştir
t
Bu listeyi göster
?