如何在 PostgreSQL 中获取表上每小时插入的计数

问题描述

我需要一个设置,从 Postgresql 的表中删除超过 60 天的行。

我已经创建了一个函数一个触发器:

import React from "react";
import { NavigationContainer } from "@react-navigation/native";
import AuthNavigator from "./app/navigation/authNavigator";
import DashboarNavigator from "./app/navigation/dashBoardNavigator";
import navigationTheme from "./app/navigation/navigationTheme";
import { Provider } from "react-redux";
import { createStore,applyMiddleware } from "redux";
import { persistStore,persistReducer } from "redux-persist";
import storage from "redux-persist/lib/storage";
import autoMergeLevel2 from "redux-persist/lib/stateReconciler/autoMergeLevel2";
import { PersistGate } from "redux-persist/lib/integration/react";
import { userReducer } from "./app/store/reducers/index";
import thunk from "redux-thunk";
import { Autherization } from "./app/authentication/AuthComponent";
import { connect } from "react-redux";
const persistConfig = {
  key: "root",storage: storage,stateReconciler: autoMergeLevel2
};
const pReducer = persistReducer(persistConfig,userReducer);
const store = createStore(pReducer,applyMiddleware(thunk));
const persistor = persistStore(store);

function App(props) {
  console.log(props,"kkkkkkk",store.getState());
  return (
    <Provider store={store}>
      <PersistGate persistor={persistor}>
        <NavigationContainer theme={navigationTheme}>
          <Autherization />
          {/* {props && props.user && props.user.token ? (
              <DashBoardNavigator />
            ) : (
              <AuthNavigator />
            )} */}
        </NavigationContainer>
      </PersistGate>
    </Provider>
  );
}
const mapStatetoProps = state => {
  return {
    ...state,user: state.user,token: state.user ? state.user.access_token : null
  };
};
const AppPage = connect(mapStatetoProps)(App);
export default AppPage;
export { store };
`

但是我相信如果插入频率高的话,这将不得不经常扫描整个表,这会导致数据库负载很高。 我可以每小时/每天通过 BEGIN DELETE FROM table WHERE updateDate < Now() - INTERVAL '60 days'; RETURN NULL; END; $$; 作业或 Lambda 函数运行此函数。我需要知道该表上每小时的插入情况才能做出决定。

是否有我可以设置的查询或作业来收集详细信息?

解决方法

为了计算每小时的记录数,您可以运行以下查询:

SELECT  CAST(updateDate AS date) AS day,EXTRACT(HOUR FROM updateDate) AS hour,COUNT(*)
FROM _your_table
WHERE   updateDate BETWEEN ? AND ?
GROUP BY
    1,2
ORDER BY
    1,2;

我们每天在单个表上执行大约 4000 万次 INSERT,该表按月进行分区。 3 个月后,我们只是删除了分区。这比 DELETE 快得多。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...