将 Select 查询的结果存储在 sql 文件 PSQL 中供稍后使用

Store result of Select query to use later in sql file PSQL

我有 PostgreSQL 数据库。我使用 PSQL 命令 运行 一个 sql 文件:

psql --dbname=postgresql://postgres:password@127.0.0.1:port/dbname < filename.sql

我的 sql 文件如下所示:

delete from records where id = 1;
delete from recordsinfo where recordsinfoid IN (select recordsinfoid from records where id = 1);

但是我有一个外键依赖:

'records' FOREIGN KEY (recordsinfoid) REFERENCES recordsinfo(recordsinfoid)

所以我不能在第二个删除语句中使用子查询,因为记录会在第一个删除语句中被删除。

我也不能把第二条删除语句放在前面,因为它会导致外键冲突。

如何删除与子查询 'select recordsinfoid from records where id = 1' 对应的 recordsinfo 中的所有条目?

使用临时 table 作为记录缓冲区:

create temp table tmp_records
as
select recordsinfoid from records where id = 1;

delete from records where id = 1;
delete from recordsinfo where recordsinfoid IN (select recordsinfoid from tmp_records);

使用游标从记录中获取recordsinfoid。 通过分隔 ',' 附加 recordsinfoid 来创建一个字符串。 使用创建的字符串进行删除查询, 使用 exec()

执行查询

我正在使用 mssql 。

使用数据修改 CTE:

with d as (
      delete from records
      where id = 1
      returning *
     )
delete from recordsinfo
    where recordsinfoid in (select recordsinfoid from d);

我使用以下方法解决了它:

DO $$
DECLARE
    recordsinfoids INTEGER[];
    i INTEGER;
BEGIN

    recordsinfoids := ARRAY(select recordsinfoid from records where id = 1);

    delete from records where id = 1;

    FOREACH i IN ARRAY recordsinfoids
    LOOP 
        delete from recordsinfo where recordsinfoid = i;
    END LOOP;

END $$; 

基本上预取数组中的值,然后删除