Temat: utworzenie tabeli przez funkcję - jakie uprawnienia
Mam zdefiniowanego użytkownika który może wpisywać dane do kilku tabel. W wyniku wpisania do jednej z nich przez funkcję wyzwalacza powinny się utworzyć odpowiednie tabele (przez funkcje) i wpisy do nich. Problem polega na utworzeniu tabeli przez funkcję jak uruchamiam jako postgres to jest ok a inaczej otrzymuję komunikat
ERROR: must be member of role "postgres"
CONTEXT: SQL statement " CREATE TABLE pojazdy."_001"(
"dt_data_czas" timestamp(0) without time zone NOT NULL,
"int_nr_diag" integer NOT NULL
--CONSTRAINT "fk_001" FOREIGN KEY (int_nr_diag)
--REFERENCES ustawienia.t_diag_1_1 (int_nr_diag)
--MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
) WITH OIDS;
ALTER TABLE pojazdy."_001" OWNER TO postgres;
GRANT ALL ON TABLE pojazdy."_001" TO postgres;
GRANT SELECT ON TABLE pojazdy."_001" TO "serwis";
GRANT SELECT ON TABLE pojazdy."_001" TO "TW";
GRANT ALL ON TABLE pojazdy."_001" TO "MTDataProvider";
COMMENT ON TABLE pojazdy."_001" IS 'początek i koniec informacji diagnostycznej dla pojazdu "_001"'"
PL/pgSQL function "f_int_create_table1_tbl" line 10 at EXECUTE statement
SQL statement "SELECT pojazdy.f_int_create_table1_tbl( $1 )"
PL/pgSQL function "f_tri_ai_mt_read" line 48 at PERFORM
jak "od komentuję"
--CONSTRAINT "fk_001" FOREIGN KEY (int_nr_diag)
--REFERENCES ustawienia.t_diag_1_1 (int_nr_diag)
--MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
to mam inny komunikat dotyczący relacji:
ERROR: permission denied for relation t_diag_1_1
CONTEXT: SQL statement " CREATE TABLE pojazdy."_001"(
"dt_data_czas" timestamp(0) without time zone NOT NULL,
"int_nr_diag" integer NOT NULL,
CONSTRAINT "fk_001" FOREIGN KEY (int_nr_diag)
REFERENCES ustawienia.t_diag_1_1 (int_nr_diag)
MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE
) WITH OIDS;
--ALTER TABLE pojazdy."_001" SET TABLESPACE baza2;
ALTER TABLE pojazdy."_001" OWNER TO postgres;
GRANT ALL ON TABLE pojazdy."_001" TO postgres;
GRANT SELECT ON TABLE pojazdy."_001" TO "serwis";
GRANT SELECT ON TABLE pojazdy."_001" TO "TW";
GRANT ALL ON TABLE pojazdy."_001" TO "MTDataProvider";
COMMENT ON TABLE pojazdy."_001" IS 'początek i koniec informacji diagnostycznej dla pojazdu "_001"'"
PL/pgSQL function "f_int_create_table1_tbl" line 10 at EXECUTE statement
SQL statement "SELECT pojazdy.f_int_create_table1_tbl( $1 )"
PL/pgSQL function "f_tri_ai_mt_read" line 48 at PERFORM
Jakie muszę dać minimalne a zarazem wystarczające uprawnienia żeby możliwe było prawidłowe wykonywanie funkcji wyzwalacza wraz z tworzeniem tabel i do jakich obiektów muszę te uprawniania przypisać. Dodam jeszcze że baza jest podzielona na schematy i próbowałem już dawać uprawnienia do wykonywania funkcji, tworzenia bazy, wszystkie do schematu ale bez skutecznie.