对于我们高度特定的用例,这是一个有点奇怪的 Postgresql 问题。我们有一个表格,它接受 URL 作为用户评论输入的一部分。这是在一个流量很大的网站上。我们有一些 PHP 代码可以验证用户是否只输入了格式正确的 URL,如果他们在评论中包含一个 URL(通常评论文本不包含任何 URL)。
然而,遗憾的是,我们的 PHP 在旧服务器上是旧的。所以在某些时候,我们的 ereg
逻辑变得功能失调。这意味着不法用户在现场输入带有格式错误的 URL 的评论,如下所示:
l%20are%20generally%20included%20almost%20anyplace--even%20if%20your%20"yard"%20is%20bound%20to%20an%20outdoor%20patio%20or%20balcony.Adding%20water%20to%20your%20patio%20could%20be%20as%20simple%20as%20aiming%20a%20low%20dish%20of%20water%20designed%20for%20use%20in%20the%20form%20of%20birdbath.Any%20cursory%20container%20around%206%20in%20.wide%20and%20a%20half-inch%20deep%20will%20attempt%20to%20work.Pie%20pans,%20garbage%20can%20lids,%20or%20flo
请注意,它根本不是 URL。因此,我们的问题是:是否有一种仅适用于 Postgresql 的方法,也许是通过一些 PL/SQL 函数或一些存储函数或其他东西,我们可以使用它来从我们的数据库中删除所有这些垃圾记录?理想情况下,我们不希望使用遍历整个数据库并根据有效 URL 模式对其进行检查的 PHP 程序。
我们想在 PG 本身中执行它。我们可以让数据库脱机来执行此任务,只要它需要。
谢谢!
最佳答案
SELECT * FROM table WHERE url_column !~* '(https?|ftp)://(-\.)?([^\s/?\.#-]+\.?)+(/[^\s]*)?'
尝试这个查询,验证输出 en 然后你可以用这个例子创建一个 DELETE 查询。
关于sql - 从已输入无效 "URL"的表中删除所有行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43041762/