Re: management of BLOBs
От | Andrey N. Oktyabrski |
---|---|
Тема | Re: management of BLOBs |
Дата | |
Msg-id | 46FB52C2.8030800@antora.ru обсуждение исходный текст |
Ответ на | management of BLOBs (Dmitry Turin <sql4-en@narod.ru>) |
Ответы |
Re: management of BLOBs
Re: management of BLOBs |
Список | pgsql-ru-general |
Dmitry Turin wrote: > Я должен хранить файлы (BLOB-ы) с 3 параметрами > и контролировать доступ пользователей к ним. > Общий объем файлов 2,5 Гб, что меньше, чем 32 Тб > (максимальный размер таблицы в pg). > 66% файлов имеют размер около 10-20 Kb, > 33% файлов имеют размер около 150-200 Kb, что меньше, чем 1Гб > (максимальный размер поля в pg). > > Я внимательно изучил http://pgfoundry.org, http://gborg.postgresql.org, > но не нажел подходящего инструмента. > Посоветуйте какой-нибудь бесплатный софт. Я уже выкладывал тут свою поделку для разделения доступа. Если это то, что надо, пользоваться так: \i row_acl.sql -- OBJECT with rights and parameters CREATE TABLE _blob ( id SERIAL, usr TEXT NOT NULL CHECK (usr ~ '^[A-Za-z0-9_]+$'), grp TEXT NOT NULL CHECK (grp ~ '^[A-Za-z0-9_]+$'), param HSTORE NOT NULL DEFAULT '', file BYTEA ); CREATE VIEW blob AS SELECT * FROM _blob o WHERE session_user = 'admin' OR o.acl && 'o+r' OR o.acl && 'u+r' AND o.usr = session_user OR o.acl && 'g+r' AND (pg_has_role(session_user, o.grp, 'member')); CREATE RULE blob_ins AS ON INSERT TO blob DO INSTEAD INSERT INTO _blob (usr, grp, acl, param, file) VALUES (new.usr, new.grp, new.acl, new.param, new.file); CREATE RULE blob_upd AS ON UPDATE TO blob DO INSTEAD UPDATE _blob SET id = new.id, usr = new.usr, grp = new.grp, acl = new.acl, param = new.param, file = new.file WHERE id = new.id AND ( o.acl && 'o+w' OR o.acl && 'u+w' AND o.usr = session_user OR o.acl && 'g+w' AND (pg_has_role(session_user, o.grp, 'member')); ); CREATE RULE blob_del AS ON DELETE TO blob DO INSTEAD DELETE FROM _blob WHERE id = old.id AND ( o.acl && 'o+w' OR o.acl && 'u+w' AND o.usr = session_user OR o.acl && 'g+w' AND (pg_has_role(session_user, o.grp, 'member')); ); REVOKE select, insert, update, delete ON _blob FROM PUBLIC; GRANT select, insert, update, delete ON blob TO PUBLIC; С того времени, как я его здесь выкладывал, там многое изменилось (уже не мной). Например, селективность индекса теперь считается.
Вложения
В списке pgsql-ru-general по дате отправления: