2013-10-04 3 views
0

Я унаследовал большую базу данных с пользовательскими данными и хочу узнать, можно ли вычеркнуть все пользовательские данные, кроме одного пользователя-администратора, для перераспределения для новый проект.Удалите каждую строку в каждой таблице, которая содержит столбец userid

Я ищу что-то вроде:

DELETE FROM WHERE all_tables.all_rows строка содержит столбец идентификатора пользователя и идентификатор = admin_user_id

Бонусные баллы, если вы можете заставить его работать на нечетной таблицы, где вместо из «userid» они используют «пользователь» или «loggedin» в качестве имени столбца.

Моя база данных находится в postgresql, но я предполагаю, что простой SQL сделает трюк.

ответ

0

Вы не можете сделать это с помощью простого sql. Во-первых, вам нужно найти эти таблицы и имена столбцов:

SELECT table_name, column_name from information_schema.columns 
where column_name in ('userid ', 'user'); 

Чем вы создаете plpgsql функцию, которая перебирает этих данных, создания необходимого удаления строки запроса и выполняется как динамический запрос:

execute 'delete from ' || x.table_name || ' where ' ... 
+0

Я могу понять ваше первое утверждение, и я вижу, как это даст мне соответствующие таблицы, но я полный новичок в postgresql и не могу проверить ваше решение, но я боюсь –

0
$query = "DELETE * FROM table WHERE EXISTS table.userid LIKE '%' AND table.userid != table.admin_user_id"; 

$query = "DELETE * FROM table WHERE EXISTS table.user LIKE '%' AND table.user != table.admin_user_id"; 

$query = "DELETE * FROM table WHERE EXISTS table.loggedin LIKE '%' AND table.loggedin != table.admin_user_id"; 

вам может понадобиться использовать <> вместо! = В PostGreSQL, я не знаю. Непроверенный, пожалуйста, проверьте сначала.

+0

Это похоже, что это повлияет только на один стол, верно? –

+0

по одному, вы можете запускать только по запросу. – Edward

+0

И только на одном столе за один раз я думаю ... Моя цель - запустить это на всей базе данных за один раз. –

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