【问题标题】:Insert data into an empty table from another table将数据从另一个表插入到一个空表中
【发布时间】:2020-04-01 21:10:46
【问题描述】:

1.我有一个带有 node_id(PK),node_name(name),connstr(text),last_snap_id(integer) 的表节点,这个表有 1 行填充 1,local,dbname = postgres,0

2.我有一个表 index_list,其中 node_id(PK),indexrelid(PK),schemaname,indexrelname 为空

3.我必须从 pg_stat_user_indexes 收集数据,列是 indexrelid,schemaname,indexrelname

问题:我如何从 pg_stat_user_indexes 获取数据并同时加载到我的 index_list 表中,如果我同时使用 2 个 select 语句,我会出错。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    欢迎来到 SO。

    首先你需要创建一个SEQUENCE 或者创建node_id 类型为serial..的列。

    CREATE SEQUENCE seq_node_id START WITH 1;
    

    .. 然后使用 INSERT INTO … (SELECT * …) 填充您的节点表

    INSERT INTO nodes (node_id,indexrelid,schemaname,indexrelname)
    SELECT nextval('seq_node_id'),indexrelid,schemaname,indexrelname
    FROM pg_stat_user_indexes;
    

    如果node_idserial 类型,您可以在INSERT 中简单地省略它

    INSERT INTO nodes (indexrelid,schemaname,indexrelname)
    SELECT indexrelid,schemaname,indexrelname
    FROM pg_stat_user_indexes;
    

    编辑

    这些CREATE TABLEINSERT 语句应该让您更加清楚:

    CREATE TABLE nodes2 (
      node_id serial, indexrelid text, schemaname text, indexrelname text
    );
    
    INSERT INTO nodes2 (indexrelid,schemaname,indexrelname)
    SELECT indexrelid,schemaname,indexrelname
    FROM pg_stat_user_indexes;
    

    【讨论】:

    • 我的节点表 node_id 列包含('nodes_node_id_seq),我的查询仍然出错,它说节点没有关系
    • @virsnuparameswaran 所以请将表的 CREATE TABLE 语句添加到问题中。由于您的表格似乎已经附加了一个序列,因此我发布的第二个选项应该可以工作。
    • @virsnuparameswaran 我刚刚编辑了我的答案并提出了一些建议
    • 我已经编辑了我的问题以便更好地理解。
    • @virsnuparameswaran 我在上次编辑中添加的代码有什么问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 2015-10-08
    • 2014-10-15
    • 2017-03-05
    • 2013-04-25
    相关资源
    最近更新 更多