Страницы

1 августа 2012 г.

PostgreSQL. Полезные запросы к системным таблицам

Доброго времени суток.
Создаю очередную памятку полезных запросов, к которым время от времени приходится обращаться. Возможно настолько редко, что без памятки не обойтись.
Запросы будут как самописные так и взятые из различны источников (во избежание изобретения велосипедов).

Пост будет постоянно расширяться.

Запросы под катом.


Список таблиц и полей.

SELECT 
 t.table_name, c.column_name, c.data_type
FROM 
 information_schema.TABLES t
    JOIN information_schema.COLUMNS c ON t.table_name::text = c.table_name::text
WHERE 
 t.table_schema::text = 'public'::text AND
 t.table_catalog::name = current_database() AND
 t.table_type::text = 'BASE TABLE'::text AND
 NOT "substring"(t.table_name::text, 1, 1) = '_'::text
ORDER BY 
 t.table_name, c.ordinal_position;

Источник ТУТ


Список таблиц с указанием количества записей в каждой

SELECT
 nspname, relname, reltuples 
FROM 
 pg_class pc
 inner join pg_namespace pn on pn.oid = pc.relnamespace
WHERE 
 relkind = 'r'::char and
 nspname = 'public'
 order by relname

*Результат запроса может быть неточным, если предварительно не произведен VACUUM выбираемых таблиц.


Ожидание завершения транзакции.

Если надо проверить была ли транзакция открыта явно (с помощью Begin), и находится ли наш бэкенд в ней. Т.е. она до сих пор еще не закрыта.

SELECT xact_start < query_start
FROM pg_stat_activity
WHERE procpid = pg_backend_pid();

Источник ТУТ


Перечень индексов и ограничений.

select 
 n.nspname, c.relname
from 
 pg_catalog.pg_class as c
 left join pg_catalog.pg_namespace as n on n.oid = c.relnamespace
where 
 c.relkind = 'i' and
 n.nspname not in ('pg_catalog', 'pg_toast')
order by 
 c.relname 


Перечень представлений (view) с запросами.

SELECT *
FROM information_schema.views
WHERE table_schema NOT IN ('pg_catalog', 'information_schema')
AND table_name !~ '^pg_';


Перечень последовательностей (sequence) в базе данных. Вариант 1.
SELECT c.relname FROM pg_class c WHERE c.relkind = 'S'; 

Перечень последовательностей (sequence) в базе данных. Вариант 2.

select * from information_schema.sequences; 

Перечень последовательностей (sequence) привязанных к автоинкрементным(serial, bigserial) полям таблиц.

select 
 sq.*
from 
 information_schema.tables tb
join 
 information_schema.columns cl on tb.table_name = cl.table_name
join 
 information_schema.sequences sq on position(quote_ident(sq.sequence_name) in cl.column_default) > 0
where 
 tb.table_schema = 'public'
 and tb.table_type = 'BASE TABLE'
order by 
 tb.table_name, cl.column_name, sq.sequence_name;

Комментариев нет:

Отправить комментарий