PostgreSQL_数据回退,数据库导出、导入

目录

前置:

[1 数据回退](#1 数据回退)

[1.1 代码](#1.1 代码)

[1.2 pgAdmin4 中查看](#1.2 pgAdmin4 中查看)

1)t_daily

2) t_stock_daily t_stock_daily)

[2 数据库导出、导入](#2 数据库导出、导入)


前置:

本博文是一个系列。在本人"数据库专栏"-》"PostgreSQL_"开头的博文。

1 数据回退

上一节"PostgreSQL_数据下载并保存(psycopg2)",保存了 2023年7月11日 至 2025年2月13日 的数据。任意取一个日期,比如2025年1月10日,回退到这个日期。

1.1 代码

复制代码
def rollback_to_day_before(date_str:str):
    conn = connect_db()
    '''
    t_stock_daily
    1 找出每只股票 date_str 对应的索引位置
    2 遍历 update 表格
    '''
    cur = conn.cursor()

    # 传入的 date_str 可能不是交易日,如果不是交易日要找到最靠近 date_str 之前的交易日
    sql_q_m_str = f"select max(tradeDateOj) from t_daily where tradeDateOj <= \'{date_str}\';"
    cur.execute(sql_q_m_str)
    res0 = cur.fetchone()
    date_str0 = res0[0].strftime('%Y-%m-%d')

    sql_query_str = f"select ticker,array_position(tradeDate,\'{date_str0}\') from t_stock_daily;"
    cur.execute(sql_query_str)
    res = cur.fetchall()

    sql_update_str = """
    update t_stock_daily set tradeDate=tradeDate[1:%s],openPrice=openPrice[1:%s],highestPrice=highestPrice[1:%s],lowestPrice=lowestPrice[1:%s],closePrice=closePrice[1:%s],turnoverVol=turnoverVol[1:%s],turnoverValue=turnoverValue[1:%s],dealAmount=dealAmount[1:%s],turnoverRate=turnoverRate[1:%s],negMarketValue=negMarketValue[1:%s],marketValue=marketValue[1:%s],chgPct=chgPct[1:%s],PE=PE[1:%s],PE1=PE1[1:%s],PB=PB[1:%s],isOpen=isOpen[1:%s],vwap=vwap[1:%s] where ticker=%s;
    """

    # 删除 t_daily date_str之后的数据
    sql_delete_str = f"delete from t_daily where tradeDateOj>\'{date_str}\';"

    data_list = []
    for one in res:
        one_node = (
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[1],
            one[0]
        )
        data_list.append(one_node)
        pass

    try:
        cur.executemany(sql_update_str,data_list)
        cur.execute(sql_delete_str)
        conn.commit()
    except Exception as e:
        print(f'error:{e}')
        conn.rollback()
    finally:
        cur.close()
        conn.close()
    pass

1.2 pgAdmin4 中查看

1)t_daily

2) t_stock_daily

select tradeDatearray_length(tradeDate,1),openPricearray_length(openPrice,1),highestPricearray_length(highestPrice,1),lowestPricearray_length(lowestPrice,1),closePricearray_length(closePrice,1),turnoverVolarray_length(turnoverVol,1),turnoverValuearray_length(turnoverValue,1),dealAmountarray_length(dealAmount,1),turnoverRatearray_length(turnoverRate,1),negMarketValuearray_length(negMarketValue,1),marketValuearray_length(marketValue,1),chgPctarray_length(chgPct,1),PEarray_length(PE,1),PE1array_length(PE1,1),PBarray_length(PB,1),isOpenarray_length(isOpen,1),vwaparray_length(vwap,1) from t_stock_daily where ticker='000001';

2 数据库导出、导入

导出

1 打开cmd

2 cd 到postgreSQL安装目录的bin目录

执行

pg_dump -U postgres -h 127.0.0.1 -p 5432 -F c -b -v -f E:/db_stock.dump db_stock

注意:"E:/db_stock.dump"换成自己的路径; db_stock换成要导出的数据库名
导入

1 打开cmd

2 cd 到postgreSQL安装目录的bin目录

执行

dropdb -U postgres -h 127.0.0.1 -p 5432 db_stock

createdb -U postgres -h 127.0.0.1 -p 5432 db_stock

pg_restore -U postgres -h 127.0.0.1 -p 5432 -d db_stock -v D:/db_stock.dump

相关推荐
IvorySQL12 小时前
PostgreSQL 日报|逻辑解码 DDL 子事务缺陷修复(10 月 12 日)
数据库·postgresql
瀚高PG实验室13 小时前
瀚高数据库序列介绍、使用及值不连续、重复写入等现象处理
数据库·postgresql·瀚高数据库
这个DBA有点耶13 小时前
PostgreSQL HOT更新:频繁更新表的索引膨胀根因与fillfactor调优
数据库·sql·postgresql
ss27316 小时前
PG实战笔记 | 04 PostgreSQL市场地位与实际案例
数据库·postgresql
码匠许师傅18 小时前
【C++三方组件】libpqxx:PostgreSQL 的 C++ 客户端
开发语言·c++·postgresql
瀚高PG实验室19 小时前
业务无法通过hgproxy访问数据库
数据库·postgresql·瀚高数据库
snhna1 天前
向量数据库深度实战:从 HNSW 到 pgvector、Milvus 选型与 RAG 落地
数据库·人工智能·python·postgresql·milvus
周小董1 天前
[1369]Windows上安装PostgreSQL
数据库·windows·postgresql
ss2732 天前
03 -AI时代首先数据库-PostgreSQL发展历史:从伯克利到AI数据库
postgresql
东风微鸣2 天前
精简 Ubuntu Linux 固件包:每个 N100 节点省下约 450 MB
linux·ubuntu·postgresql