Kirjoittaja Aihe: VB .Net+MySQl -> Python + PostgreSQL miten tähän pitäisi suhtautua?  (Luettu 2567 kertaa)

sniveri

  • Käyttäjä
  • Viestejä: 322
    • Profiili
Eli tarkoitus olisi alkaa muuttamaan aikoinaan vb .netillä näperrelty tiedonkeruuohjelma pythonille ja tietokannaksi vaihtuisi MySQL:n tilalle PostgreSQL. Hieman tuossa aiheesta lueskelin ja kysymyksiä heräsi:

- PostgreSQL:ssä ei taida olla samanlaista auto increment toimintoa kuin MySQL:ssä, eli pitääkö tuo rivin indeksi nyt sitten ensin kysyä valmiiksi ennen inserttiä? MySQL:ssähän tuli automaattisesti uusi "rivinumero" jos oli auto increment käytössä ja "solun" arvoksi pyrki laittamaan null insert lauseessa.
-PostgreSQL:n Stored Procedured ilmeisesti huolii myös array-muotoista dataa, löytyykö tästä jotain fiksua esimerkkiä mistään? Ja ennenkaikkea pelaako tuo kuinka luotettavasti jos tietoa koitetaan tarjoilla Pythonista? Esimerkkejä tosiaan kaipalisin kahdesta tapauksesta, joko tuupataan koko array yhteen "soluun" tai vastaavasti stored procuderessa käytäisiin array läpi ja pukattaisiin arrayn instanssit yksitellen omiin sarakkeisiinsa.
-Entäpä blobit? MySQL:ssä pidin pieniä jpg-kuvia blobeissa, kai saman voi tehdä PostgreSQL:ssä?

Tuo array-datan käyttäminen melkeinpä olis se hienoin juttu nyt alkuun saada pelaamaan että vois kirjotella kunnolliset transaction systeemit, muutenhan noita arrayhommia joutuu purkamaan "client"-päässä ja tekemään sen mukaan tuhottomasti inserttejä ja sitten ei taas saa kunnollista transaction-ohjelmanpätkää aikaiseksi.

Ja tosiaan en ole mikään alan asiantuntija että jos nää toimintojen nimitykset ja muutenkin ajatusmallit on täysin vääriä niin saa korjata mielellään :D
Ubuntu 10.04 64-bit Desktop
Ubuntu 10.04 32-bit Desktop x 2
Ubuntu 10.04 32-bit Server

sniveri@diasp.eu

zepotus

  • Käyttäjä
  • Viestejä: 271
    • Profiili
"PostgreSQL:ssä ei taida olla samanlaista auto increment toimintoa kuin MySQL:ssä"

Kyllä on samantyylinen. Sequence nimeltään.
Ubuntu 12.04 64-bit (i5-750 @ 3.8 Ghz, 4Gt, OCZ Agility 3 60Gt, 150Gt Raptor + 500 Gt + 1000 Gt, GT240 nvidia)

sniveri

  • Käyttäjä
  • Viestejä: 322
    • Profiili
Tuo sequencehan on jossain mielessä jopa parempi. Täytyy ruveta kahlaamaan läpi noita stored procedure juttuja jos jostain löytäis hyviä esimerkkejä. Kiitokset.
Ubuntu 10.04 64-bit Desktop
Ubuntu 10.04 32-bit Desktop x 2
Ubuntu 10.04 32-bit Server

sniveri@diasp.eu

sniveri

  • Käyttäjä
  • Viestejä: 322
    • Profiili
Asia etenee melko mallikkaasti. Nyt jopa ymmärrys sillä tasolla että postgresql:ssä ei ole mitään stored procedureja vaan funktioita. Tämän pohjalta sitten alkoikin ihmetys että miten on fiksuinta toteuttaa tuo transaction? Olin aina ennen kuvitellut että tekee stored proceduren jossa tehdään transaction ja stored proceduressa on määritelty se mitä tapahtuu jos transactioni ei onnistu. Näin ollen clientti päässä ei tarvisi vatkata millään vippaskonsteilla vaan voitaisiin proceduresta palauttaa tieto että a.) homma onnistui b.) homma ei onnistunut tai itse client ohjelma haistaisi c.) yhteys on poikki.

Tossa QtSql driverin yhteys-optioissa on mahdollisuus kertoa että nyt aloitetaan transaction, mutta mitä tapahtuu jos clientti menee jumiin, tai yhteys poikki? Jääkö silloin kantaan se mitä on jo keritty kirjoittaa vai osaako palvelin tehdä rollbackit ihan omineen, kun kuitenkin clientti puolelta on kerrottu että nyt on transaction meneillään? Minusta jotenkin parempi että tuo transaction tehtäisiin palvelimen päässä? Muutenkin jotenkin kätevämpi nuo toiminnallisuudet koodata funktioiksi palvelimen puolelle, jolloin clienttejä ei tartte muutella jos vaikka lisätään jotain käyttöoikeustarkisteluja, datan validointia yms.

Lisäksi semmonen kysymys että nyt nuo funktiot suoritetaan SELECT komennolla, riittääkö silloin että antaa vaan SELECT oikeuden noihin funktioihin postgresql:ssä? vai täytyykö käyttäjällä olla suoritusta varten myös oikeuksia tableihin joihin funktiot kohdistuu? En haluaisin antaa mihinkään muuhun oikeuksia kuin suorittaa noita valmiiksi laadittuja funktioita.

Olenkohan taas ihan pihalla näistä jutuista?
« Viimeksi muokattu: 19.04.10 - klo:20.02 kirjoittanut sniveri »
Ubuntu 10.04 64-bit Desktop
Ubuntu 10.04 32-bit Desktop x 2
Ubuntu 10.04 32-bit Server

sniveri@diasp.eu