diff --git a/source/tools/pg/images/explain_example.svg b/source/tools/pg/images/explain_example.svg
new file mode 100644
index 0000000000000000000000000000000000000000..df7f6e91a24a5ed07764325c19fcf64ea62c0f27
--- /dev/null
+++ b/source/tools/pg/images/explain_example.svg
@@ -0,0 +1,213 @@
+<svg height="2420" width="1050" version="1.1" xmlns="https://www.w3.org/2000/svg"><defs><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr1"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr2"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr3"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr4"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr5"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr6"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr7"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr8"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr9"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr10"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr11"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr12"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr13"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr14"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr15"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr16"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr17"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr18"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker><marker viewBox="0 0 20 20" markerWidth="10" markerHeight="10" orient="auto" refX="0" refY="2.5" id="arr19"><polygon points="0,0,0,5,10,2.5,0,0" fill="rgba(0, 0, 0, 0.87)"></polygon></marker></defs><g transform="matrix(1,0,0,1,0,0)"><rect x="0" y="0" width="1050" height="2420" rx="5" ry="5" fill="#fafafa"></rect><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0ze2ZpbGw6bm9uZTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0xe3N0cm9rZTojNjY2YmQxO30uY2xzLTJ7ZmlsbDojNjY2YmQxO30uY2xzLTN7c3Ryb2tlOiM4ZDgxMTk7fS5jbHMtNHtmaWxsOiM4ZDgxMTk7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5leF9uZXN0ZWQ8L3RpdGxlPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE3LjIzLDIwYTYsNiwwLDAsMSw2LTZoMjJhNiw2LDAsMCwxLDYsNlY0NGE2LDYsMCwwLDEtNiw2aC0yMmE2LDYsMCwwLDEtNi02VjMyLjI3Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjE3LjIzIDI3LjMxIDEyLjc3IDMzLjI2IDIxLjY4IDMzLjI2IDE3LjIzIDI3LjMxIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMjQuMjMsMjVjMC0zLjMuNy00LDQtNGgxMmMzLjMsMCw0LC43LDQsNFYzOWMwLDMuMy0uNyw0LTQsNEgyOC43MmMtMy4zLDAtNC0uNy00LTRWMzMuNzIiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMjQuNjcgMzEuMzQgMjAuNzEgMzYuMSAyOC4yMyAzNi4xIDI0LjY3IDMxLjM0Ii8+PC9zdmc+" preserveAspectRatio="none" x="950" y="50" width="50" height="50" style="cursor:pointer"><title>Node Type: Nested Loop
+Parallel Aware: false
+Async Capable: false
+Join Type: Left
+Actual Rows: 1
+Actual Loops: 1
+Inner Unique: true
+loops: 1
+</title></image><text x="980" y="120" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>Nested Loop Left</tspan><tspan dy="1.2em" x="980">Join</tspan></text></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0ze2ZpbGw6bm9uZTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0xe3N0cm9rZTojNjY2YmQxO30uY2xzLTJ7ZmlsbDojNjY2YmQxO30uY2xzLTN7c3Ryb2tlOiM4ZDgxMTk7fS5jbHMtNHtmaWxsOiM4ZDgxMTk7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5leF9uZXN0ZWQ8L3RpdGxlPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE3LjIzLDIwYTYsNiwwLDAsMSw2LTZoMjJhNiw2LDAsMCwxLDYsNlY0NGE2LDYsMCwwLDEtNiw2aC0yMmE2LDYsMCwwLDEtNi02VjMyLjI3Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjE3LjIzIDI3LjMxIDEyLjc3IDMzLjI2IDIxLjY4IDMzLjI2IDE3LjIzIDI3LjMxIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMjQuMjMsMjVjMC0zLjMuNy00LDQtNGgxMmMzLjMsMCw0LC43LDQsNFYzOWMwLDMuMy0uNyw0LTQsNEgyOC43MmMtMy4zLDAtNC0uNy00LTRWMzMuNzIiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMjQuNjcgMzEuMzQgMjAuNzEgMzYuMSAyOC4yMyAzNi4xIDI0LjY3IDMxLjM0Ii8+PC9zdmc+" preserveAspectRatio="none" x="650" y="50" width="50" height="50" style="cursor:pointer"><title>Node Type: Nested Loop
+Parent Relationship: Outer
+Parallel Aware: false
+Async Capable: false
+Join Type: Left
+Actual Rows: 1
+Actual Loops: 1
+Inner Unique: true
+Join Filter: ("user".domain_id = domain.domain_id)
+Rows Removed by Join Filter: 0
+loops: 1
+</title></image><text x="680" y="120" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>Nested Loop Left</tspan><tspan dy="1.2em" x="680">Join</tspan></text><line x1="725" x2="788.3333333333334" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="787.3333333333334" x2="851.6666666666666" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="851.6666666666666" x2="915" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr2&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0ze2ZpbGw6bm9uZTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0xe3N0cm9rZTojNjY2YmQxO30uY2xzLTJ7ZmlsbDojNjY2YmQxO30uY2xzLTN7c3Ryb2tlOiM4ZDgxMTk7fS5jbHMtNHtmaWxsOiM4ZDgxMTk7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5leF9uZXN0ZWQ8L3RpdGxlPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE3LjIzLDIwYTYsNiwwLDAsMSw2LTZoMjJhNiw2LDAsMCwxLDYsNlY0NGE2LDYsMCwwLDEtNiw2aC0yMmE2LDYsMCwwLDEtNi02VjMyLjI3Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjE3LjIzIDI3LjMxIDEyLjc3IDMzLjI2IDIxLjY4IDMzLjI2IDE3LjIzIDI3LjMxIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMjQuMjMsMjVjMC0zLjMuNy00LDQtNGgxMmMzLjMsMCw0LC43LDQsNFYzOWMwLDMuMy0uNyw0LTQsNEgyOC43MmMtMy4zLDAtNC0uNy00LTRWMzMuNzIiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMjQuNjcgMzEuMzQgMjAuNzEgMzYuMSAyOC4yMyAzNi4xIDI0LjY3IDMxLjM0Ii8+PC9zdmc+" preserveAspectRatio="none" x="350" y="50" width="50" height="50" style="cursor:pointer"><title>Node Type: Nested Loop
+Parent Relationship: Outer
+Parallel Aware: false
+Async Capable: false
+Join Type: Left
+Actual Rows: 1
+Actual Loops: 1
+Inner Unique: true
+loops: 1
+</title></image><text x="380" y="120" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>Nested Loop Left</tspan><tspan dy="1.2em" x="380">Join</tspan></text><line x1="425" x2="488.3333333333333" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="487.3333333333333" x2="551.6666666666666" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="551.6666666666666" x2="615" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr3&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="50" y="50" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: Outer
+Parallel Aware: false
+Async Capable: false
+Relation Name: user
+Alias: user
+Actual Rows: 1
+Actual Loops: 1
+Filter: (((login)::name = "current_user"()) OR s_vitis.is_vitis_admin())
+Rows Removed by Filter: 0
+loops: 1
+</title></image><text x="80" y="120" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>user</tspan></text><line x1="125" x2="188.33333333333334" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="187.33333333333334" x2="251.66666666666669" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="251.66666666666669" x2="315" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr4&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDpub25lO3N0cm9rZTojNzQ3NDc0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MC43NXB4O30uY2xzLTIsLmNscy04e2ZpbGw6I2YwZWNiNjt9LmNscy0ze2ZpbGw6I2MxOGYzNTt9LmNscy00e2ZpbGw6I2FkZGZmMzt9LmNscy01e2ZpbGw6IzI5ODBiOTt9LmNscy02e2ZpbGw6I2MxOGYzNjt9LmNscy03e29wYWNpdHk6MC44O30uY2xzLTh7c3Ryb2tlOiNjMThmMzY7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5leF9pbmRleF9zY2FuPC90aXRsZT48bGluZSBjbGFzcz0iY2xzLTEiIHgxPSIxMy44NSIgeTE9IjM2LjIzIiB4Mj0iMTkuMTIiIHkyPSI0NC43Ii8+PGxpbmUgY2xhc3M9ImNscy0xIiB4MT0iMTMuODUiIHkxPSIzNi4yMyIgeDI9IjE5LjA5IiB5Mj0iMjcuOTIiLz48bGluZSBjbGFzcz0iY2xzLTEiIHgxPSIyNy42NCIgeTE9IjQ0LjMzIiB4Mj0iMzUuNjQiIHkyPSI1MC4yMyIvPjxsaW5lIGNsYXNzPSJjbHMtMSIgeDE9IjI3LjY0IiB5MT0iNDQuMzMiIHgyPSIzNS42NCIgeTI9IjM4LjkyIi8+PHJlY3QgY2xhc3M9ImNscy0yIiB4PSIxOS4yNiIgeT0iNDEuNjUiIHdpZHRoPSI3Ljk4IiBoZWlnaHQ9IjUuNjkiIHJ4PSIxLjUiIHJ5PSIxLjUiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yNS43NSw0Mi4xNWEzLjU0LDMuNTQsMCwwLDEsLjkuMDdoMGEyLjQsMi40LDAsMCwxLC4xLjkzdjIuNjlhMy4xOCwzLjE4LDAsMCwxLS4wOC45cy0uMTkuMS0uOTIuMWgtNWEzLjExLDMuMTEsMCwwLDEtLjktLjA4aDBhMi4yNSwyLjI1LDAsMCwxLS4xLS45MlY0My4xNWEzLjE4LDMuMTgsMCwwLDEsLjA4LS45cy4xOS0uMS45Mi0uMWg1bTAtMWgtNWMtMS42NSwwLTIsLjM1LTIsMnYyLjY5YzAsMS42NS4zNSwyLDIsMmg1YzEuNjUsMCwyLS4zNSwyLTJWNDMuMTVjMC0xLjY1LS4zNS0yLTItMloiLz48bGluZSBjbGFzcz0iY2xzLTEiIHgxPSIyNy42NCIgeTE9IjI3LjgzIiB4Mj0iMzUuNjQiIHkyPSIzMy43MyIvPjxsaW5lIGNsYXNzPSJjbHMtMSIgeDE9IjI3LjY0IiB5MT0iMjcuODMiIHgyPSIzNS42NCIgeTI9IjIyLjQyIi8+PHJlY3QgY2xhc3M9ImNscy0yIiB4PSIxOS4yNiIgeT0iMjUuMTUiIHdpZHRoPSI3Ljk4IiBoZWlnaHQ9IjUuNjkiIHJ4PSIxLjUiIHJ5PSIxLjUiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yNS43NSwyNS42NWEzLjU0LDMuNTQsMCwwLDEsLjkuMDdoMGEyLjQsMi40LDAsMCwxLC4xLjkzdjIuNjlhMy4xOCwzLjE4LDAsMCwxLS4wOC45cy0uMTkuMS0uOTIuMWgtNWEzLjExLDMuMTEsMCwwLDEtLjktLjA4aDBhMi4yNSwyLjI1LDAsMCwxLS4xLS45MlYyNi42NWEzLjE4LDMuMTgsMCwwLDEsLjA4LS45cy4xOS0uMS45Mi0uMWg1bTAtMWgtNWMtMS42NSwwLTIsLjM1LTIsMnYyLjY5YzAsMS42NS4zNSwyLDIsMmg1YzEuNjUsMCwyLS4zNSwyLTJWMjYuNjVjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik02LjYxLDQwLjg5Yy0xLjM4LDAtMS41LS4xMy0xLjUtMS41VjM1LjJoOHY0LjE5YzAsMS4zNy0uMTMsMS41LTEuNSwxLjVaIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMTIuNTksMzUuN3YzLjY5YTIuNywyLjcsMCwwLDEtLjA4LjlzLS4xOS4xLS45Mi4xaC01YTMsMywwLDAsMS0uOS0uMDhoMGEyLjQ1LDIuNDUsMCwwLDEtLjA5LS45MlYzNS43aDdtMS0xaC05djQuNjljMCwxLjY1LjM1LDIsMiwyaDVjMS42NSwwLDItLjM1LDItMlYzNC43WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTUuMTEsMzUuMjZWMzMuMDdjMC0xLjM4LjEyLTEuNSwxLjUtMS41aDVjMS4zNywwLDEuNS4xMiwxLjUsMS41djIuMTlaIi8+PHBhdGggY2xhc3M9ImNscy01IiBkPSJNMTEuNTksMzIuMDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjEuNjloLTdWMzMuMDdhMy43MSwzLjcxLDAsMCwxLC4wNy0uOSwyLjE2LDIuMTYsMCwwLDEsLjkzLS4xaDVtMC0xaC01Yy0xLjY1LDAtMiwuMzUtMiwydjIuNjloOVYzMy4wN2MwLTEuNjUtLjM1LTItMi0yWiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTM1Ljc0LDUzLjQ3Yy0xLjM4LDAtMS41LS4xMi0xLjUtMS41VjE5LjUzSDU4Ljg5VjUyYzAsMS4zOC0uMTMsMS41LTEuNSwxLjVaIi8+PHBhdGggY2xhc3M9ImNscy02IiBkPSJNNTguMzksMjBWNTJhMi43LDIuNywwLDAsMS0uMDguOXMtLjE5LjEtLjkyLjFIMzUuNzRhMy41NCwzLjU0LDAsMCwxLS45LS4wN2gwYTIuMTYsMi4xNiwwLDAsMS0uMS0uOTNWMjBINTguMzltMS0xSDMzLjc0VjUyYzAsMS42NS4zNSwyLDIsMkg1Ny4zOWMxLjY1LDAsMi0uMzUsMi0yVjE5WiIvPjxnIGNsYXNzPSJjbHMtNyI+PGxpbmUgY2xhc3M9ImNscy04IiB4MT0iNDIuNDQiIHkxPSI1Mi45NyIgeDI9IjQyLjQ0IiB5Mj0iMTkuOTciLz48bGluZSBjbGFzcz0iY2xzLTgiIHgxPSI1MC42MyIgeTE9IjUyLjk3IiB4Mj0iNTAuNjMiIHkyPSIxOS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtOCIgeDE9IjM0LjczIiB5MT0iMjcuOTciIHgyPSI1OC4zNyIgeTI9IjI3Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy04IiB4MT0iMzQuNzMiIHkxPSIzNi4zNCIgeDI9IjU4LjM3IiB5Mj0iMzYuMzQiLz48bGluZSBjbGFzcz0iY2xzLTgiIHgxPSIzNC43MyIgeTE9IjQ0LjcxIiB4Mj0iNTguMzciIHkyPSI0NC43MSIvPjwvZz48cGF0aCBjbGFzcz0iY2xzLTQiIGQ9Ik01MC43LDE5LjUzdi05aDYuNjljMS4zOCwwLDEuNS4xMiwxLjUsMS41djcuNVoiLz48cGF0aCBjbGFzcz0iY2xzLTUiIGQ9Ik01Ny4zOSwxMWEzLjQ0LDMuNDQsMCwwLDEsLjkuMDdoMGEyLjYyLDIuNjIsMCwwLDEsLjA5LjkzdjdINTEuMlYxMWg2LjE5bTAtMUg1MC4yVjIwaDkuMTlWMTJjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTQiIGQ9Ik0zNC4yMywxOS41M1YxMmMwLTEuMzguMTMtMS41LDEuNS0xLjVoNi43djlaIi8+PHBhdGggY2xhc3M9ImNscy01IiBkPSJNNDEuOTMsMTF2OGgtNy4yVjEyYTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWMTBaIi8+PHJlY3QgY2xhc3M9ImNscy00IiB4PSI0Mi40NSIgeT0iMTAuNTMiIHdpZHRoPSI4LjE3IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTUiIGQ9Ik01MC4xMiwxMXY4SDQzVjExaDcuMTdtMS0xSDQyVjIwaDkuMTdWMTBaIi8+PC9zdmc+" preserveAspectRatio="none" x="50" y="210" width="50" height="50" style="cursor:pointer"><title>Node Type: Index Scan
+Parent Relationship: Inner
+Parallel Aware: false
+Async Capable: false
+Scan Direction: Forward
+Index Name: pk_billinggroup_id
+Relation Name: billinggroup
+Alias: billinggroup
+Actual Rows: 0
+Actual Loops: 1
+Index Cond: (billinggroup_id = "user".billinggroup_id)
+Rows Removed by Index Recheck: 0
+loops: 1
+</title></image><text x="80" y="280" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pk_billinggroup_id</tspan></text><line x1="125" x2="188.33333333333334" y1="235" y2="235" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="187.33333333333334" x2="251.66666666666669" y1="235" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="251.66666666666669" x2="315" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr5&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="350" y="370" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: Inner
+Parallel Aware: false
+Async Capable: false
+Relation Name: domain
+Alias: domain
+Actual Rows: 0
+Actual Loops: 1
+loops: 1
+</title></image><text x="380" y="440" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>domain</tspan></text><line x1="425" x2="488.3333333333333" y1="395" y2="395" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="487.3333333333333" x2="551.6666666666666" y1="395" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="551.6666666666666" x2="615" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr6&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTF7ZmlsbDpub25lO3N0cm9rZTojNzQ3NDc0O3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MC43NXB4O30uY2xzLTIsLmNscy04e2ZpbGw6I2YwZWNiNjt9LmNscy0ze2ZpbGw6I2MxOGYzNTt9LmNscy00e2ZpbGw6I2FkZGZmMzt9LmNscy01e2ZpbGw6IzI5ODBiOTt9LmNscy02e2ZpbGw6I2MxOGYzNjt9LmNscy03e29wYWNpdHk6MC44O30uY2xzLTh7c3Ryb2tlOiNjMThmMzY7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5leF9pbmRleF9zY2FuPC90aXRsZT48bGluZSBjbGFzcz0iY2xzLTEiIHgxPSIxMy44NSIgeTE9IjM2LjIzIiB4Mj0iMTkuMTIiIHkyPSI0NC43Ii8+PGxpbmUgY2xhc3M9ImNscy0xIiB4MT0iMTMuODUiIHkxPSIzNi4yMyIgeDI9IjE5LjA5IiB5Mj0iMjcuOTIiLz48bGluZSBjbGFzcz0iY2xzLTEiIHgxPSIyNy42NCIgeTE9IjQ0LjMzIiB4Mj0iMzUuNjQiIHkyPSI1MC4yMyIvPjxsaW5lIGNsYXNzPSJjbHMtMSIgeDE9IjI3LjY0IiB5MT0iNDQuMzMiIHgyPSIzNS42NCIgeTI9IjM4LjkyIi8+PHJlY3QgY2xhc3M9ImNscy0yIiB4PSIxOS4yNiIgeT0iNDEuNjUiIHdpZHRoPSI3Ljk4IiBoZWlnaHQ9IjUuNjkiIHJ4PSIxLjUiIHJ5PSIxLjUiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yNS43NSw0Mi4xNWEzLjU0LDMuNTQsMCwwLDEsLjkuMDdoMGEyLjQsMi40LDAsMCwxLC4xLjkzdjIuNjlhMy4xOCwzLjE4LDAsMCwxLS4wOC45cy0uMTkuMS0uOTIuMWgtNWEzLjExLDMuMTEsMCwwLDEtLjktLjA4aDBhMi4yNSwyLjI1LDAsMCwxLS4xLS45MlY0My4xNWEzLjE4LDMuMTgsMCwwLDEsLjA4LS45cy4xOS0uMS45Mi0uMWg1bTAtMWgtNWMtMS42NSwwLTIsLjM1LTIsMnYyLjY5YzAsMS42NS4zNSwyLDIsMmg1YzEuNjUsMCwyLS4zNSwyLTJWNDMuMTVjMC0xLjY1LS4zNS0yLTItMloiLz48bGluZSBjbGFzcz0iY2xzLTEiIHgxPSIyNy42NCIgeTE9IjI3LjgzIiB4Mj0iMzUuNjQiIHkyPSIzMy43MyIvPjxsaW5lIGNsYXNzPSJjbHMtMSIgeDE9IjI3LjY0IiB5MT0iMjcuODMiIHgyPSIzNS42NCIgeTI9IjIyLjQyIi8+PHJlY3QgY2xhc3M9ImNscy0yIiB4PSIxOS4yNiIgeT0iMjUuMTUiIHdpZHRoPSI3Ljk4IiBoZWlnaHQ9IjUuNjkiIHJ4PSIxLjUiIHJ5PSIxLjUiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0yNS43NSwyNS42NWEzLjU0LDMuNTQsMCwwLDEsLjkuMDdoMGEyLjQsMi40LDAsMCwxLC4xLjkzdjIuNjlhMy4xOCwzLjE4LDAsMCwxLS4wOC45cy0uMTkuMS0uOTIuMWgtNWEzLjExLDMuMTEsMCwwLDEtLjktLjA4aDBhMi4yNSwyLjI1LDAsMCwxLS4xLS45MlYyNi42NWEzLjE4LDMuMTgsMCwwLDEsLjA4LS45cy4xOS0uMS45Mi0uMWg1bTAtMWgtNWMtMS42NSwwLTIsLjM1LTIsMnYyLjY5YzAsMS42NS4zNSwyLDIsMmg1YzEuNjUsMCwyLS4zNSwyLTJWMjYuNjVjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik02LjYxLDQwLjg5Yy0xLjM4LDAtMS41LS4xMy0xLjUtMS41VjM1LjJoOHY0LjE5YzAsMS4zNy0uMTMsMS41LTEuNSwxLjVaIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMTIuNTksMzUuN3YzLjY5YTIuNywyLjcsMCwwLDEtLjA4LjlzLS4xOS4xLS45Mi4xaC01YTMsMywwLDAsMS0uOS0uMDhoMGEyLjQ1LDIuNDUsMCwwLDEtLjA5LS45MlYzNS43aDdtMS0xaC05djQuNjljMCwxLjY1LjM1LDIsMiwyaDVjMS42NSwwLDItLjM1LDItMlYzNC43WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTUuMTEsMzUuMjZWMzMuMDdjMC0xLjM4LjEyLTEuNSwxLjUtMS41aDVjMS4zNywwLDEuNS4xMiwxLjUsMS41djIuMTlaIi8+PHBhdGggY2xhc3M9ImNscy01IiBkPSJNMTEuNTksMzIuMDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjEuNjloLTdWMzMuMDdhMy43MSwzLjcxLDAsMCwxLC4wNy0uOSwyLjE2LDIuMTYsMCwwLDEsLjkzLS4xaDVtMC0xaC01Yy0xLjY1LDAtMiwuMzUtMiwydjIuNjloOVYzMy4wN2MwLTEuNjUtLjM1LTItMi0yWiIvPjxwYXRoIGNsYXNzPSJjbHMtMiIgZD0iTTM1Ljc0LDUzLjQ3Yy0xLjM4LDAtMS41LS4xMi0xLjUtMS41VjE5LjUzSDU4Ljg5VjUyYzAsMS4zOC0uMTMsMS41LTEuNSwxLjVaIi8+PHBhdGggY2xhc3M9ImNscy02IiBkPSJNNTguMzksMjBWNTJhMi43LDIuNywwLDAsMS0uMDguOXMtLjE5LjEtLjkyLjFIMzUuNzRhMy41NCwzLjU0LDAsMCwxLS45LS4wN2gwYTIuMTYsMi4xNiwwLDAsMS0uMS0uOTNWMjBINTguMzltMS0xSDMzLjc0VjUyYzAsMS42NS4zNSwyLDIsMkg1Ny4zOWMxLjY1LDAsMi0uMzUsMi0yVjE5WiIvPjxnIGNsYXNzPSJjbHMtNyI+PGxpbmUgY2xhc3M9ImNscy04IiB4MT0iNDIuNDQiIHkxPSI1Mi45NyIgeDI9IjQyLjQ0IiB5Mj0iMTkuOTciLz48bGluZSBjbGFzcz0iY2xzLTgiIHgxPSI1MC42MyIgeTE9IjUyLjk3IiB4Mj0iNTAuNjMiIHkyPSIxOS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtOCIgeDE9IjM0LjczIiB5MT0iMjcuOTciIHgyPSI1OC4zNyIgeTI9IjI3Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy04IiB4MT0iMzQuNzMiIHkxPSIzNi4zNCIgeDI9IjU4LjM3IiB5Mj0iMzYuMzQiLz48bGluZSBjbGFzcz0iY2xzLTgiIHgxPSIzNC43MyIgeTE9IjQ0LjcxIiB4Mj0iNTguMzciIHkyPSI0NC43MSIvPjwvZz48cGF0aCBjbGFzcz0iY2xzLTQiIGQ9Ik01MC43LDE5LjUzdi05aDYuNjljMS4zOCwwLDEuNS4xMiwxLjUsMS41djcuNVoiLz48cGF0aCBjbGFzcz0iY2xzLTUiIGQ9Ik01Ny4zOSwxMWEzLjQ0LDMuNDQsMCwwLDEsLjkuMDdoMGEyLjYyLDIuNjIsMCwwLDEsLjA5LjkzdjdINTEuMlYxMWg2LjE5bTAtMUg1MC4yVjIwaDkuMTlWMTJjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTQiIGQ9Ik0zNC4yMywxOS41M1YxMmMwLTEuMzguMTMtMS41LDEuNS0xLjVoNi43djlaIi8+PHBhdGggY2xhc3M9ImNscy01IiBkPSJNNDEuOTMsMTF2OGgtNy4yVjEyYTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWMTBaIi8+PHJlY3QgY2xhc3M9ImNscy00IiB4PSI0Mi40NSIgeT0iMTAuNTMiIHdpZHRoPSI4LjE3IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTUiIGQ9Ik01MC4xMiwxMXY4SDQzVjExaDcuMTdtMS0xSDQyVjIwaDkuMTdWMTBaIi8+PC9zdmc+" preserveAspectRatio="none" x="650" y="530" width="50" height="50" style="cursor:pointer"><title>Node Type: Index Scan
+Parent Relationship: Inner
+Parallel Aware: false
+Async Capable: false
+Scan Direction: Forward
+Index Name: pk_formatdate_id
+Relation Name: rt_formatdate
+Alias: rt_formatdate
+Actual Rows: 1
+Actual Loops: 1
+Index Cond: ((formatdate_id)::text = ("user".formatdate_id)::text)
+Rows Removed by Index Recheck: 0
+loops: 1
+</title></image><text x="680" y="600" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pk_formatdate_id</tspan></text><line x1="725" x2="788.3333333333334" y1="555" y2="555" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="787.3333333333334" x2="851.6666666666666" y1="555" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="851.6666666666666" x2="915" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr7&quot;)"></line></g><g><rect x="225" y="290" width="500" height="1185" rx="5" stroke="#444444" stroke-width="1.2" fill="gray" fill-opacity="0.2" pointer-events="none"></rect><tspan x="437.5" y="505" font-size="15px" text-anchor="start" fill="red">SubPlan 2</tspan><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0ze2ZpbGw6bm9uZTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0xe3N0cm9rZTojNjY2YmQxO30uY2xzLTJ7ZmlsbDojNjY2YmQxO30uY2xzLTN7c3Ryb2tlOiM4ZDgxMTk7fS5jbHMtNHtmaWxsOiM4ZDgxMTk7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5leF9uZXN0ZWQ8L3RpdGxlPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE3LjIzLDIwYTYsNiwwLDAsMSw2LTZoMjJhNiw2LDAsMCwxLDYsNlY0NGE2LDYsMCwwLDEtNiw2aC0yMmE2LDYsMCwwLDEtNi02VjMyLjI3Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjE3LjIzIDI3LjMxIDEyLjc3IDMzLjI2IDIxLjY4IDMzLjI2IDE3LjIzIDI3LjMxIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMjQuMjMsMjVjMC0zLjMuNy00LDQtNGgxMmMzLjMsMCw0LC43LDQsNFYzOWMwLDMuMy0uNyw0LTQsNEgyOC43MmMtMy4zLDAtNC0uNy00LTRWMzMuNzIiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMjQuNjcgMzEuMzQgMjAuNzEgMzYuMSAyOC4yMyAzNi4xIDI0LjY3IDMxLjM0Ii8+PC9zdmc+" preserveAspectRatio="none" x="650" y="715" width="50" height="50" style="cursor:pointer"><title>Node Type: Nested Loop
+Parent Relationship: SubPlan
+Subplan Name: SubPlan 2
+Parallel Aware: false
+Async Capable: false
+Join Type: Inner
+Actual Rows: 2
+Actual Loops: 1
+Inner Unique: false
+Join Filter: (pg_authid_1.oid = ANY ((SubPlan 1)))
+Rows Removed by Join Filter: 0
+loops: 1
+</title></image><text x="680" y="785" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>Nested Loop Inner</tspan><tspan dy="1.2em" x="680">Join</tspan></text><line x1="725" x2="788.3333333333334" y1="740" y2="740" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="787.3333333333334" x2="851.6666666666666" y1="740" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="851.6666666666666" x2="915" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr8&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="325" y="715" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: Outer
+Parallel Aware: false
+Async Capable: false
+Relation Name: pg_authid
+Alias: pg_authid_1
+Actual Rows: 1
+Actual Loops: 1
+Filter: (("user".login)::name = rolname)
+Rows Removed by Filter: 19
+loops: 1
+</title></image><text x="355" y="785" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pg_authid</tspan></text><line x1="400" x2="471.6666666666667" y1="740" y2="740" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="470.6666666666667" x2="543.3333333333334" y1="740" y2="740" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="543.3333333333334" x2="615" y1="740" y2="740" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr9&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="325" y="875" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: Inner
+Parallel Aware: false
+Async Capable: false
+Relation Name: pg_authid
+Alias: pg_authid
+Actual Rows: 2
+Actual Loops: 1
+Filter: ((NOT rolcanlogin) AND ((rolname = 'vitis_admin'::name) OR (rolname = 'vitis_user'::name)))
+Rows Removed by Filter: 18
+loops: 1
+</title></image><text x="355" y="945" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pg_authid</tspan></text><line x1="400" x2="471.6666666666667" y1="900" y2="900" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="470.6666666666667" x2="543.3333333333334" y1="900" y2="740" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="543.3333333333334" x2="615" y1="740" y2="740" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr10&quot;)"></line></g><g><rect x="262.5" y="1005" width="137.5" height="1160" rx="5" stroke="#444444" stroke-width="1.2" fill="gray" fill-opacity="0.2" pointer-events="none"></rect><tspan x="293.75" y="1035" font-size="15px" text-anchor="start" fill="red">SubPlan 1</tspan><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="325" y="1060" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: SubPlan
+Subplan Name: SubPlan 1
+Parallel Aware: false
+Async Capable: false
+Relation Name: pg_auth_members
+Alias: pg_auth_members
+Actual Rows: 2
+Actual Loops: 2
+Filter: (roleid = pg_authid.oid)
+Rows Removed by Filter: 8
+loops: 1
+</title></image><text x="355" y="1130" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pg_auth_members</tspan></text><line x1="400" x2="471.6666666666667" y1="1085" y2="1085" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="470.6666666666667" x2="543.3333333333334" y1="1085" y2="740" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="543.3333333333334" x2="615" y1="740" y2="740" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr11&quot;)"></line></g><g><rect x="225" y="870" width="500" height="1765" rx="5" stroke="#444444" stroke-width="1.2" fill="gray" fill-opacity="0.2" pointer-events="none"></rect><tspan x="437.5" y="1085" font-size="15px" text-anchor="start" fill="red">SubPlan 4</tspan><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0ze2ZpbGw6bm9uZTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0xe3N0cm9rZTojNjY2YmQxO30uY2xzLTJ7ZmlsbDojNjY2YmQxO30uY2xzLTN7c3Ryb2tlOiM4ZDgxMTk7fS5jbHMtNHtmaWxsOiM4ZDgxMTk7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5leF9uZXN0ZWQ8L3RpdGxlPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE3LjIzLDIwYTYsNiwwLDAsMSw2LTZoMjJhNiw2LDAsMCwxLDYsNlY0NGE2LDYsMCwwLDEtNiw2aC0yMmE2LDYsMCwwLDEtNi02VjMyLjI3Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjE3LjIzIDI3LjMxIDEyLjc3IDMzLjI2IDIxLjY4IDMzLjI2IDE3LjIzIDI3LjMxIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMjQuMjMsMjVjMC0zLjMuNy00LDQtNGgxMmMzLjMsMCw0LC43LDQsNFYzOWMwLDMuMy0uNyw0LTQsNEgyOC43MmMtMy4zLDAtNC0uNy00LTRWMzMuNzIiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMjQuNjcgMzEuMzQgMjAuNzEgMzYuMSAyOC4yMyAzNi4xIDI0LjY3IDMxLjM0Ii8+PC9zdmc+" preserveAspectRatio="none" x="650" y="1295" width="50" height="50" style="cursor:pointer"><title>Node Type: Nested Loop
+Parent Relationship: SubPlan
+Subplan Name: SubPlan 4
+Parallel Aware: false
+Async Capable: false
+Join Type: Inner
+Actual Rows: 0
+Actual Loops: 0
+Inner Unique: false
+Join Filter: (pg_authid_3.oid = ANY ((SubPlan 3)))
+Rows Removed by Join Filter: 0
+loops: 1
+</title></image><text x="680" y="1365" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>Nested Loop Inner</tspan><tspan dy="1.2em" x="680">Join</tspan></text><line x1="725" x2="788.3333333333334" y1="1320" y2="1320" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="787.3333333333334" x2="851.6666666666666" y1="1320" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="851.6666666666666" x2="915" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr12&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="325" y="1295" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: Outer
+Parallel Aware: false
+Async Capable: false
+Relation Name: pg_authid
+Alias: pg_authid_3
+Actual Rows: 0
+Actual Loops: 0
+Filter: (("user".login)::name = rolname)
+Rows Removed by Filter: 0
+loops: 0
+</title></image><text x="355" y="1365" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pg_authid</tspan></text><line x1="400" x2="471.6666666666667" y1="1320" y2="1320" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="470.6666666666667" x2="543.3333333333334" y1="1320" y2="1320" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="543.3333333333334" x2="615" y1="1320" y2="1320" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr13&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="325" y="1455" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: Inner
+Parallel Aware: false
+Async Capable: false
+Relation Name: pg_authid
+Alias: pg_authid_2
+Actual Rows: 0
+Actual Loops: 0
+Filter: ((NOT rolcanlogin) AND ((rolname = 'vitis_admin'::name) OR (rolname = 'vitis_user'::name)))
+Rows Removed by Filter: 0
+loops: 0
+</title></image><text x="355" y="1525" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pg_authid</tspan></text><line x1="400" x2="471.6666666666667" y1="1480" y2="1480" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="470.6666666666667" x2="543.3333333333334" y1="1480" y2="1320" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="543.3333333333334" x2="615" y1="1320" y2="1320" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr14&quot;)"></line></g><g><rect x="262.5" y="1585" width="137.5" height="1740" rx="5" stroke="#444444" stroke-width="1.2" fill="gray" fill-opacity="0.2" pointer-events="none"></rect><tspan x="293.75" y="1615" font-size="15px" text-anchor="start" fill="red">SubPlan 3</tspan><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="325" y="1640" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: SubPlan
+Subplan Name: SubPlan 3
+Parallel Aware: false
+Async Capable: false
+Relation Name: pg_auth_members
+Alias: pg_auth_members_1
+Actual Rows: 0
+Actual Loops: 0
+Filter: (roleid = pg_authid_2.oid)
+Rows Removed by Filter: 0
+loops: 0
+</title></image><text x="355" y="1710" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pg_auth_members</tspan></text><line x1="400" x2="471.6666666666667" y1="1665" y2="1665" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="470.6666666666667" x2="543.3333333333334" y1="1665" y2="1320" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="543.3333333333334" x2="615" y1="1320" y2="1320" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr15&quot;)"></line></g><g><rect x="225" y="1450" width="500" height="2345" rx="5" stroke="#444444" stroke-width="1.2" fill="gray" fill-opacity="0.2" pointer-events="none"></rect><tspan x="437.5" y="1665" font-size="15px" text-anchor="start" fill="red">SubPlan 6</tspan><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0ze2ZpbGw6bm9uZTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0xe3N0cm9rZTojNjY2YmQxO30uY2xzLTJ7ZmlsbDojNjY2YmQxO30uY2xzLTN7c3Ryb2tlOiM4ZDgxMTk7fS5jbHMtNHtmaWxsOiM4ZDgxMTk7fTwvc3R5bGU+PC9kZWZzPjx0aXRsZT5leF9uZXN0ZWQ8L3RpdGxlPjxwYXRoIGNsYXNzPSJjbHMtMSIgZD0iTTE3LjIzLDIwYTYsNiwwLDAsMSw2LTZoMjJhNiw2LDAsMCwxLDYsNlY0NGE2LDYsMCwwLDEtNiw2aC0yMmE2LDYsMCwwLDEtNi02VjMyLjI3Ii8+PHBvbHlnb24gY2xhc3M9ImNscy0yIiBwb2ludHM9IjE3LjIzIDI3LjMxIDEyLjc3IDMzLjI2IDIxLjY4IDMzLjI2IDE3LjIzIDI3LjMxIi8+PHBhdGggY2xhc3M9ImNscy0zIiBkPSJNMjQuMjMsMjVjMC0zLjMuNy00LDQtNGgxMmMzLjMsMCw0LC43LDQsNFYzOWMwLDMuMy0uNyw0LTQsNEgyOC43MmMtMy4zLDAtNC0uNy00LTRWMzMuNzIiLz48cG9seWdvbiBjbGFzcz0iY2xzLTQiIHBvaW50cz0iMjQuNjcgMzEuMzQgMjAuNzEgMzYuMSAyOC4yMyAzNi4xIDI0LjY3IDMxLjM0Ii8+PC9zdmc+" preserveAspectRatio="none" x="650" y="1875" width="50" height="50" style="cursor:pointer"><title>Node Type: Nested Loop
+Parent Relationship: SubPlan
+Subplan Name: SubPlan 6
+Parallel Aware: false
+Async Capable: false
+Join Type: Inner
+Actual Rows: 0
+Actual Loops: 0
+Inner Unique: false
+Join Filter: (pg_authid_5.oid = ANY ((SubPlan 5)))
+Rows Removed by Join Filter: 0
+loops: 1
+</title></image><text x="680" y="1945" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>Nested Loop Inner</tspan><tspan dy="1.2em" x="680">Join</tspan></text><line x1="725" x2="788.3333333333334" y1="1900" y2="1900" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="787.3333333333334" x2="851.6666666666666" y1="1900" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="851.6666666666666" x2="915" y1="75" y2="75" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr16&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="325" y="1875" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: Outer
+Parallel Aware: false
+Async Capable: false
+Relation Name: pg_authid
+Alias: pg_authid_5
+Actual Rows: 0
+Actual Loops: 0
+Filter: (("user".login)::name = rolname)
+Rows Removed by Filter: 0
+loops: 0
+</title></image><text x="355" y="1945" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pg_authid</tspan></text><line x1="400" x2="471.6666666666667" y1="1900" y2="1900" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="470.6666666666667" x2="543.3333333333334" y1="1900" y2="1900" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="543.3333333333334" x2="615" y1="1900" y2="1900" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr17&quot;)"></line></g><g><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="325" y="2035" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: Inner
+Parallel Aware: false
+Async Capable: false
+Relation Name: pg_authid
+Alias: pg_authid_4
+Actual Rows: 0
+Actual Loops: 0
+Filter: ((NOT rolcanlogin) AND ((rolname = 'vitis_admin'::name) OR (rolname = 'vitis_user'::name)))
+Rows Removed by Filter: 0
+loops: 0
+</title></image><text x="355" y="2105" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pg_authid</tspan></text><line x1="400" x2="471.6666666666667" y1="2060" y2="2060" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="470.6666666666667" x2="543.3333333333334" y1="2060" y2="1900" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="543.3333333333334" x2="615" y1="1900" y2="1900" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr18&quot;)"></line></g><g><rect x="262.5" y="2165" width="137.5" height="2320" rx="5" stroke="#444444" stroke-width="1.2" fill="gray" fill-opacity="0.2" pointer-events="none"></rect><tspan x="293.75" y="2195" font-size="15px" text-anchor="start" fill="red">SubPlan 5</tspan><image href="data:image/svg+xml;base64,PHN2ZyBpZD0iXzEiIGRhdGEtbmFtZT0iMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNjQgNjQiPjxkZWZzPjxzdHlsZT4uY2xzLTEsLmNscy0yLC5jbHMtOHtmaWxsOiMyOTgwYjk7fS5jbHMtMSwuY2xzLTJ7c3Ryb2tlOiMyOTgwYjk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30uY2xzLTJ7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLXdpZHRoOjJweDt9LmNscy0zLC5jbHMtNntmaWxsOiNmMGVjYjY7fS5jbHMtNHtmaWxsOiNjMThmMzY7fS5jbHMtNXtvcGFjaXR5OjAuODt9LmNscy02e3N0cm9rZTojYzE4ZjM2O3N0cm9rZS1taXRlcmxpbWl0OjEwO30uY2xzLTd7ZmlsbDojYWRkZmYzO308L3N0eWxlPjwvZGVmcz48dGl0bGU+ZXhfc2NhbjwvdGl0bGU+PHBvbHlnb24gY2xhc3M9ImNscy0xIiBwb2ludHM9IjkuMDYgNTAuNzggNS41OCA0Ni4xNCAxMi41NCA0Ni4xNCA5LjA2IDUwLjc4Ii8+PGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iOS4wNiIgeTE9IjQ2Ljc3IiB4Mj0iOS4wNiIgeTI9IjE1LjgiLz48cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0xOC40Myw1Ny40N2MtMS4zOCwwLTEuNS0uMTItMS41LTEuNVYxNS41M2g0MVY1NmMwLDEuMzgtLjEyLDEuNS0xLjUsMS41WiIvPjxwYXRoIGNsYXNzPSJjbHMtNCIgZD0iTTU3LjQxLDE2VjU2YTMuNzEsMy43MSwwLDAsMS0uMDcuOSwyLjE2LDIuMTYsMCwwLDEtLjkzLjFoLTM4YTMuNTQsMy41NCwwLDAsMS0uOS0uMDdoMGEyLjE2LDIuMTYsMCwwLDEtLjEtLjkzVjE2aDQwbTEtMWgtNDJWNTZjMCwxLjY1LjM1LDIsMiwyaDM4YzEuNjUsMCwyLS4zNSwyLTJWMTVaIi8+PGcgY2xhc3M9ImNscy01Ij48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIyNS4xMyIgeTE9IjU2Ljk3IiB4Mj0iMjUuMTMiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjQxLjUyIiB5MT0iNTYuOTciIHgyPSI0MS41MiIgeTI9IjE1Ljk3Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMzMuMzIiIHkxPSI1Ni45NyIgeDI9IjMzLjMyIiB5Mj0iMTUuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSI0OS43MiIgeTE9IjU2Ljk3IiB4Mj0iNDkuNzIiIHkyPSIxNS45NyIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iMjMuOTciIHgyPSI1Ny40IiB5Mj0iMjMuOTciLz48bGluZSBjbGFzcz0iY2xzLTYiIHgxPSIxNy40MiIgeTE9IjMyLjM0IiB4Mj0iNTcuNCIgeTI9IjMyLjM0Ii8+PGxpbmUgY2xhc3M9ImNscy02IiB4MT0iMTcuNDIiIHkxPSI0MC43MSIgeDI9IjU3LjQiIHkyPSI0MC43MSIvPjxsaW5lIGNsYXNzPSJjbHMtNiIgeDE9IjE3LjQyIiB5MT0iNDkuMDgiIHgyPSI1Ny40IiB5Mj0iNDkuMDgiLz48L2c+PHBhdGggY2xhc3M9ImNscy03IiBkPSJNNDkuNzMsMTUuNTN2LTloNi42OWMxLjM3LDAsMS41LjEyLDEuNSwxLjV2Ny41WiIvPjxwYXRoIGNsYXNzPSJjbHMtOCIgZD0iTTU2LjQyLDdhMy41NCwzLjU0LDAsMCwxLC45LjA3aDBhMi4xNiwyLjE2LDAsMCwxLC4xLjkzdjdINTAuMjNWN2g2LjE5bTAtMUg0OS4yM1YxNmg5LjE5VjhjMC0xLjY1LS4zNS0yLTItMloiLz48cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0xNi45MiwxNS41M1Y4YzAtMS4zOC4xMy0xLjUsMS41LTEuNWg2Ljd2OVoiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik0yNC42Miw3djhoLTcuMlY4YTMuMTgsMy4xOCwwLDAsMSwuMDgtLjksMi4wOCwyLjA4LDAsMCwxLC45Mi0uMWg2LjJtMS0xaC03LjJjLTEuNjUsMC0yLC4zNS0yLDJ2OGg5LjJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjQxLjUyIiB5PSI2LjUzIiB3aWR0aD0iOC4xOSIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNNDkuMjEsN3Y4SDQyVjdoNy4xOW0xLTFINDFWMTZoOS4xOVY2WiIvPjxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iMzMuMzMiIHk9IjYuNTMiIHdpZHRoPSI4LjE5IiBoZWlnaHQ9IjkiLz48cGF0aCBjbGFzcz0iY2xzLTgiIGQ9Ik00MSw3djhIMzMuODNWN0g0MW0xLTFIMzIuODNWMTZINDJWNloiLz48cmVjdCBjbGFzcz0iY2xzLTciIHg9IjI1LjE0IiB5PSI2LjUzIiB3aWR0aD0iOC4xNyIgaGVpZ2h0PSI5Ii8+PHBhdGggY2xhc3M9ImNscy04IiBkPSJNMzIuODEsN3Y4SDI1LjY0VjdoNy4xN20xLTFIMjQuNjRWMTZoOS4xN1Y2WiIvPjwvc3ZnPg==" preserveAspectRatio="none" x="325" y="2220" width="50" height="50" style="cursor:pointer"><title>Node Type: Seq Scan
+Parent Relationship: SubPlan
+Subplan Name: SubPlan 5
+Parallel Aware: false
+Async Capable: false
+Relation Name: pg_auth_members
+Alias: pg_auth_members_2
+Actual Rows: 0
+Actual Loops: 0
+Filter: (roleid = pg_authid_4.oid)
+Rows Removed by Filter: 0
+loops: 0
+</title></image><text x="355" y="2290" fill="rgba(0, 0, 0, 0.87)" style="font-size:15px;text-anchor:middle"><tspan>pg_auth_members</tspan></text><line x1="400" x2="471.6666666666667" y1="2245" y2="2245" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="470.6666666666667" x2="543.3333333333334" y1="2245" y2="1900" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4"></line><line x1="543.3333333333334" x2="615" y1="1900" y2="1900" stroke="rgba(0, 0, 0, 0.87)" stroke-width="4" style="marker-end:url(&quot;#arr19&quot;)"></line></g></g></svg>
\ No newline at end of file
diff --git a/source/tools/pg/images/interface_configuration.png b/source/tools/pg/images/interface_configuration.png
new file mode 100644
index 0000000000000000000000000000000000000000..46356144cd27e50e003653632f711e46c3a63785
Binary files /dev/null and b/source/tools/pg/images/interface_configuration.png differ
diff --git a/source/tools/pg/images/interface_pgadmin.png b/source/tools/pg/images/interface_pgadmin.png
new file mode 100644
index 0000000000000000000000000000000000000000..0ae337f0c955c8f10a2b67ad8f6b2a2ede3cb995
Binary files /dev/null and b/source/tools/pg/images/interface_pgadmin.png differ
diff --git a/source/tools/pg/images/pgadmin4_logo.png b/source/tools/pg/images/pgadmin4_logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc1beca38c054565a9a992592e84afb41861d298
Binary files /dev/null and b/source/tools/pg/images/pgadmin4_logo.png differ
diff --git a/source/tools/pg/images/pgadmin_consultation.png b/source/tools/pg/images/pgadmin_consultation.png
new file mode 100644
index 0000000000000000000000000000000000000000..994f5daae26a1c6ddf93abca82f52d76127074cf
Binary files /dev/null and b/source/tools/pg/images/pgadmin_consultation.png differ
diff --git a/source/tools/pg/index.rst b/source/tools/pg/index.rst
new file mode 100644
index 0000000000000000000000000000000000000000..6f6782b50b8373eae2a73c737548a31e7f2f4279
--- /dev/null
+++ b/source/tools/pg/index.rst
@@ -0,0 +1,19 @@
+PgAdmin 4 et PgModeler
+============================================
+
+.. image:: ./images/pgadmin4_logo.png
+   :width: 300 px
+   :align: center
+   :target: #
+
+
+PgAdmin 4 est un outil permettant de simplifier l'administration d'une base de données postgres, ainsi que la consultation de donnée.
+
+PgModeler est un outil qui permet la modélisation graphique d'un modèle de donnée et la génération du code SQL de ce dernier.
+
+============================================
+
+.. toctree::
+   :maxdepth: 2
+
+   pgadmin.md
\ No newline at end of file
diff --git a/source/tools/pg/pgadmin.md b/source/tools/pg/pgadmin.md
new file mode 100644
index 0000000000000000000000000000000000000000..25275dc0261312f81059d40465e3726b69699c45
--- /dev/null
+++ b/source/tools/pg/pgadmin.md
@@ -0,0 +1,125 @@
+# PgAdmin 4
+
+PgAdmin 4 est un outil open source développé comme une application Web Jquery/Bootstrap ainsi que d'un serveur développé en Python avec la librairie Flask.
+
+Le but de cet outil est de simplifier l'administration et la consultation de serveur de BDD Postgresql pour les responsables d'infrastructures et les développeurs.
+
+## Consultation et modification de la donnée
+
+![interface consultation](./images/pgadmin_consultation.png)
+
+Vous pouvez voir la donnée d'une table/vue soit par le bouton au dessus de l'arbre, soit via le menu contextuel en faisant un clique droit sur l'objet en question.
+
+## Visualisation de données spatiale
+
+Sur une colonne de type géométrie, il y aura un bouton permettant la visualisation des géométrie WKB sur une carte OpenLayers comportant un fond OSM.
+
+Le fond de plan ne sera présent que si la géométrie est sotcké en WGS84 (4326).
+
+## Administration de la base de données
+
+### Visualiser la configuration de la base
+
+![interface configuration](./images/interface_configuration.png)
+
+En sélectionnant le serveur, il est possible d'accéder à un tableau permettant de voir la configuration postgresQl du serveur.
+
+Ce qui peut être pratique pour voir par exemple l'algorithme de hashage des mots de passe par exemple.
+
+### Créer une sauvegarde
+
+Il existe deux binaires permettant de réaliser ces opérations, pg_dump et pg_dumpall. L'utilisation de ces deux commande peut trés vite être casse tête à cause du nombre de paramètre à passer dans ces commandes. 
+
+Heureusement pgAdmin permet de réaliser ces opérations.
+
+En faisant un clique droit sur un serveur, une base, un schéma ou une table on peut lancer la commande pg_dump (pg_dumpall dans le cas du serveur), ce qui va permettre d'ouvrir une modale de configuration qui va vous permettre de lancer la création de la sauvegarde.
+
+Il est possible de sauvegarder les roles de connexion, la structure de données et les données (tout ces objets ou seulement certains, les roles ne sont récupérable qu'en sauvegardant le serveur).
+
+Il est possible de générer différents types de fichier, comme le format SQL qui va permettre d'avoir des requêtes SQL textuelle, ou un fichier backup binaire qui sera plus simple à restaurer.
+
+La commande sera ensuite exécuté de manière asynchrone, ce qui vous permettra d'utiliser l'application pendant ce temps. La commande sera écrit dans el log ce qui vous permettra de la copier pour sauvegarder régulièrement votre base via une tâche CRON par exemple.
+
+### Restaurer une sauvegarde
+
+Comme pour la sauvegarde il existe un binaire pg_restore qui permet de réaliser cette opération.
+
+Comme pour la sauvegarde en réalisant un clique droit sur l'objet à restaurer on peut configurer la commande et la lancer de manière asynchrone.
+
+Le format binaire est préfèrable pour la restauration car plus rapide et plus léger.
+
+## Génération de code SQL
+
+Une section permet de récupérer le code SQL de l'objet sélectionné.
+
+![interface de base](./images/interface_pgadmin.png)
+
+Via le menu contextuel sur une table ou une vue il est aussi possible de récupérer une requêtes simple sur cet objet (sous-menu `Scripts`).
+
+## Exécution de code SQL
+
+En cliquant sur un des boutons en haut de l'arbre de gauche, on peut ouvrir un fenère d'éxécution SQL sur la base sélectionnée (ou la base contenant l'objet sélectionné s'il s'agit d'un sous objet de la base).
+
+Cet outil se comporte comme une éxécution du binaire psql, certaines commande ont un impact sur l'outil de manière définitive, il faut alors ouvrir un nouvel outil pour revenir à l'état initial (comme le set Role par exemple).
+
+### Conseil d'utilisation sur une base de production
+
+Il pourra vous arriver de lancer des requêtes UPDATE ou DELETE sur la base lors de mise à jour ou d'opération de maintenance. Il est préférable dans ce cas de désactivé l'auto-commit.
+
+Dans ce cas, vous pouvez lancer votre commande, elle n'aura aucun impact sur la base tant que la transction n'est pas explicitement résolue.
+Le commit ou le rollback se font d'un simple bouton sur l'interface.
+
+Lorsque vous fermer l'outil de requête, il va vous demander si vous voulez sauvegarder le code sql saisie (comme d'habitude), puis si la transaction n'est aps résolue, alors il ouvrira une deuxième fenètre de confirmation pour savoir si vous voulez commit ou rollback la transaction.
+
+## Utilisation du Explain/Analyze
+
+PgAdmin vous permet d'obtenir un diagramme bien plus simple à exploiter que le retour classique d'un Explain Analyze.
+
+exmple la requête ci-dessous : 
+
+```sql
+SELECT "user".user_id,
+    "user".login,
+    "user".name,
+    "user".email,
+    "user".company,
+    "user".department,
+    "user".ip_constraint,
+    domain.domain,
+    "user".domain_id,
+    "user".last_connection,
+    "user".restriction,
+        CASE
+            WHEN array_to_string(ARRAY( SELECT pg_group.groname
+               FROM pg_group
+                 JOIN pg_roles ON pg_roles.oid = ANY (pg_group.grolist)
+              WHERE "user".login::name = pg_roles.rolname AND (pg_group.groname = 'vitis_admin'::name OR pg_group.groname = 'vitis_user'::name)), '|'::text) = 'vitis_user|vitis_admin'::text OR array_to_string(ARRAY( SELECT pg_group.groname
+               FROM pg_group
+                 JOIN pg_roles ON pg_roles.oid = ANY (pg_group.grolist)
+              WHERE "user".login::name = pg_roles.rolname AND (pg_group.groname = 'vitis_admin'::name OR pg_group.groname = 'vitis_user'::name)), '|'::text) = 'vitis_admin|vitis_user'::text THEN 'admin'::text
+            WHEN array_to_string(ARRAY( SELECT pg_group.groname
+               FROM pg_group
+                 JOIN pg_roles ON pg_roles.oid = ANY (pg_group.grolist)
+              WHERE "user".login::name = pg_roles.rolname AND (pg_group.groname = 'vitis_admin'::name OR pg_group.groname = 'vitis_user'::name)), '|'::text) = 'vitis_user'::text THEN 'user'::text
+            ELSE ''::text
+        END AS role,
+    "user".dataencrypt,
+    "user".secretkey,
+    "user".billinggroup_id,
+    billinggroup.billinggroup,
+    "user".phone,
+    "user".acceptnotification,
+    "user".timezone_id,
+    "user".formatdate_id,
+    rt_formatdate.formatdate,
+    "user".comp_data
+   FROM s_vitis."user"
+     LEFT JOIN s_vitis.domain ON "user".domain_id = domain.domain_id
+     LEFT JOIN s_vitis.billinggroup ON "user".billinggroup_id = billinggroup.billinggroup_id
+     LEFT JOIN s_vitis.rt_formatdate ON "user".formatdate_id::text = rt_formatdate.formatdate_id::text
+  WHERE "user".login::name = "current_user"() OR s_vitis.is_vitis_admin();
+```
+
+va donner le diagramme suivant : 
+
+![Explain](./images/explain_example.svg)
\ No newline at end of file