Meta, Sema ve Postgresql
Tablolar hakkinda sema, meta bilgisi almak istiyorsaniz, ve pg_dump
komutu problem cikartiyorsa, tablo, kolon, tip bilgisi icin
select column_name,udt_name from information_schema.columns where table_name = '[tablo]'
order by ordinal_position
gibi bir sorgu gerekli bilgiyi alir. Siralamayi ordinal_position
uzerinden yapmamiz iyi olur, cunku bu siralama o tablo uzerinde
select *
islettigimizde kolonlarin gelecegi sira. Tabandan veri
cekerken genellikle (basitlik amaciyla) select *
kullanildigi icin
semanin da ayni siralamaya uyacak sekilde alinmasi iyi olur.
Not: information_schema.columns uzerinde baska ilginc kolonlar da var.
Eger indis bilgisi almak istiyorsak,
SELECT tablename, indexdef FROM pg_catalog.pg_indexes
Bu sorgu indisi uretmek icin gerekli komutu bile gosterecektir.
Otomatik olarak uzaktaki bir semayi verisiyle indisleriyle beraber yerel bir tabana aktarmak icin su script'ler kullanilabilir.
run_csv.sh - uzaktaki makina uzerinde sql isletip ciktiyi bir csv olarak kaydeder,
psql [.. uzaktaki makina .. ] -c "COPY ($1) TO stdout with delimiter ',' CSV HEADER "
run.sh - yerel taban uzerinde argumanda verilen sql dosyasini isletir
psql [.. yerel ..] < $1
csv_schema.py - sema ciktisini alip sql komutlarina donusturur
import csv, sys
# argv 1: csv file name
# argv 2: table name
schema = csv.reader(open(sys.argv[1], 'rb'), delimiter=',')
schema.next() # skip header
print "drop TABLE if exists %s ;" % sys.argv[2]
print "CREATE TABLE %s (" % sys.argv[2]
i = 0list = list(schema)
l = len(list)-1
for line in list:
if i < l:
print "%s %s, " % (line[0], line[1])
else:
print "%s %s " % (line[0], line[1])
i+=1
print ");\n"
schema.sh - python script'i kullanarak semayi doker, ve yerel tablo uzerinde isletir.
sh runcsv.sh "select columnname,udtname from informationschema.columns where tablename = '[tablo]'" > $LHDATADIR/$1/[tablo].outpython csvschema.py DATADIR/$1/[tablo].out [tablo] > $LHDATADIR/$1/[tablo].sqlsh run.sh DATADIR/$1/[tablo].sql
dump.sh - tablolarin verisini db dosyalarina kaydeder
sh run_csv.sh "select * from [tablo]" > DATA_DIR/$1/[tablo].db
load.sh - db dosyalarini yerel tabloya yukler
psql [..yerel..] -c "COPY [tablo] FROM 'DATA_DIR/$1/[tablo].db' with csv header delimiter ',' ";
indexes.sh - indeksleri uzaktaki makinadan alarak yerelde isletir
sh run_csv.sh "SELECT indexdef FROM pg_catalog.pg_indexes where tablename = '[tablo]' " > /tmp/idx
perl -pi -e 's/\"//sg' /tmp/idx
perl -pi -e 's/\n/;\n/sg' /tmp/idx
tail -n+2 /tmp/idx > $LH_DATA_DIR/$1/[tablo]_idx.sql
sh run.sh $LH_DATA_DIR/$1/[tablo]_idx.sql
Yukarı