2014-02-14 4 views
0

В pgAdmin вы можете определить свой собственный macro с помощью '$SELECTION$' placeholder. У меня есть макрос для подсчета количества строк в таблице:Макро в pgAdmin - получить количество строк для запроса

select count(*) as rows_in_table from $SELECTION$; 

Это хорошо работает, но, как я пишу много запросов на работе я учил, было бы неплохо иметь макрос для подсчета строк для любого оператора выбора. Единственный способ, которым я нашел, чтобы создать функцию, где две разные ситуации обрабатываются - только имя таблицы выбран или выбран запрос:

create or replace function sys.number_of_rows(in sql text) 
    returns table (number_of_rows bigint) as 
$body$ 
    begin 
     sql:= 
     case 
      when position(' ' in trim(sql)) = 0 then 'select count(*) from ' || sql 
      else 'select count(*) from (' || sql || ') a ' end; 
     return query execute sql; 
    end; 
$body$ 
    language plpgsql; 

Теперь макро select sys.number_of_rows('$SELECTION$'); я могу передать либо имя таблицы или весь запрос.

Это работает отлично, но только в том случае, если функция sys.number_of_rows существует в базе данных. Любая идея, как добиться такой же функциональности, не завися от функции?

ответ

1

Если вы замените $SELECTION$ на ($SELECTION$) as t, он также должен работать, если ваш выбор является полным запросом.

Я не использую pgAdmin, но мой SQL-клиент поддерживает тот же метод замены, и я использую там же макрос.

+0

Это SQL Workbench который вы используете? –

+1

@TomasGreif: да, это инструмент;) –

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