1

Temat: Migracja z Oracle na Postgresql

Witajcie,

Jestem totalnie zielony z postgres-a i prosiłby o pomoc w przepisaniu poniższego kodu tak aby działał na postgresql.

CREATE TABLE  "BOOK" 
   (    "ID_BOOK" NUMBER, 
    "TITLE" VARCHAR2(4000), 
    "AUTHOR" VARCHAR2(4000), 
    "YEAR" NUMBER, 
    "ISBORROW" NUMBER NOT NULL ENABLE, 
     CONSTRAINT "BOOK_PK" PRIMARY KEY ("ID_BOOK") ENABLE
   )
/
CREATE SEQUENCE   "BOOK_SEQ"  MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE
/
CREATE OR REPLACE TRIGGER  "BI_BOOK" 
  before insert on "BOOK"               
  for each row  
begin   
    select "BOOK_SEQ".nextval into :NEW.ID_BOOK from dual; 
end; 
/
ALTER TRIGGER  "BI_BOOK" ENABLE
/
CREATE TABLE  "BORROWED" 
   (    "ID_BORROWED" NUMBER, 
    "ID_LIB_USER" NUMBER, 
    "ID_BOOK" NUMBER, 
    "BORROW_DATE" VARCHAR2(4000), 
    "TO_DATE" VARCHAR2(4000), 
     CONSTRAINT "BORROWED_PK" PRIMARY KEY ("ID_BORROWED") ENABLE
   )
/
CREATE SEQUENCE   "BORROWED_SEQ"  MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE
/
CREATE OR REPLACE TRIGGER  "BI_BORROWED" 
  before insert on "BORROWED"               
  for each row  
begin   
    select "BORROWED_SEQ".nextval into :NEW.ID_BORROWED from dual; 
end; 
/
ALTER TRIGGER  "BI_BORROWED" ENABLE
/
CREATE TABLE  "LIBE_USER" 
   (    "ID_LIBE_USER" NUMBER, 
    "NAME" VARCHAR2(4000), 
    "SURNAME" VARCHAR2(4000), 
    "ADRESS" VARCHAR2(4000), 
    "TELEPHONE" NUMBER, 
     CONSTRAINT "LIBE_USER_PK" PRIMARY KEY ("ID_LIBE_USER") ENABLE
   )
/
CREATE SEQUENCE   "LIBE_USER_SEQ"  MINVALUE 1 MAXVALUE 999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER  NOCYCLE
/
CREATE OR REPLACE TRIGGER  "BI_LIBE_USER" 
  before insert on "LIBE_USER"               
  for each row  
begin   
    select "LIBE_USER_SEQ".nextval into :NEW.ID_LIBE_USER from dual; 
end; 
/
ALTER TRIGGER  "BI_LIBE_USER" ENABLE
/

Z góry dziękuję:)

2

Odp: Migracja z Oracle na Postgresql

Proszę

CREATE SEQUENCE BOOK_SEQ  MINVALUE 1 NO MAXVALUE INCREMENT BY 1 START WITH 1;
CREATE TABLE  BOOK
   (    ID_BOOK     NUMERIC PRIMARY KEY DEFAULT nextval('BOOK_SEQ'),
        TITLE       VARCHAR(4000),
        AUTHOR      VARCHAR(4000),
        YEAR        NUMERIC,
        ISBORROW    NUMERIC NOT NULL
   );

CREATE SEQUENCE BORROWED_SEQ  MINVALUE 1 NO MAXVALUE INCREMENT BY 1 START WITH 1;
CREATE TABLE BORROWED
   (    ID_BORROWED NUMERIC PRIMARY KEY DEFAULT nextval('BORROWED_SEQ'),
        ID_LIB_USER NUMERIC,
        ID_BOOK     NUMERIC,
        BORROW_DATE VARCHAR(4000),
        TO_DATE     VARCHAR(4000)
   );

CREATE SEQUENCE LIBE_USER_SEQ  MINVALUE 1 NO MAXVALUE INCREMENT BY 1 START WITH 1;
CREATE TABLE LIBE_USER
   (    ID_LIBE_USER NUMERIC PRIMARY KEY DEFAULT nextval('LIBE_USER_SEQ'),
        NAME         VARCHAR(4000),
        SURNAME      VARCHAR(4000),
        ADRESS       VARCHAR(4000),
        TELEPHONE    NUMERIC
   );

3

Odp: Migracja z Oracle na Postgresql

OO dziękuję:)

A jeszcze mam pytanko, czy dałoby się tutaj użyć jakichś mechanizmów obiektowych postgresql żeby baza nie była relacyjna tylko obiektowa ?

4

Odp: Migracja z Oracle na Postgresql

Baza PostgreSQL jest Relacyjno- Obiejtowa na podstawie skryptów tworzą się obiekty, które dalej są wykorzystywane w kodzie. Niestety nic więcej o nich nie wiem.

5

Odp: Migracja z Oracle na Postgresql

ISBORROW wygląda mi (po nazwie) na pole typu "tak/nie", więc można by użyć typu bool.

Zamiast VARCHAR(4000) (co jest, z tego co wiem, "oraclizmem") można użyć po prostu "text".

Pola borrow_date/to_date, lepiej zdefiniować jako "date" - to uprości zapytania porównujące.

Zamiast tworzenia sekwencji, i potem dodawania numerica z nextvalem, można użyć po prostu "bigserial". Inny typ danych będzie użyty, ale wsadzanie wszędzie numericów, zamiast normalnych intów to też oraclizm.

Finalnie - zapisywanie telefonu jako liczby (numeric) jest w/g mnie błędem. Telefony mogą mieć różne elementy tekstowe (np. "wew."), a dodatkowo zapisanie ich jako liczby nie niesie żadnych plusów, poza lekko zmniejszonym zapotrzebowaniem na miejsce.

A co do pytania "nie była relacyjna tylko obiektowa?". A jak zdefiniujesz różnicę? Tzn. co potrzebujesz "obiektowego" w bazie danych, czego aktualne rozwiązanie nie zapewnia?

--
The best thing about modern society is how easy it is to avoid contact with it.

6

Odp: Migracja z Oracle na Postgresql

Ogólnie chodziło by mi o to żeby mój wykładowca była zadowolony mi taka baza by wystarczyła ale tu chodzi o to żeby wykorzystać jak najwięcej obiektowych mechanizmów postgresql.

7

Odp: Migracja z Oracle na Postgresql

To zasadniczo zapomnij. Podany schemat ma się nijak do obiektowości w rozumieniu PostgreSQL'a.

--
The best thing about modern society is how easy it is to avoid contact with it.