среда, 9 октября 2013 г.

Макросы в pgAdmin. Генерация шаблонов select,insert,update,delete,truncate для конкретной таблицы


Во время написания кода sql- или plpgsql-функций  хочется уменьшить время, которое затрачивается на реализацию типовых фрагментов. К таким фрагментам относятся операторы select, insert,update,delete,truncate  при работе с  таблицами. К сожалению в pgadmin отсутствует функция автозавершения набираемого текста и поэтому нет возможности быстро генерировать команды манипуляции с таблицами с выбором шаблонов этих  команд из контекстного меню.
Чтобы восполнить  этот пробел я написал pgadmin-макрос, генерирующий шаблоны команд select, insert,update,delete,truncate для таблицы с подстановкой соответствующих полей этой таблицы.



Текст макроса:

SELECT table_schema,
       TABLE_NAME,
       'select ' || string_agg(COLUMN_NAME, ',') || ' from ' || table_schema || '.' || TABLE_NAME AS query_select,
                                                                                                     'insert into ' || table_schema || '.' || TABLE_NAME || '(' || string_agg(COLUMN_NAME, ',') || ') values()' AS query_insert,
                                                                                                                                                            'update ' || table_schema || '.' || TABLE_NAME || ' set ' || string_agg(COLUMN_NAME, '= ,') || ' where' AS query_update,
'delete from '|| table_schema || '.' || TABLE_NAME || ' where ' AS query_delete,
                                                      'truncate table ' || table_schema || '.' || TABLE_NAME || ' restart identity cascade' AS query_truncate
FROM information_schema.columns
WHERE NOT (table_schema ILIKE 'pg_%'
           OR table_schema ILIKE 'information_%')
AND TABLE_NAME ILIKE ('%' || trim('$SELECTION$') || '%')
GROUP BY TABLE_NAME,
         table_schema;


Пример:

1. Создадим таблицу table1

CREATE TABLE table1( id serial PRIMARY KEY, name varchar(255), code varchar(20), datetime TIMESTAMP DEFAULT now());

2. Выделим  название "table1" и выполним наш макрос

3. Результатом выполнения макроса в pgadmin будет следующая таблица




Тексты полученных шаблонов команд для таблицы будут следующие:

select id,name,code,datetime from public.table1

insert into public.table1(id,name,code,datetime) values()

update public.table1 set id= ,name= ,code= ,datetime where

delete from public.table1 where

truncate table public.table1 restart identity cascade




4. Далее можно скопировать текст нужного шаблона и использовать в написании sql-кода. 

Благодаря макросу мы фактически  получили тексты 5 основных шаблонных команд для работы с таблицей - select,insert,update,delete,truncate.  Если таблица большая и содержит  множество полей - это тем более полезно, не нужно выполнять дополнительные действия по уточнению наименований полей. Таким образом, этот макрос позволяет сократить время работы и увеличить производительность программиста. 

Посмотреть работу макроса можно в следующем на примере по ссылке 
Каталог блогов Blogolist