Привет. У меня проблемы с PostgreSQL. Установил, создал роль, создал базу, таблицу, дал роли все права на работу с базой и с таблицей:
GRANT ALL PRIVILEGES ON DATABASE flaut TO flautdb;
GRANT ALL PRIVILEGES ON TABLE searches TO flautdb;
Но в PHP получаю ошибку:
Query failed: ERROR: permission denied for sequence searches_id_seq
Таблица состоит из двух полей:
id SERIAL PRIMARY KEY
data JSONB NOT NULL
Запрос PHP:
if(isset($_POST['data']) && !empty($_POST['data'])) {
$data = json_encode($_POST['data'], JSON_UNESCAPED_UNICODE);
//DB
$db = getdb();
$query = "INSERT INTO searches (data) VALUES ('$data') RETURNING id";
$result = pg_query($query) or die('Query failed: ' . pg_last_error());
pg_close($db);
echo $result;
}
Тип данный serial - это просто синтаксическое сокращение для автоматического создания sequence и его использования как дефолтного значения для поля int.
Сами sequence живут отдельно от таблиц и так же требуют права для своего использования.
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO flautdb;
Вообще, для работы с правами доступа postgresql необходимо
или изначально создать базу данных для owner'а
create database dbname owner ownerusername;
и в дальнейшем работать и создавать все объекты именно этим owner'ом. Уже имеющуюся базу можно сменить через reassign owned запросы
Сборка персонального компьютера от Artline: умный выбор для современных пользователей