
PostgreSQL


-ako te to zanima, ako učiš.. tad si urpavo ti taj koji to treba riješiti.
btw, SQL .. je sql, nevažno postgre odnosno velike baze mogu imati svoje fičere-razlike, no jezik je isti.. kao što auto može imati 4-5-6-više brzina, 'isto je'.
evo ti ''ugrubo'' hint :))
select * from * where * on .. e to je join.. tj kriterij i što s čime spajaš, dodaješ, tražiš samo što je u obje tablice-kriterija ili je kriterij prva-druga itd.. ako to ne znaš, tad si zalutao.
+ prijedlog, za učenje, isprobavanje.. mislim/možda je najzgodnije win, ms-office-access baza, za učenje sql-a, ogroman knowhow-msdn baza s primjerima, server, VisualStudio za c-java-bilošto.. i tad ne moraš više tražiti jer tad imaš sve moguće primjere, klikaš-vidiš.. dok je samo stvar sintaxe-prilagodbe nekoj konkretnoj bazi-platformi ili programskom jeziku, npr connect string, nakon čega je 99% identično. Oracle, IBM.. ili postgree, sam skjuel ili platforma-alati, kad to svladaš-vidiš, tad počneš na 'pravilan' način razmišljati o relacijskim bazama i upitima, tad počneš razumijevati i tad znaš..

Znam, ali me zanimao bas konkretno ovaj primjer posto se treba raditi u programakom jeziku a dosad sam samo radio direktno u sqlu pa me zbilja zanima kako da ovo napravim

nije važno u kojem programskom jeziku, sve je to sql .. sintaxa uz sitne varijacije dok connectstring ovisi o samoj bazi npr ms-access-mdb ili ibm-db itd..
ako znaš sql znaš ga na svim platformama, odnosno, samo provjeriš-pogledaš primjer kako se nešto u nekom konkretnom jeziku napravi, npr c-c#-python-java-neštodeseto.. ili visualbasic/bilo što iz VSa ili bilo koja platforma uz razlike koje mogu zezati kao npr UNC path i tri ili dva beksleša.. npr win-lin...

A dali je za ovaj zadatak potrebna konekcija sa postgres serverom? I sto tocno se misli ovom recenicom: All three operators should implement the open(), next(), close() iterator model.

operator.. terminologiju moraš usvojiti, tad ti postanu jasne takve rečenice, ponekad je to najteži dio..

Okej

Ovi operatori open(), next() i close() se koriste za manipuliranje datasetom u programskom jeziku po izboru, a ne SQL-u, dok u SQL-u imaš samo upit. Znači, odaberi nešto što ti odgovara (Python, PHP ili što već imaš ponuđeno). Vidi primjer korištenja na https://www.datacamp.com/community/tutorials/tutorial-postgresql-python
Što se tiče komentara da SQL je SQL mogu se složiti sa time ako se kaže ANSI-SQL je SQL, no različite "ekstenzije" SQL (PL/SQL na Oracle, T-SQL na MS) donose dodatne mogućnosti koje nisu dio ANSI standarda. Štoviše, već između PostgreSQL i MySQL postoji cijeli niz statementa koji su međusobno nekompatiblini. ANSI SQL je osnova, ali ako želiš koristiti to efikasno na nekoj platformi korisno je iskoristiti sve mogućnosti.

Hvala ti puno, probat cu koristiti ovaj tutorial pa rijesiti ovo.

Ne mogu ništa naći o tom open/next/close iterator modelu pa zbog jednostavnosti koristim Pythonove generatore:
from collections import defaultdict, namedtuple
Tuple = namedtuple('Tuple', ['ID', 'attributes'])
def table_scan(collection):
for item in collection:
yield item
def nested_loop(left_collection, right_collection):
for left in left_collection:
for right in right_collection:
if left.ID == right.ID:
yield Tuple(left.ID, left.attributes + right.attributes)
def hash_join(left_collection, right_collection):
hash_table = defaultdict(list)
for left in left_collection:
hash_table[left.ID].append(left)
for right in right_collection:
for left in hash_table[right.ID]:
yield Tuple(left.ID, left.attributes + right.attributes)
Primjeri korištenja:
table_1 = (Tuple(1, ['a', 'A']), Tuple(2, ['b', 'B']), Tuple(2, ['c', 'C']), Tuple(3, ['d', 'D']))
table_2 = (Tuple(1, ['x']), Tuple(2, ['y']), Tuple(4, ['z']))
for row in table_scan(table_1):
print(row)
# Tuple(ID=1, attributes=['a', 'A'])
# Tuple(ID=2, attributes=['b', 'B'])
# Tuple(ID=2, attributes=['c', 'C'])
# Tuple(ID=3, attributes=['d', 'D'])
for row in nested_loop(table_1, table_2):
print(row)
# Tuple(ID=1, attributes=['a', 'A', 'x'])
# Tuple(ID=2, attributes=['b', 'B', 'y'])
# Tuple(ID=2, attributes=['c', 'C', 'y'])
for row in hash_join(table_1, table_2):
print(row)
# Tuple(ID=1, attributes=['a', 'A', 'x'])
# Tuple(ID=2, attributes=['b', 'B', 'y'])
# Tuple(ID=2, attributes=['c', 'C', 'y'])

Hvala ti care

Da ne otvaram novu temu, Imam neke podatke, njih dosta ugrubo napisani u .txt fajlu (oko 650k linija).
Njih obradim s pythonom, line by line i zelim ih zapisati u bazu da pretraga podataka bude brza.
Sad imam ideju kako to sve izvest pa neka me neko ispravi ako grijesim.
Napravim postgresql bazu, spojim se na nju pythonom i samo appendam u bazu ono sto zelim ?
Sad cak i zvuci jednostavnije nego u mojoj glavi xD

Da to nije 650k korisnika A1? :P

Ma da, sad gledam njih sve u bazu pa da filtriram ove korisnike foruma, da vas nebi tko dirao
Testcase-ovi neki, ima ih i kurcu

Za masovni unos možeš koristiti PostgreSQL naredbu copy
Npr. napraviš datoteku import.txt s ovim sadržajem (podaci su odvojeni tabom, nema praznog retka na kraju)
1 Pero Perić
2 Eva Ević
4 Ivo Ivić
Za import pokreneš ovu SQL naredbu:
copy osoba(id, ime, prezime) from 'apsolutna_putanja_do_import.txt';
pozz, ima li netko da zna kako rijesiti ovaj zadatak.