2015-03-24 2 views
3

У меня есть база данных со многими таблицами, которые используются в качестве ссылки для допустимых значений в других таблицах. Эти справочные таблицы называются valid[table], поэтому я могу отображать их в psql с помощью \dt valid*.Выделить все таблицы в базе данных psql EXCEPT тех, которые соответствуют [pattern]

Я хотел бы иметь возможность выбрать все не -reference таблицы (которые более переменно с именем, но ни один из них не начинают с valid), но не могу понять, каким образом. Я пробовал различные вещи, такие как \dt !valid*, \dt !~valid*, \dt NOT LIKE 'valid%', но они либо ошибки, либо не найдены.

Любые предложения будут оценены!

ответ

2

В соответствии с руководством, psql поддерживает these patterns. Обычно вы можете использовать регулярное выражение отрицательный lookahead (?!valid)*, но ? не может использоваться в регулярном выражении с psql, потому что он переведен на .. Вероятно, проще сделать запрос от INFROMATION SCHEMA:

SELECT table_name FROM information_schema.tables 
    WHERE table_schema NOT IN ('pg_catalog', 'information_schema') --exclude system tables 
    AND table_type = 'BASE TABLE' -- only tables 
    AND table_name NOT LIKE 'valid%'; 
+0

Спасибо Simo, что работает отлично! Я не знал, что вы можете получить доступ к подобной информационной схеме, очень здорово. – jacel

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