Как Вы находите счет строки для всех Ваших таблиц в Пост-ГРЭС

Вы можете использовать этот плагин для предварительной выборки CSS-файлов: https://github.com/MarvelSQ/html-prefetch-css-webpack-plugin

или

[116 ] вы можете использовать style-loader , чтобы интегрировать css в файл js, а затем предварительно извлечь файл js, используя магический комментарий webpackPrefetch:

import(/* webpackPrefetch: true */ "...")

362
задан a_horse_with_no_name 7 March 2018 в 00:48
поделиться

4 ответа

Есть три способа получить такой счет, каждый со своими компромиссами.

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

Второй подход отмечает, что сборщик статистики примерно отслеживает, сколько строк является «активным» (не удаленным или устаревшим при более поздних обновлениях) в любое время. Это значение может немного снижаться при высокой активности, но в целом это хорошая оценка:

SELECT schemaname,relname,n_live_tup 
  FROM pg_stat_user_tables 
  ORDER BY n_live_tup DESC;

Это также может показать вам, сколько строк не работает, что само по себе является интересным числом для отслеживания.

Третий способ - отметить, что системная команда ANALYZE, которая регулярно выполняется процессом автоочистки, начиная с PostgreSQL 8.3 для обновления статистики таблицы, также вычисляет оценку строки. Вы можете получить его так:

SELECT 
  nspname AS schemaname,relname,reltuples
FROM pg_class C
LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
WHERE 
  nspname NOT IN ('pg_catalog', 'information_schema') AND
  relkind='r' 
ORDER BY reltuples DESC;

Трудно сказать, какой из этих запросов лучше использовать. Обычно я принимаю это решение в зависимости от того, есть ли еще полезная информация, которую я хочу использовать внутри pg_class или внутри pg_stat_user_tables. Для основных целей подсчета, просто чтобы увидеть, насколько большие вещи в целом, любой должен быть достаточно точным.

530
ответ дан 23 November 2019 в 00:11
поделиться

Я хотел общее количество от всех таблиц + список таблиц с их количествами. Немного как диаграмма работы того, где большая часть времени была проведена

WITH results AS ( 
  SELECT nspname AS schemaname,relname,reltuples
    FROM pg_class C
    LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace)
    WHERE 
      nspname NOT IN ('pg_catalog', 'information_schema') AND
      relkind='r'
     GROUP BY schemaname, relname, reltuples
)

SELECT * FROM results
UNION
SELECT 'all' AS schemaname, 'all' AS relname, SUM(reltuples) AS "reltuples" FROM results

ORDER BY reltuples DESC

, Вы могли, конечно, поместить LIMIT пункт на результатах в этой версии также так, чтобы Вы получили самое большое n преступники, а также общее количество.

Одна вещь, которая должна быть отмечена об этом, состоит в том, что необходимо позволить ему находиться некоторое время после группового импорта. Я протестировал это, просто добавив 5 000 строк к базе данных через несколько таблиц с помощью реальных данных импорта. Это показало 1 800 записей приблизительно в течение минуты (вероятно, настраиваемое окно)

, Это базируется от https://работа stackoverflow.com/a/2611745/1548557, так спасибо и распознавание к этому, чтобы запрос использовал в CTE

0
ответ дан 23 November 2019 в 00:11
поделиться

Если вы не возражаете против потенциально устаревших данных, вы можете получить доступ к той же статистике, которая используется оптимизатором запросов .

Примерно так:

SELECT relname, n_tup_ins - n_tup_del as rowcount FROM pg_stat_all_tables;
16
ответ дан 23 November 2019 в 00:11
поделиться

Я не помню URL, откуда я это взял. Но надеюсь, что это поможет вам:

CREATE TYPE table_count AS (table_name TEXT, num_rows INTEGER); 

CREATE OR REPLACE FUNCTION count_em_all () RETURNS SETOF table_count  AS '
DECLARE 
    the_count RECORD; 
    t_name RECORD; 
    r table_count%ROWTYPE; 

BEGIN
    FOR t_name IN 
        SELECT 
            c.relname
        FROM
            pg_catalog.pg_class c LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
        WHERE 
            c.relkind = ''r''
            AND n.nspname = ''public'' 
        ORDER BY 1 
        LOOP
            FOR the_count IN EXECUTE ''SELECT COUNT(*) AS "count" FROM '' || t_name.relname 
            LOOP 
            END LOOP; 

            r.table_name := t_name.relname; 
            r.num_rows := the_count.count; 
            RETURN NEXT r; 
        END LOOP; 
        RETURN; 
END;
' LANGUAGE plpgsql; 

Выполнение select count_em_all (); должно привести к подсчету строк во всех ваших таблицах.

6
ответ дан 23 November 2019 в 00:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: