sql - 查找磁盘上缺少文件的 PostgreSQL 记录,以及磁盘上缺少数据库记录的文件

标签 sql postgresql postgresql-9.6

我正在使用无法在其中创建函数或临时表的 PostgreSQL 9.6 只读副本。

在一个表中有一个应该在光盘上的文件列表。在一个完全不同的服务的目录中,有文件本身,以 file_id 命名。

  Column   |   Type
-----------+-----------
 file_id   |  integer
 name      |  text

在另一台机器上的光盘上

ls -rt /var/www/dbfiles
519288     519290     519297     519298     519231     ...

大约有 5000 条记录和大约 5000 个文件,但我有理由相信它们不匹配。因此,我试图找到一种运行查询的方法,该查询将显示数据库中的哪些记录在磁盘上没有文件,以及磁盘上的哪些文件在数据库中没有记录。目前这是一次性的,所以我不介意对目录列表进行一定程度的修改。

如果我可以将目录列表导入到表中,我将只进行外部联接并在每一侧查找空值。有没有办法可以针对充满 ID 的子查询进行外部连接?有点像

SELECT f.name, dir_listing.id FROM files f
FULL OUTER JOIN (SELECT (519288, 519290, 519297, 519298, 519231...) AS id) AS dir_listing

输出的样子

 name          |   id
---------------+---------
 myfile.txt    | 519288
 otherfile.txt | 
               | 519290 

(等)

让我远离 CSV 和 VLOOKUP!

最佳答案

您可以使用 VALUES():

SELECT f.name, dir_listing.id
FROM files f FULL OUTER JOIN
     (VALUES (519288), (519290), (519297), (519298), (519231), 
     ) AS dir_listing (id)
     ON f.file_id = dir_listing.id;

关于sql - 查找磁盘上缺少文件的 PostgreSQL 记录,以及磁盘上缺少数据库记录的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54766089/

相关文章:

sql - 间接 UNIQUE 约束

mysql - 关于 MySQL 和 PostgreSQL 中的子查询

java - PreparedStatement IF EXISTS 抛出 : org. postgresql.util.PSQLException : The column index is out of range: 1, 列数:0

postgresql - postgis 不适用于所有 postgres 用户

sql - 在 postgres 中计算表大小的正确方法是什么?

sql - 所有动态列的总和

sql - 在不使用 R 内存的情况下从 dplyr 对象创建新的 SQL 表

PHP 输出作为数据库的链接

postgresql - SQLAlchemy 无法连接到本地主机上的 Postgresql

postgresql - 如何使用 PostgreSQL JSONB_SET() 创建新的深层对象元素