Skip to content

Postgres versions

Do the designs behave in the same way on different Postgres major versions? This page shows every version that exists in the benchmark data. Each run file has a pg_version, an environment and an optional tag. A series is one major version on one environment with one tag. The page compares versions only within the same environment and tag. The optimized designs (tag opt) come first, and the runs before the optimizations follow.

The Postgres versions report has the Docker analysis. Optimizations shows the effect of the optimization pass. The benchmarks dashboard describes the workloads and the charts.

3 Postgres versions available: PG 16, PG 17, PG 18. A series is one Postgres major version on one environment with one tag (the optimized designs have the tag opt). The page compares only series with the same environment and tag, so a version gap never includes a machine gap or an optimization gap. The optimized designs come first, and the runs before the optimizations follow. The page uses the latest run for each design, scale and shape.

SeriesPostgresRunsDesignsConfigurationsHost
PG 16 (docker)16.159A, B, Clarge default, medium deep, medium wideApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 16 (docker, optimized)16.159A, B, Clarge default, medium deep, medium wideApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 17 (docker)17.119A, B, Clarge default, medium deep, medium wideApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 17 (docker, optimized)17.119A, B, Clarge default, medium deep, medium wideApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 18 (docker)18.69A, B, Clarge default, medium deep, medium wideApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 18 (docker, optimized)18.612A, B, C, Dlarge default, medium deep, medium wideApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 18 (docker, opt2)18.63Dlarge default, medium deep, medium wideApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 18 (docker, opt3)18.63Dlarge default, medium deep, medium wideApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 18 (docker, p5)18.63Elarge default, medium default, small defaultApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 18 (docker, p6)18.612A, B, C, Dlarge default, medium default, small defaultApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 18 (docker, p6check)18.61Dlarge defaultApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 18 (docker, p9)18.62Emedium default, small defaultApple M4, 10 CPU, 24 GB; container cpus=4 mem=6g
PG 16 (local)16.415A, B, Clarge default, medium default, small default, medium deep, medium wideApple M4, 10 CPU, 24 GB

Docker, optimized designs (tag opt)

p50 latency by Postgres version

Key workloads, one panel for each workload. The columns are designs, and the groups are Postgres versions. Log axis, milliseconds.

  • A Tuple core
  • B Policy first
  • C Compiled model
  • D Per-model tables
  • E Cedar

large default

RBAC: single check

rbac_check

0.10.20.510.320.270.27PG 160.340.270.27PG 170.300.270.24PG 18

Sharing: first page

share_select_page

0.10.20.5125101.11.01.0PG 161.11.01.0PG 171.01.00.93PG 18

Parents, projection: first page

parents_proj_select_page

0.10.20.5125101.41.21.1PG 161.41.11.1PG 171.31.11.1PG 18

Parents, single branch: first page

parents_select_page

12510205010046155.3PG 1647205.0PG 1746144.9PG 18

Nesting: nest a team

write_nest_team

0.11101000.160.7255PG 160.150.7057PG 170.150.6258PG 18

Nesting: check through a nested team

nest_check

0.10.20.510.300.320.32PG 160.310.320.32PG 170.310.320.30PG 18
Table view: large default, all workloads
Workload (p50 ms)PG 16 APG 16 BPG 16 CPG 17 APG 17 BPG 17 CPG 18 APG 18 BPG 18 C
RBAC: single check0.320.270.270.340.270.270.300.270.24
RBAC: first page0.750.750.750.770.740.730.760.730.67
RBAC: count visible0.850.860.860.830.810.800.780.780.73
RBAC: update one row0.600.490.510.570.470.510.470.470.36
RBAC: assign a role0.170.160.220.160.140.200.150.140.17
Sharing: list visible ids0.320.290.270.340.290.270.290.290.25
Sharing: first page1.131.011.011.141.021.001.031.000.93
Sharing: share one document0.170.150.190.150.150.170.150.140.17
Parents, projection: first page1.401.171.091.361.151.061.331.151.05
Parents, projection: count visible9.438.608.068.698.968.468.428.207.88
Parents, single branch: first page46.015.35.2647.020.15.0445.613.74.94
Parents, single branch: count visible79.628.418.668.227.312.375.121.611.9
Nesting: nest a team0.160.7255.00.150.7056.90.150.6257.7
Nesting: check through a nested team0.300.320.320.310.320.320.310.320.30

medium deep

RBAC: single check

rbac_check

0.10.20.510.320.260.28PG 160.310.270.27PG 170.290.270.24PG 18

Sharing: first page

share_select_page

0.10.20.510.830.760.79PG 160.830.710.69PG 170.760.720.66PG 18

Parents, projection: first page

parents_proj_select_page

0.10.20.5125101.10.830.85PG 161.10.820.73PG 171.00.830.73PG 18

Parents, single branch: first page

parents_select_page

125109.76.44.2PG 167.84.62.9PG 177.44.52.8PG 18

Nesting: nest a team

write_nest_team

0.11101000.150.6472PG 160.150.6169PG 170.150.6375PG 18

Nesting: check through a nested team

nest_check

0.10.20.510.300.330.31PG 160.300.330.32PG 170.340.340.30PG 18
Table view: medium deep, all workloads
Workload (p50 ms)PG 16 APG 16 BPG 16 CPG 17 APG 17 BPG 17 CPG 18 APG 18 BPG 18 C
RBAC: single check0.320.260.280.310.270.270.290.270.24
RBAC: first page0.480.460.470.470.450.480.440.460.42
RBAC: count visible0.410.360.390.380.360.380.350.370.32
RBAC: update one row0.590.460.440.560.450.460.480.460.35
RBAC: assign a role0.170.150.220.160.150.200.150.140.18
Sharing: list visible ids0.340.300.280.340.300.290.310.320.28
Sharing: first page0.830.760.790.830.710.690.760.720.66
Sharing: share one document0.160.160.190.140.140.170.150.140.17
Parents, projection: first page1.060.830.851.060.820.731.000.830.73
Parents, projection: count visible1.431.221.101.401.211.101.251.140.99
Parents, single branch: first page9.686.374.167.844.632.927.414.522.83
Parents, single branch: count visible8.014.893.316.893.742.166.403.742.10
Nesting: nest a team0.150.6472.00.150.6168.60.150.6375.1
Nesting: check through a nested team0.300.330.310.300.330.320.340.340.30

medium wide

RBAC: single check

rbac_check

0.10.20.510.350.270.27PG 160.310.280.28PG 170.290.280.24PG 18

Sharing: first page

share_select_page

12510205010015128.9PG 1620198.3PG 1714188.2PG 18

Parents, projection: first page

parents_proj_select_page

12510205010015148.6PG 1615148.3PG 1715158.7PG 18

Parents, single branch: first page

parents_select_page

125102050100191712PG 1615138.2PG 1715148.1PG 18

Nesting: nest a team

write_nest_team

0.11101000.161.461PG 160.151.262PG 170.151.561PG 18

Nesting: check through a nested team

nest_check

0.10.20.510.330.330.33PG 160.320.330.33PG 170.370.340.31PG 18
Table view: medium wide, all workloads
Workload (p50 ms)PG 16 APG 16 BPG 16 CPG 17 APG 17 BPG 17 CPG 18 APG 18 BPG 18 C
RBAC: single check0.350.270.270.310.280.280.290.280.24
RBAC: first page0.490.460.480.480.470.480.440.460.44
RBAC: count visible0.380.370.380.380.370.380.360.360.33
RBAC: update one row0.530.470.470.560.460.510.490.480.38
RBAC: assign a role0.170.160.210.160.150.200.150.140.18
Sharing: list visible ids4.574.473.407.189.263.394.448.413.41
Sharing: first page14.711.98.8920.218.98.2714.417.88.20
Sharing: share one document0.160.150.190.150.140.170.150.160.17
Parents, projection: first page15.313.98.6215.413.88.2815.015.18.73
Parents, projection: count visible16.214.58.3013.812.46.3013.213.46.33
Parents, single branch: first page18.817.012.214.913.28.1614.713.78.06
Parents, single branch: count visible17.115.110.213.311.46.7813.312.26.61
Nesting: nest a team0.161.4060.80.151.2361.90.151.4761.2
Nesting: check through a nested team0.330.330.330.320.330.330.370.340.31

Takeaway. In this group the largest gap between versions is Sharing: first page on B (medium wide): 11.9 ms on PG 16 against 18.9 ms on PG 17 (1.6x). Gaps under about 20% are noise.

Raw report: bench/baselines/data

Docker, opt2 designs (tag opt2)

This group has only PG 18 (docker, opt2), so nothing is available to compare yet.

Docker, opt3 designs (tag opt3)

This group has only PG 18 (docker, opt3), so nothing is available to compare yet.

Docker, p5 designs (tag p5)

This group has only PG 18 (docker, p5), so nothing is available to compare yet.

Docker, p6 designs (tag p6)

This group has only PG 18 (docker, p6), so nothing is available to compare yet.

Docker, p6check designs (tag p6check)

This group has only PG 18 (docker, p6check), so nothing is available to compare yet.

Docker, p9 designs (tag p9)

This group has only PG 18 (docker, p9), so nothing is available to compare yet.

Docker, untagged runs (before the optimization pass)

p50 latency by Postgres version

Key workloads, one panel for each workload. The columns are designs, and the groups are Postgres versions. Log axis, milliseconds.

  • A Tuple core
  • B Policy first
  • C Compiled model
  • D Per-model tables
  • E Cedar

large default

RBAC: single check

rbac_check

0.10.20.510.300.350.28PG 160.290.350.28PG 170.260.260.25PG 18

Sharing: first page

share_select_page

0.10.20.5125101.61.31.1PG 161.61.21.1PG 171.41.21.0PG 18

Parents, projection: first page

parents_proj_select_page

0.10.20.5125102.21.41.1PG 162.31.41.1PG 172.11.31.1PG 18

Parents, single branch: first page

parents_select_page

1101001k2429511PG 162469510PG 172401029.3PG 18

Nesting: nest a team

write_nest_team

0.11101001k0.16107299PG 160.15112303PG 170.15107300PG 18

Nesting: check through a nested team

nest_check

0.10.20.5125100.671.30.33PG 160.691.30.33PG 170.521.10.30PG 18
Table view: large default, all workloads
Workload (p50 ms)PG 16 APG 16 BPG 16 CPG 17 APG 17 BPG 17 CPG 18 APG 18 BPG 18 C
RBAC: single check0.300.350.280.290.350.280.260.260.25
RBAC: first page0.840.840.850.830.830.860.760.770.73
RBAC: count visible0.930.940.940.900.890.920.850.850.82
RBAC: update one row0.670.810.660.690.750.710.530.520.45
RBAC: assign a role0.170.170.220.160.150.200.160.140.18
Sharing: list visible ids0.350.310.280.360.310.280.340.290.26
Sharing: first page1.551.251.111.561.241.111.451.161.00
Sharing: share one document0.160.160.190.150.140.170.150.140.17
Parents, projection: first page2.211.411.122.271.381.092.091.301.05
Parents, projection: count visible9.128.378.248.988.197.968.567.797.48
Parents, single branch: first page24295.410.724694.710.52401029.26
Parents, single branch: count visible26111623.126611218.126912216.9
Nesting: nest a team0.161072990.151123030.15107300
Nesting: check through a nested team0.671.300.330.691.310.330.521.140.30

medium deep

RBAC: single check

rbac_check

0.10.20.510.290.350.28PG 160.290.340.28PG 170.250.260.25PG 18

Sharing: first page

share_select_page

0.10.20.5125101.51.60.89PG 161.61.70.82PG 171.41.70.77PG 18

Parents, projection: first page

parents_proj_select_page

0.10.20.5125102.11.10.80PG 162.21.10.75PG 172.01.10.71PG 18

Parents, single branch: first page

parents_select_page

12510205010049135.2PG 1650114.1PG 1748113.7PG 18

Nesting: nest a team

write_nest_team

0.11101001k0.16136353PG 160.15134334PG 170.15124307PG 18

Nesting: check through a nested team

nest_check

0.10.20.5125100.491.30.32PG 160.661.30.32PG 170.631.20.30PG 18
Table view: medium deep, all workloads
Workload (p50 ms)PG 16 APG 16 BPG 16 CPG 17 APG 17 BPG 17 CPG 18 APG 18 BPG 18 C
RBAC: single check0.290.350.280.290.340.280.250.260.25
RBAC: first page0.540.560.570.530.540.560.470.500.48
RBAC: count visible0.460.450.470.450.440.460.390.390.37
RBAC: update one row0.680.790.680.630.740.630.450.510.43
RBAC: assign a role0.170.160.220.160.150.200.150.140.18
Sharing: list visible ids0.420.480.290.430.500.290.420.480.28
Sharing: first page1.521.650.891.571.740.821.421.680.77
Sharing: share one document0.170.150.190.150.140.170.150.140.17
Parents, projection: first page2.131.150.802.161.130.752.011.050.71
Parents, projection: count visible2.461.491.112.481.471.112.251.310.97
Parents, single branch: first page48.812.65.2449.811.34.0847.810.93.74
Parents, single branch: count visible48.311.14.2248.410.23.3146.29.893.04
Nesting: nest a team0.161363530.151343340.15124307
Nesting: check through a nested team0.491.310.320.661.340.320.631.180.30

medium wide

RBAC: single check

rbac_check

0.10.20.510.290.350.28PG 160.290.350.28PG 170.260.290.24PG 18

Sharing: first page

share_select_page

1101001k99349.4PG 16104349.6PG 171253710PG 18

Parents, projection: first page

parents_proj_select_page

1101001k100369.6PG 16107379.8PG 171234111PG 18

Parents, single branch: first page

parents_select_page

1101001k1123714PG 161183311PG 171183912PG 18

Nesting: nest a team

write_nest_team

0.11101001k0.16124148PG 160.15134174PG 170.15133181PG 18

Nesting: check through a nested team

nest_check

0.10.20.5125101.31.30.34PG 161.41.40.34PG 171.31.20.31PG 18
Table view: medium wide, all workloads
Workload (p50 ms)PG 16 APG 16 BPG 16 CPG 17 APG 17 BPG 17 CPG 18 APG 18 BPG 18 C
RBAC: single check0.290.350.280.290.350.280.260.290.24
RBAC: first page0.540.570.570.540.550.570.500.570.48
RBAC: count visible0.460.460.480.450.440.470.410.420.38
RBAC: update one row0.670.810.670.670.790.670.530.570.46
RBAC: assign a role0.170.170.220.160.150.200.160.150.17
Sharing: list visible ids24.58.964.0826.19.024.2329.111.44.25
Sharing: first page98.633.69.4010433.89.5912536.910.3
Sharing: share one document0.160.160.190.150.140.170.160.150.18
Parents, projection: first page10036.29.6110736.79.7512340.711.1
Parents, projection: count visible99.536.310.210634.68.0411238.58.97
Parents, single branch: first page11236.914.311832.910.811839.311.8
Parents, single branch: count visible11335.512.811531.39.3212141.29.40
Nesting: nest a team0.161241480.151341740.15133181
Nesting: check through a nested team1.331.340.341.351.410.341.341.220.31

Takeaway. In this group the largest gap between versions is Parents, single branch: first page on C (medium deep): 3.74 ms on PG 18 against 5.24 ms on PG 16 (1.4x). Gaps under about 20% are noise.

Raw report: bench/baselines/data

Local, untagged runs (before the optimization pass)

This group has only PG 16 (local), so nothing is available to compare yet.