Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion lints/0022_extension_versions_outdated.sql
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,14 @@ select
) as cache_key
from
pg_catalog.pg_available_extensions ext
join
-- ignore versions not in pg_available_extension_versions
-- e.g. residue of pg_upgrade
pg_catalog.pg_available_extension_versions extv
on extv.name = ext.name and extv.installed
where
ext.installed_version is not null
and ext.default_version is not null
and ext.installed_version != ext.default_version
order by
ext.name;
ext.name;
5 changes: 5 additions & 0 deletions splinter.sql
Original file line number Diff line number Diff line change
Expand Up @@ -1137,6 +1137,11 @@ select
) as cache_key
from
pg_catalog.pg_available_extensions ext
join
-- ignore versions not in pg_available_extension_versions
-- e.g. residue of pg_upgrade
pg_catalog.pg_available_extension_versions extv
on extv.name = ext.name and extv.installed
where
ext.installed_version is not null
and ext.default_version is not null
Expand Down
31 changes: 24 additions & 7 deletions test/expected/0022_extension_versions_outdated.out
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,39 @@ begin;
------+-------+-------+--------+------------+-------------+--------+-------------+----------+-----------
(0 rows)

-- Note: We cannot easily create a test that shows outdated extensions
-- because we cannot install older versions of extensions in a test environment.
-- Our test image doesn't have multiple extension versions available.
-- The test will primarily verify that the query executes without error
-- and returns the expected column structure.
-- This lint was tested manually with real outdated extensions.
create extension amcheck version '1.0';
-- Verify the query structure and column names
select
count(*) as total_outdated_extensions
from lint."0022_extension_versions_outdated";
total_outdated_extensions
---------------------------
0
1
(1 row)

-- Test that the query returns proper column structure
-- This will help ensure the lint is properly formed
select
name,
title,
level,
facing,
categories,
description,
detail,
remediation,
metadata,
cache_key
from lint."0022_extension_versions_outdated";
name | title | level | facing | categories | description | detail | remediation | metadata | cache_key
-----------------------------+-----------------------------+-------+----------+------------+--------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------------------+-------------------------------------------------------------------------------------+-----------------------------------------
extension_versions_outdated | Extension Versions Outdated | WARN | EXTERNAL | {SECURITY} | Detects extensions that are not using the default (recommended) version. | Extension `amcheck` is using version `1.0` but version `1.3` is available. Using outdated extension versions may expose the database to security vulnerabilities. | https://supabase.com/docs/guides/database/database-linter?lint=0022_extension_versions_outdated | {"extension_name": "amcheck", "default_version": "1.3", "installed_version": "1.0"} | extension_versions_outdated_amcheck_1.0
(1 row)

drop extension amcheck;
-- Versions that aren't in pg_available_extension_versions are ignored
create extension amcheck;
update pg_extension set extversion = 'foo' where extname = 'amcheck';
select
name,
title,
Expand All @@ -38,4 +54,5 @@ begin;
------+-------+-------+--------+------------+-------------+--------+-------------+----------+-----------
(0 rows)

drop extension amcheck;
rollback;
29 changes: 22 additions & 7 deletions test/sql/0022_extension_versions_outdated.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,7 @@ begin;
-- 0 issues initially (all extensions should be up to date)
select * from lint."0022_extension_versions_outdated";

-- Note: We cannot easily create a test that shows outdated extensions
-- because we cannot install older versions of extensions in a test environment.
-- Our test image doesn't have multiple extension versions available.
-- The test will primarily verify that the query executes without error
-- and returns the expected column structure.
-- This lint was tested manually with real outdated extensions.
create extension amcheck version '1.0';

-- Verify the query structure and column names
select
Expand All @@ -30,4 +25,24 @@ begin;
cache_key
from lint."0022_extension_versions_outdated";

rollback;
drop extension amcheck;

-- Versions that aren't in pg_available_extension_versions are ignored
create extension amcheck;
update pg_extension set extversion = 'foo' where extname = 'amcheck';

select
name,
title,
level,
facing,
categories,
description,
detail,
remediation,
metadata,
cache_key
from lint."0022_extension_versions_outdated";

drop extension amcheck;
rollback;