2009-11-30 3 views
2

Возможно ли скопировать разрешения пользователя из одной таблицы из базы данных PostgreSQL в другую таблицу? Является ли это просто вопрос обновления значения pg_class.relacl столбца для таблицы на значение для исходной таблицы, например:Разрешения на копирование PostgreSQL из другой таблицы

UPDATE pg_class 
SET relacl=(SELECT relacl FROM pg_class WHERE relname='source_table') 
WHERE relname='target_table'; 

Это похоже на работу, но мне не хватает что-нибудь еще, что может понадобиться быть сделанным или другими «gotchas» с помощью этого метода?

Заранее благодарим за любые ответы.

ответ

2

Если вы можете использовать командную строку вместо SQL, то более безопасный подход будет использовать pg_dump:

pg_dump dbname -t oldtablename -s \ 
| egrep '^(GRANT|REVOKE)' \ 
| sed 's/oldtablename/newtablename/' \ 
| psql dbname 

Я предполагаю, что сервер UNIX. В Windows я бы использовал pg_dump -s в файл, вручную отредактировал его, а затем импортировал в базу данных.

Возможно, вам также потребуется скопировать разрешения на последовательности, принадлежащие этой таблице - pg_dump будет работать.

Смежные вопросы