Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

release-22.2: sql: fix reporting of stored and key columns in pg_attribute #90458

Merged
merged 1 commit into from
Oct 21, 2022
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
67 changes: 53 additions & 14 deletions pkg/sql/logictest/testdata/logic_test/pg_catalog
Original file line number Diff line number Diff line change
Expand Up @@ -715,22 +715,23 @@ attrelid relname attname atttypid attstattarget
110 t1 m 20 0 8 14 0 -1
110 t1 n 20 0 8 15 0 -1
3687884466 t1_pkey p 701 0 8 1 0 -1
3687884465 t1_a_key a 20 0 8 2 0 -1
3687884464 index_key b 20 0 8 3 0 -1
3687884464 index_key c 20 0 8 4 0 -1
3687884465 t1_a_key a 20 0 8 1 0 -1
3687884464 index_key b 20 0 8 1 0 -1
3687884464 index_key c 20 0 8 2 0 -1
111 t1_m_seq value 20 0 8 1 0 -1
112 t1_n_seq value 20 0 8 1 0 -1
113 t2 t1_id 20 0 8 1 0 -1
113 t2 rowid 20 0 8 2 0 -1
2955071325 t2_pkey rowid 20 0 8 2 0 -1
2955071325 t2_pkey rowid 20 0 8 1 0 -1
2955071326 t2_t1_id_idx t1_id 20 0 8 1 0 -1
114 t3 a 20 0 8 1 0 -1
114 t3 b 20 0 8 2 0 -1
114 t3 c 25 0 -1 3 0 -1
114 t3 rowid 20 0 8 4 0 -1
2695335054 t3_pkey rowid 20 0 8 4 0 -1
2695335054 t3_pkey rowid 20 0 8 1 0 -1
2695335053 t3_a_b_idx a 20 0 8 1 0 -1
2695335053 t3_a_b_idx b 20 0 8 2 0 -1
2695335053 t3_a_b_idx c 25 0 -1 3 0 -1
115 v1 p 701 0 8 1 0 -1
115 v1 a 20 0 8 2 0 -1
115 v1 b 20 0 8 3 0 -1
Expand All @@ -739,26 +740,26 @@ attrelid relname attname atttypid attstattarget
116 t4 b 701 0 8 2 0 -1
116 t4 c 25 0 -1 3 0 -1
116 t4 rowid 20 0 8 4 0 -1
3214807592 t4_pkey rowid 20 0 8 4 0 -1
3214807592 t4_pkey rowid 20 0 8 1 0 -1
117 t5 a 20 0 8 1 0 -1
117 t5 b 701 0 8 2 0 -1
117 t5 c 25 0 -1 3 0 -1
117 t5 rowid 20 0 8 4 0 -1
1869730585 t5_pkey rowid 20 0 8 4 0 -1
1869730585 t5_pkey rowid 20 0 8 1 0 -1
120 t6 a 20 0 8 1 0 -1
120 t6 b 20 0 8 2 0 -1
120 t6 c 25 0 -1 3 0 -1
120 t6 m 100118 0 -1 4 0 -1
120 t6 rowid 20 0 8 6 0 -1
2129466852 t6_pkey rowid 20 0 8 6 0 -1
2129466855 t6_expr_idx crdb_internal_idx_expr 20 0 8 5 0 -1
2129466854 t6_expr_expr1_idx crdb_internal_idx_expr_1 25 0 -1 7 0 -1
2129466854 t6_expr_expr1_idx crdb_internal_idx_expr 20 0 8 5 0 -1
2129466848 t6_expr_key crdb_internal_idx_expr_1 25 0 -1 7 0 -1
2129466850 t6_expr_idx1 crdb_internal_idx_expr_2 16 0 1 8 0 -1
2129466852 t6_pkey rowid 20 0 8 1 0 -1
2129466855 t6_expr_idx crdb_internal_idx_expr 20 0 8 1 0 -1
2129466854 t6_expr_expr1_idx crdb_internal_idx_expr_1 25 0 -1 1 0 -1
2129466854 t6_expr_expr1_idx crdb_internal_idx_expr 20 0 8 2 0 -1
2129466848 t6_expr_key crdb_internal_idx_expr_1 25 0 -1 1 0 -1
2129466850 t6_expr_idx1 crdb_internal_idx_expr_2 16 0 1 1 0 -1
121 mv1 ?column? 20 0 8 1 0 -1
121 mv1 rowid 20 0 8 2 0 -1
784389845 mv1_pkey rowid 20 0 8 2 0 -1
784389845 mv1_pkey rowid 20 0 8 1 0 -1

query TTIBTTBBTT colnames,rowsort
SELECT c.relname, attname, atttypmod, attbyval, attstorage, attalign, attnotnull, atthasdef, attidentity, attgenerated
Expand Down Expand Up @@ -800,6 +801,7 @@ t3 rowid -1 NULL NULL NU
t3_pkey rowid -1 NULL NULL NULL true true · ·
t3_a_b_idx a -1 NULL NULL NULL false false · ·
t3_a_b_idx b -1 NULL NULL NULL false false · ·
t3_a_b_idx c -1 NULL NULL NULL false true · ·
v1 p -1 NULL NULL NULL false false · ·
v1 a -1 NULL NULL NULL false false · ·
v1 b -1 NULL NULL NULL false false · ·
Expand Down Expand Up @@ -869,6 +871,7 @@ t3 rowid false true 0
t3_pkey rowid false true 0 NULL NULL NULL
t3_a_b_idx a false true 0 NULL NULL NULL
t3_a_b_idx b false true 0 NULL NULL NULL
t3_a_b_idx c false true 0 NULL NULL NULL
v1 p false true 0 NULL NULL NULL
v1 a false true 0 NULL NULL NULL
v1 b false true 0 NULL NULL NULL
Expand Down Expand Up @@ -958,6 +961,7 @@ t6_expr_expr1_idx crdb_internal_idx_expr_1 text 3403232968 default
t6 c text 3403232968 default
t5 c text 3403232968 default
t4 c text 3403232968 default
t3_a_b_idx c text 3403232968 default
t3 c text 3403232968 default
t1 j char 3403232968 default
t1 i _varchar 3403232968 default
Expand Down Expand Up @@ -6066,3 +6070,38 @@ COMMIT;

statement ok
DROP TABLE t;

## Check key columns for indexes PG_Attribute
statement ok
CREATE TABLE t1(x int, y int primary key);

statement ok
CREATE TABLE t2(x int, y int);

statement ok
CREATE TABLE t3(x int, y int);

statement ok
CREATE INDEX t3idx ON t3(x) include(y);

query IT colnames
select attnum, attname from pg_attribute a join pg_class c on c.oid = a.attrelid where c.relname = 't1_pkey'
order by attnum;
----
attnum attname
1 y

query IT colnames
select attnum, attname from pg_attribute a join pg_class c on c.oid = a.attrelid where c.relname = 't2_pkey'
order by attnum;
----
attnum attname
1 rowid

query IT colnames
select attnum, attname from pg_attribute a join pg_class c on c.oid = a.attrelid where c.relname = 't3idx'
order by attnum;
----
attnum attname
1 x
2 y
20 changes: 18 additions & 2 deletions pkg/sql/pg_catalog.go
Original file line number Diff line number Diff line change
Expand Up @@ -467,11 +467,27 @@ https://www.postgresql.org/docs/12/catalog-pg-attribute.html`,
// Columns for each index.
columnIdxMap := catalog.ColumnIDToOrdinalMap(table.PublicColumns())
return catalog.ForEachIndex(table, catalog.IndexOpts{}, func(index catalog.Index) error {
idxID := h.IndexOid(table.GetID(), index.GetID())

for i := 0; i < index.NumKeyColumns(); i++ {
colID := index.GetKeyColumnID(i)
idxID := h.IndexOid(table.GetID(), index.GetID())
column := table.PublicColumns()[columnIdxMap.GetDefault(colID)]
if err := addColumn(column, idxID, uint32(column.GetPGAttributeNum())); err != nil {
// The attnum for columns in an index is the order it appears in the
// index definition and is not related to the attnum the column has in
// the table.
if err := addColumn(column, idxID, uint32(i+1)); err != nil {
return err
}
}
// pg_attribute only includes stored columns for secondary indexes, not
// for primary indexes
for i := 0; i < index.NumSecondaryStoredColumns(); i++ {
colID := index.GetStoredColumnID(i)
column := table.PublicColumns()[columnIdxMap.GetDefault(colID)]
// The attnum for columns in an index is the order it appears in the
// index definition and is not related to the attnum the column has in
// the table.
if err := addColumn(column, idxID, uint32(i+1+index.NumKeyColumns())); err != nil {
return err
}
}
Expand Down