PG17 compatibility: Fix -1/Null diff in attstattarget test output (#7749)

Changed `attstattarget` in `pg_attribute` to use `NullableDatum`,
allowing null representation for default statistics target in PostgreSQL
17.

Relevant PG commit:
6a004f1be87d34cfe51acf2fe2552d2b08a79273
6a004f1be8

```diff
 -- verify statistics is set
 SELECT c.relname, a.attstattarget
 FROM pg_attribute a
 JOIN pg_class c ON a.attrelid = c.oid AND c.relname LIKE 'test\_idx%'
 ORDER BY c.relname, a.attnum;
   relname  | attstattarget 
 -----------+---------------
  test_idx  |          4646
- test_idx2 |            -1
+ test_idx2 |              
  test_idx2 |         10000
  test_idx2 |          3737
 (4 rows)
```
pull/7738/head
Mehmet YILMAZ 2024-11-17 23:43:39 +03:00 committed by GitHub
parent 8c0feee74d
commit 32a2a31b13
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 15 additions and 7 deletions

View File

@ -32,29 +32,33 @@ SELECT create_distributed_table('t2','a');
(1 row)
-- verify statistics is set
SELECT c.relname, a.attstattarget
-- pg17 Changed `attstattarget` in `pg_attribute` to use `NullableDatum`, allowing null representation for default statistics target in PostgreSQL 17.
-- https://github.com/postgres/postgres/commit/6a004f1be87d34cfe51acf2fe2552d2b08a79273
SELECT c.relname,
CASE WHEN a.attstattarget = -1 THEN NULL ELSE a.attstattarget END AS attstattarget
FROM pg_attribute a
JOIN pg_class c ON a.attrelid = c.oid AND c.relname LIKE 'test\_idx%'
ORDER BY c.relname, a.attnum;
relname | attstattarget
---------------------------------------------------------------------
test_idx | 4646
test_idx2 | -1
test_idx2 |
test_idx2 | 10000
test_idx2 | 3737
(4 rows)
\c - - - :worker_1_port
SELECT c.relname, a.attstattarget
SELECT c.relname,
CASE WHEN a.attstattarget = -1 THEN NULL ELSE a.attstattarget END AS attstattarget
FROM pg_attribute a
JOIN pg_class c ON a.attrelid = c.oid AND c.relname SIMILAR TO 'test\_idx%\_\d%'
ORDER BY c.relname, a.attnum;
relname | attstattarget
---------------------------------------------------------------------
test_idx2_980004 | -1
test_idx2_980004 |
test_idx2_980004 | 10000
test_idx2_980004 | 3737
test_idx2_980006 | -1
test_idx2_980006 |
test_idx2_980006 | 10000
test_idx2_980006 | 3737
test_idx_980000 | 4646

View File

@ -23,13 +23,17 @@ ALTER INDEX test_idx2 ALTER COLUMN 2 SET STATISTICS 99999;
SELECT create_distributed_table('t2','a');
-- verify statistics is set
SELECT c.relname, a.attstattarget
-- pg17 Changed `attstattarget` in `pg_attribute` to use `NullableDatum`, allowing null representation for default statistics target in PostgreSQL 17.
-- https://github.com/postgres/postgres/commit/6a004f1be87d34cfe51acf2fe2552d2b08a79273
SELECT c.relname,
CASE WHEN a.attstattarget = -1 THEN NULL ELSE a.attstattarget END AS attstattarget
FROM pg_attribute a
JOIN pg_class c ON a.attrelid = c.oid AND c.relname LIKE 'test\_idx%'
ORDER BY c.relname, a.attnum;
\c - - - :worker_1_port
SELECT c.relname, a.attstattarget
SELECT c.relname,
CASE WHEN a.attstattarget = -1 THEN NULL ELSE a.attstattarget END AS attstattarget
FROM pg_attribute a
JOIN pg_class c ON a.attrelid = c.oid AND c.relname SIMILAR TO 'test\_idx%\_\d%'
ORDER BY c.relname, a.attnum;