1

Temat: skrypt tworzenia bazy

potrzebuję za pomocą skryptu utworzyć bazę i wszystko co będzie w niej potrzebne tzn. tabele, funkcje, wyzwalacze, indeksy itd. Najlepiej jak by baza i wszystko z nią związane powstało w określonym katalogu i tu już pojawia się drobny problem bo jako użytkownik postgrs nie ma uprawnień do tworzenia katalogów ale z tego co zauważyłem to można odwoływać się bez zmiany uprawnień do utworzonych podkatalogów w lokalizacji domyślnej czyli np.

'C:\\Program Files\\PostgreSQL\\8.4\\data\\baza1'

to jest ok.
Co do tworzenia bazy to mam takie pytanie:
Czy warto i po co tworzyć TABLESPACE?
Jaka jest kolejność tworzenia takiej bazy w skrypcie tzn. na początek

CREATE DATABASE nazwa
WITH LOCATION = 'C:\\Program Files\\PostgreSQL\\8.4\\data\\baza1'
TEMPLATE = Template0
ENCODING = ENCODING 'UTF-8';

a co następne ? tabele ?
Czy warto i po co korzystać z szablonów bazy np. Template1 tworzy się wówczas 874 funkcje, jakieś widoki, chyba 7 wyzwalaczy i coś tam jeszcze. Czy jest albo będzie to do czegoś potrzebne w nowej tworzonej bazie?
Kolejne pytanie to czy jak zostanie już utworzona baza to czy następnie tworząc w tym samym skrypcie tabele muszą wskazywać że mają one być tworzone w tej właśnie bazie czy będzie tak domyślnie?

2

Odp: skrypt tworzenia bazy

TABLESPACE w postgresie przydaje się gdy chcesz umieścić tabele w innych katalogach niż katalog z klastrem.
Kolejnosc moze byc taka
   -baza,
   -tabele,
   -indeksy chociaż część może powstać automatycznie po utworzeniu tabeli
   -funckje
   -triggery

Każda baza powstaje z jakiegoś szablonu (template'a). Ale z szablony systemowego (template1) albo ze stworzonego wcześniej przez użytkownika. Swoja droga taki szablon to niż innego jak baza wzorcowa.Te funkcje, widoki, wyzwalacze które tworzone są na starcie przydają się. Część z nich wymaga postgres do poprawnego działania.
Tabele są twozone z poziomu bazy więc nie musisz mówić w jakiej bazie maja być tworzone bo wskazuje na to aktualne połączenie z bazą.

3

Odp: skrypt tworzenia bazy

tak właśnie próbuję

CREATE TABLESPACE baza2 
OWNER postgres
LOCATION 'C:\\Program Files\\PostgreSQL\\8.4\\data\\baza2';



CREATE DATABASE baza3 
    WITH LOCATION = 'C:\\Program Files\\PostgreSQL\\8.4\\data\\baza3'
    TEMPLATE = Template0
    ENCODING 'UTF-8'
    OWNER postgres;


CREATE TABLE mt_logger
(
  mt_name character varying(255),
  mt_value character varying(255),
  mt_time timestamp(0) without time zone,
  mt_quality character varying(1)
)
WITH (
  OIDS=TRUE
);

ALTER TABLE mt_logger OWNER TO postgres;

a pojawia się taki błąd

ERROR:  CREATE TABLESPACE cannot be executed from a function or multi-command string

jak rozdzielę na osobne skrypty tzn tworzenie przestrzeni dla tabel, tworzenie bazy i tworzenie tabel to wszystko jest OK sad

Ostatnio edytowany przez WitekS (2009-05-06 13:12:58)