mirror of
https://github.com/GreptimeTeam/greptimedb.git
synced 2026-05-17 13:30:38 +00:00
feat: upgraded pg_catalog support (#6918)
* refactor: add datafusion-postgres dependency * refactor: move and include pg_catalog udfs * chore: update upstream * feat: register table function pg_get_keywords * feat: bridge CatalogInfo for our CatalogManager Signed-off-by: Ning Sun <sunning@greptime.com> * feat: convert pg_catalog table to our system table * feat: bridge system catalog with datafusion-postgres Signed-off-by: Ning Sun <sunning@greptime.com> * feat: add more udfs * feat: add compatibility rewriter to postgres handler * fix: various fix * fmt: fix * fix: use functions from pg_catalog library * fmt * fix: sqlness runner Signed-off-by: Ning Sun <sunning@greptime.com> * test: adopt arrow 56.0 to 56.1 memory size change * fix: add additional udfs * chore: format * refactor: return None when creating system table failed Signed-off-by: Ning Sun <sunning@greptime.com> * chore: provide safety comments about expect usage --------- Signed-off-by: Ning Sun <sunning@greptime.com>
This commit is contained in:
145
Cargo.lock
generated
145
Cargo.lock
generated
@@ -300,9 +300,9 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50"
|
||||
|
||||
[[package]]
|
||||
name = "arrow"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "fd798aea3553913a5986813e9c6ad31a2d2b04e931fe8ea4a37155eb541cebb5"
|
||||
checksum = "c26b57282a08ae92f727497805122fec964c6245cfa0e13f0e75452eaf3bc41f"
|
||||
dependencies = [
|
||||
"arrow-arith",
|
||||
"arrow-array",
|
||||
@@ -321,9 +321,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-arith"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "508dafb53e5804a238cab7fd97a59ddcbfab20cc4d9814b1ab5465b9fa147f2e"
|
||||
checksum = "cebf38ca279120ff522f4954b81a39527425b6e9f615e6b72842f4de1ffe02b8"
|
||||
dependencies = [
|
||||
"arrow-array",
|
||||
"arrow-buffer",
|
||||
@@ -335,9 +335,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-array"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e2730bc045d62bb2e53ef8395b7d4242f5c8102f41ceac15e8395b9ac3d08461"
|
||||
checksum = "744109142cdf8e7b02795e240e20756c2a782ac9180d4992802954a8f871c0de"
|
||||
dependencies = [
|
||||
"ahash 0.8.12",
|
||||
"arrow-buffer",
|
||||
@@ -352,9 +352,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-buffer"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "54295b93beb702ee9a6f6fbced08ad7f4d76ec1c297952d4b83cf68755421d1d"
|
||||
checksum = "601bb103c4c374bcd1f62c66bcea67b42a2ee91a690486c37d4c180236f11ccc"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"half",
|
||||
@@ -363,9 +363,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-cast"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "67e8bcb7dc971d779a7280593a1bf0c2743533b8028909073e804552e85e75b5"
|
||||
checksum = "eed61d9d73eda8df9e3014843def37af3050b5080a9acbe108f045a316d5a0be"
|
||||
dependencies = [
|
||||
"arrow-array",
|
||||
"arrow-buffer",
|
||||
@@ -384,9 +384,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-csv"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "673fd2b5fb57a1754fdbfac425efd7cf54c947ac9950c1cce86b14e248f1c458"
|
||||
checksum = "fa95b96ce0c06b4d33ac958370db8c0d31e88e54f9d6e08b0353d18374d9f991"
|
||||
dependencies = [
|
||||
"arrow-array",
|
||||
"arrow-cast",
|
||||
@@ -399,9 +399,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-data"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "97c22fe3da840039c69e9f61f81e78092ea36d57037b4900151f063615a2f6b4"
|
||||
checksum = "43407f2c6ba2367f64d85d4603d6fb9c4b92ed79d2ffd21021b37efa96523e12"
|
||||
dependencies = [
|
||||
"arrow-buffer",
|
||||
"arrow-schema",
|
||||
@@ -411,9 +411,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-flight"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6808d235786b721e49e228c44dd94242f2e8b46b7e95b233b0733c46e758bfee"
|
||||
checksum = "d7c66c5e4a7aedc2bfebffeabc2116d76adb22e08d230b968b995da97f8b11ca"
|
||||
dependencies = [
|
||||
"arrow-array",
|
||||
"arrow-buffer",
|
||||
@@ -430,14 +430,15 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-ipc"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "778de14c5a69aedb27359e3dd06dd5f9c481d5f6ee9fbae912dba332fd64636b"
|
||||
checksum = "e4b0487c4d2ad121cbc42c4db204f1509f8618e589bc77e635e9c40b502e3b90"
|
||||
dependencies = [
|
||||
"arrow-array",
|
||||
"arrow-buffer",
|
||||
"arrow-data",
|
||||
"arrow-schema",
|
||||
"arrow-select",
|
||||
"flatbuffers",
|
||||
"lz4_flex",
|
||||
"zstd 0.13.3",
|
||||
@@ -445,9 +446,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-json"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "3860db334fe7b19fcf81f6b56f8d9d95053f3839ffe443d56b5436f7a29a1794"
|
||||
checksum = "26d747573390905905a2dc4c5a61a96163fe2750457f90a04ee2a88680758c79"
|
||||
dependencies = [
|
||||
"arrow-array",
|
||||
"arrow-buffer",
|
||||
@@ -467,9 +468,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-ord"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "425fa0b42a39d3ff55160832e7c25553e7f012c3f187def3d70313e7a29ba5d9"
|
||||
checksum = "c142a147dceb59d057bad82400f1693847c80dca870d008bf7b91caf902810ae"
|
||||
dependencies = [
|
||||
"arrow-array",
|
||||
"arrow-buffer",
|
||||
@@ -478,11 +479,25 @@ dependencies = [
|
||||
"arrow-select",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arrow-pg"
|
||||
version = "0.5.0"
|
||||
source = "git+https://github.com/datafusion-contrib/datafusion-postgres?rev=412dad6b88ca83d11498338896044319ddac676c#412dad6b88ca83d11498338896044319ddac676c"
|
||||
dependencies = [
|
||||
"bytes",
|
||||
"chrono",
|
||||
"datafusion",
|
||||
"futures",
|
||||
"pgwire",
|
||||
"postgres-types",
|
||||
"rust_decimal",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "arrow-row"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "df9c9423c9e71abd1b08a7f788fcd203ba2698ac8e72a1f236f1faa1a06a7414"
|
||||
checksum = "dac6620667fccdab4204689ca173bd84a15de6bb6b756c3a8764d4d7d0c2fc04"
|
||||
dependencies = [
|
||||
"arrow-array",
|
||||
"arrow-buffer",
|
||||
@@ -493,9 +508,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-schema"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "85fa1babc4a45fdc64a92175ef51ff00eba5ebbc0007962fecf8022ac1c6ce28"
|
||||
checksum = "dfa93af9ff2bb80de539e6eb2c1c8764abd0f4b73ffb0d7c82bf1f9868785e66"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
@@ -503,9 +518,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-select"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d8854d15f1cf5005b4b358abeb60adea17091ff5bdd094dca5d3f73787d81170"
|
||||
checksum = "be8b2e0052cd20d36d64f32640b68a5ab54d805d24a473baee5d52017c85536c"
|
||||
dependencies = [
|
||||
"ahash 0.8.12",
|
||||
"arrow-array",
|
||||
@@ -517,9 +532,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "arrow-string"
|
||||
version = "56.0.0"
|
||||
version = "56.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "2c477e8b89e1213d5927a2a84a72c384a9bf4dd0dbf15f9fd66d821aafd9e95e"
|
||||
checksum = "c2155e26e17f053c8975c546fc70cf19c00542f9abf43c23a88a46ef7204204f"
|
||||
dependencies = [
|
||||
"arrow-array",
|
||||
"arrow-buffer",
|
||||
@@ -1450,6 +1465,7 @@ dependencies = [
|
||||
"common-workload",
|
||||
"dashmap",
|
||||
"datafusion",
|
||||
"datafusion-postgres",
|
||||
"datatypes",
|
||||
"futures",
|
||||
"futures-util",
|
||||
@@ -1464,7 +1480,6 @@ dependencies = [
|
||||
"prometheus",
|
||||
"promql-parser",
|
||||
"rand 0.9.1",
|
||||
"rustc-hash 2.1.1",
|
||||
"serde",
|
||||
"serde_json",
|
||||
"session",
|
||||
@@ -1974,7 +1989,7 @@ checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"termcolor",
|
||||
"unicode-width 0.2.1",
|
||||
"unicode-width 0.1.14",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -2183,6 +2198,7 @@ dependencies = [
|
||||
"datafusion-expr",
|
||||
"datafusion-functions-aggregate-common",
|
||||
"datafusion-physical-expr",
|
||||
"datafusion-postgres",
|
||||
"datatypes",
|
||||
"derive_more",
|
||||
"futures",
|
||||
@@ -3794,6 +3810,28 @@ dependencies = [
|
||||
"tokio",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "datafusion-postgres"
|
||||
version = "0.9.0"
|
||||
source = "git+https://github.com/datafusion-contrib/datafusion-postgres?rev=412dad6b88ca83d11498338896044319ddac676c#412dad6b88ca83d11498338896044319ddac676c"
|
||||
dependencies = [
|
||||
"arrow-pg",
|
||||
"async-trait",
|
||||
"bytes",
|
||||
"chrono",
|
||||
"datafusion",
|
||||
"futures",
|
||||
"getset",
|
||||
"log",
|
||||
"pgwire",
|
||||
"postgres-types",
|
||||
"rust_decimal",
|
||||
"rustls-pemfile",
|
||||
"rustls-pki-types",
|
||||
"tokio",
|
||||
"tokio-rustls",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "datafusion-pruning"
|
||||
version = "49.0.0"
|
||||
@@ -5276,6 +5314,18 @@ dependencies = [
|
||||
"wasm-bindgen",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "getset"
|
||||
version = "0.1.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "9cf0fc11e47561d47397154977bc219f4cf809b2974facc3ccb3b89e2436f912"
|
||||
dependencies = [
|
||||
"proc-macro-error2",
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
"syn 2.0.104",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gimli"
|
||||
version = "0.31.1"
|
||||
@@ -5890,7 +5940,7 @@ dependencies = [
|
||||
"js-sys",
|
||||
"log",
|
||||
"wasm-bindgen",
|
||||
"windows-core 0.61.2",
|
||||
"windows-core 0.57.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -9166,6 +9216,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ddf403a6ee31cf7f2217b2bd8447cb13dbb6c268d7e81501bc78a4d3daafd294"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"base64 0.22.1",
|
||||
"bytes",
|
||||
"chrono",
|
||||
"derive-new",
|
||||
@@ -9178,10 +9229,12 @@ dependencies = [
|
||||
"ring",
|
||||
"rust_decimal",
|
||||
"rustls-pki-types",
|
||||
"stringprep",
|
||||
"thiserror 2.0.12",
|
||||
"tokio",
|
||||
"tokio-rustls",
|
||||
"tokio-util",
|
||||
"x509-certificate 0.24.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -10924,9 +10977,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "rust_decimal"
|
||||
version = "1.37.2"
|
||||
version = "1.38.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b203a6425500a03e0919c42d3c47caca51e79f1132046626d2c8871c5092035d"
|
||||
checksum = "c8975fc98059f365204d635119cf9c5a60ae67b841ed49b5422a9a7e56cdfac0"
|
||||
dependencies = [
|
||||
"arrayvec",
|
||||
"borsh",
|
||||
@@ -11548,6 +11601,7 @@ dependencies = [
|
||||
"datafusion",
|
||||
"datafusion-common",
|
||||
"datafusion-expr",
|
||||
"datafusion-postgres",
|
||||
"datatypes",
|
||||
"derive_builder 0.20.2",
|
||||
"futures",
|
||||
@@ -13367,7 +13421,7 @@ dependencies = [
|
||||
"tokio",
|
||||
"tokio-postgres",
|
||||
"tokio-rustls",
|
||||
"x509-certificate",
|
||||
"x509-certificate 0.23.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -15008,6 +15062,25 @@ dependencies = [
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "x509-certificate"
|
||||
version = "0.24.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e57b9f8bcae7c1f36479821ae826d75050c60ce55146fd86d3553ed2573e2762"
|
||||
dependencies = [
|
||||
"bcder",
|
||||
"bytes",
|
||||
"chrono",
|
||||
"der",
|
||||
"hex",
|
||||
"pem",
|
||||
"ring",
|
||||
"signature",
|
||||
"spki",
|
||||
"thiserror 1.0.69",
|
||||
"zeroize",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "xattr"
|
||||
version = "1.5.1"
|
||||
|
||||
39
Cargo.toml
39
Cargo.toml
@@ -123,17 +123,18 @@ clap = { version = "4.4", features = ["derive"] }
|
||||
config = "0.13.0"
|
||||
crossbeam-utils = "0.8"
|
||||
dashmap = "6.1"
|
||||
datafusion = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-expr = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-functions = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-functions-aggregate-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-optimizer = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion = "49"
|
||||
datafusion-common = "49"
|
||||
datafusion-expr = "49"
|
||||
datafusion-functions = "49"
|
||||
datafusion-functions-aggregate-common = "49"
|
||||
datafusion-optimizer = "49"
|
||||
datafusion-orc = { git = "https://github.com/GreptimeTeam/datafusion-orc", rev = "a0a5f902158f153119316eaeec868cff3fc8a99d" }
|
||||
datafusion-physical-expr = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-physical-plan = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-sql = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-substrait = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-physical-expr = "49"
|
||||
datafusion-physical-plan = "49"
|
||||
datafusion-postgres = { git = "https://github.com/datafusion-contrib/datafusion-postgres", rev = "412dad6b88ca83d11498338896044319ddac676c" }
|
||||
datafusion-sql = "49"
|
||||
datafusion-substrait = "49"
|
||||
deadpool = "0.12"
|
||||
deadpool-postgres = "0.14"
|
||||
derive_builder = "0.20"
|
||||
@@ -175,6 +176,9 @@ opentelemetry-proto = { version = "0.30", features = [
|
||||
"logs",
|
||||
] }
|
||||
ordered-float = { version = "4.3", features = ["serde"] }
|
||||
otel-arrow-rust = { git = "https://github.com/GreptimeTeam/otel-arrow", rev = "2d64b7c0fa95642028a8205b36fe9ea0b023ec59", features = [
|
||||
"server",
|
||||
] }
|
||||
parking_lot = "0.12"
|
||||
parquet = { version = "56.0", default-features = false, features = ["arrow", "async", "object_store"] }
|
||||
paste = "1.0"
|
||||
@@ -297,9 +301,6 @@ mito-codec = { path = "src/mito-codec" }
|
||||
mito2 = { path = "src/mito2" }
|
||||
object-store = { path = "src/object-store" }
|
||||
operator = { path = "src/operator" }
|
||||
otel-arrow-rust = { git = "https://github.com/GreptimeTeam/otel-arrow", rev = "2d64b7c0fa95642028a8205b36fe9ea0b023ec59", features = [
|
||||
"server",
|
||||
] }
|
||||
partition = { path = "src/partition" }
|
||||
pipeline = { path = "src/pipeline" }
|
||||
plugins = { path = "src/plugins" }
|
||||
@@ -319,6 +320,18 @@ table = { path = "src/table" }
|
||||
git = "https://github.com/GreptimeTeam/greptime-meter.git"
|
||||
rev = "5618e779cf2bb4755b499c630fba4c35e91898cb"
|
||||
|
||||
[patch.crates-io]
|
||||
datafusion = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-expr = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-functions = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-functions-aggregate-common = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-optimizer = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-physical-expr = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-physical-plan = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-sql = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
datafusion-substrait = { git = "https://github.com/GreptimeTeam/datafusion.git", rev = "7d5214512740b4dfb742b6b3d91ed9affcc2c9d0" }
|
||||
|
||||
[profile.release]
|
||||
debug = 1
|
||||
|
||||
|
||||
@@ -35,6 +35,7 @@ common-version.workspace = true
|
||||
common-workload.workspace = true
|
||||
dashmap.workspace = true
|
||||
datafusion.workspace = true
|
||||
datafusion-postgres.workspace = true
|
||||
datatypes.workspace = true
|
||||
futures.workspace = true
|
||||
futures-util.workspace = true
|
||||
@@ -48,7 +49,6 @@ paste.workspace = true
|
||||
prometheus.workspace = true
|
||||
promql-parser.workspace = true
|
||||
rand.workspace = true
|
||||
rustc-hash.workspace = true
|
||||
serde.workspace = true
|
||||
serde_json.workspace = true
|
||||
session.workspace = true
|
||||
|
||||
@@ -12,53 +12,41 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
mod pg_catalog_memory_table;
|
||||
mod pg_class;
|
||||
mod pg_database;
|
||||
mod pg_namespace;
|
||||
mod table_names;
|
||||
|
||||
use std::collections::HashMap;
|
||||
use std::sync::{Arc, LazyLock, Weak};
|
||||
use std::sync::{Arc, Weak};
|
||||
|
||||
use common_catalog::consts::{self, DEFAULT_CATALOG_NAME, DEFAULT_SCHEMA_NAME, PG_CATALOG_NAME};
|
||||
use datatypes::schema::ColumnSchema;
|
||||
use lazy_static::lazy_static;
|
||||
use paste::paste;
|
||||
use pg_catalog_memory_table::get_schema_columns;
|
||||
use pg_class::PGClass;
|
||||
use pg_database::PGDatabase;
|
||||
use pg_namespace::PGNamespace;
|
||||
use session::context::{Channel, QueryContext};
|
||||
use arrow_schema::SchemaRef;
|
||||
use async_trait::async_trait;
|
||||
use common_catalog::consts::{DEFAULT_CATALOG_NAME, PG_CATALOG_NAME, PG_CATALOG_TABLE_ID_START};
|
||||
use common_error::ext::BoxedError;
|
||||
use common_recordbatch::SendableRecordBatchStream;
|
||||
use common_recordbatch::adapter::RecordBatchStreamAdapter;
|
||||
use common_telemetry::warn;
|
||||
use datafusion::datasource::TableType;
|
||||
use datafusion::error::DataFusionError;
|
||||
use datafusion::execution::TaskContext;
|
||||
use datafusion::physical_plan::stream::RecordBatchStreamAdapter as DfRecordBatchStreamAdapter;
|
||||
use datafusion_postgres::pg_catalog::catalog_info::CatalogInfo;
|
||||
use datafusion_postgres::pg_catalog::{
|
||||
PgCatalogSchemaProvider, PgCatalogStaticTables, PgCatalogTable,
|
||||
};
|
||||
use snafu::ResultExt;
|
||||
use store_api::storage::ScanRequest;
|
||||
use table::TableRef;
|
||||
pub use table_names::*;
|
||||
use table::metadata::TableId;
|
||||
|
||||
use self::pg_namespace::oid_map::{PGNamespaceOidMap, PGNamespaceOidMapRef};
|
||||
use crate::CatalogManager;
|
||||
use crate::system_schema::memory_table::MemoryTable;
|
||||
use crate::system_schema::utils::tables::u32_column;
|
||||
use crate::system_schema::{SystemSchemaProvider, SystemSchemaProviderInner, SystemTableRef};
|
||||
|
||||
lazy_static! {
|
||||
static ref MEMORY_TABLES: &'static [&'static str] = &[table_names::PG_TYPE];
|
||||
}
|
||||
|
||||
/// The column name for the OID column.
|
||||
/// The OID column is a unique identifier of type u32 for each object in the database.
|
||||
const OID_COLUMN_NAME: &str = "oid";
|
||||
|
||||
fn oid_column() -> ColumnSchema {
|
||||
u32_column(OID_COLUMN_NAME)
|
||||
}
|
||||
use crate::error::{InternalSnafu, ProjectSchemaSnafu, Result};
|
||||
use crate::system_schema::{
|
||||
SystemSchemaProvider, SystemSchemaProviderInner, SystemTable, SystemTableRef,
|
||||
};
|
||||
|
||||
/// [`PGCatalogProvider`] is the provider for a schema named `pg_catalog`, it is not a catalog.
|
||||
pub struct PGCatalogProvider {
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
inner: PgCatalogSchemaProvider<CatalogManagerWrapper>,
|
||||
tables: HashMap<String, TableRef>,
|
||||
|
||||
// Workaround to store mapping of schema_name to a numeric id
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
table_ids: HashMap<&'static str, u32>,
|
||||
}
|
||||
|
||||
impl SystemSchemaProvider for PGCatalogProvider {
|
||||
@@ -69,30 +57,33 @@ impl SystemSchemaProvider for PGCatalogProvider {
|
||||
}
|
||||
}
|
||||
|
||||
// TODO(j0hn50n133): Not sure whether to avoid duplication with `information_schema` or not.
|
||||
macro_rules! setup_memory_table {
|
||||
($name: expr) => {
|
||||
paste! {
|
||||
{
|
||||
let (schema, columns) = get_schema_columns($name);
|
||||
Some(Arc::new(MemoryTable::new(
|
||||
consts::[<PG_CATALOG_ $name _TABLE_ID>],
|
||||
$name,
|
||||
schema,
|
||||
columns
|
||||
)) as _)
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
impl PGCatalogProvider {
|
||||
pub fn new(catalog_name: String, catalog_manager: Weak<dyn CatalogManager>) -> Self {
|
||||
// safe to expect/unwrap because it contains only schema read, this can
|
||||
// be ensured by sqlness tests
|
||||
let static_tables =
|
||||
PgCatalogStaticTables::try_new().expect("Failed to initialize static tables");
|
||||
let inner = PgCatalogSchemaProvider::try_new(
|
||||
CatalogManagerWrapper {
|
||||
catalog_name: catalog_name.clone(),
|
||||
catalog_manager,
|
||||
},
|
||||
Arc::new(static_tables),
|
||||
)
|
||||
.expect("Failed to initialize PgCatalogSchemaProvider");
|
||||
|
||||
let mut table_ids = HashMap::new();
|
||||
let mut table_id = PG_CATALOG_TABLE_ID_START;
|
||||
for name in datafusion_postgres::pg_catalog::PG_CATALOG_TABLES {
|
||||
table_ids.insert(*name, table_id);
|
||||
table_id += 1;
|
||||
}
|
||||
|
||||
let mut provider = Self {
|
||||
catalog_name,
|
||||
catalog_manager,
|
||||
inner,
|
||||
tables: HashMap::new(),
|
||||
namespace_oid_map: Arc::new(PGNamespaceOidMap::new()),
|
||||
table_ids,
|
||||
};
|
||||
provider.build_tables();
|
||||
provider
|
||||
@@ -102,23 +93,13 @@ impl PGCatalogProvider {
|
||||
// SECURITY NOTE:
|
||||
// Must follow the same security rules as [`InformationSchemaProvider::build_tables`].
|
||||
let mut tables = HashMap::new();
|
||||
// TODO(J0HN50N133): modeling the table_name as a enum type to get rid of expect/unwrap here
|
||||
// It's safe to unwrap here because we are sure that the constants have been handle correctly inside system_table.
|
||||
for name in MEMORY_TABLES.iter() {
|
||||
tables.insert(name.to_string(), self.build_table(name).expect(name));
|
||||
for name in datafusion_postgres::pg_catalog::PG_CATALOG_TABLES {
|
||||
if let Some(table) = self.build_table(name) {
|
||||
tables.insert(name.to_string(), table);
|
||||
}
|
||||
}
|
||||
tables.insert(
|
||||
PG_NAMESPACE.to_string(),
|
||||
self.build_table(PG_NAMESPACE).expect(PG_NAMESPACE),
|
||||
);
|
||||
tables.insert(
|
||||
PG_CLASS.to_string(),
|
||||
self.build_table(PG_CLASS).expect(PG_NAMESPACE),
|
||||
);
|
||||
tables.insert(
|
||||
PG_DATABASE.to_string(),
|
||||
self.build_table(PG_DATABASE).expect(PG_DATABASE),
|
||||
);
|
||||
|
||||
self.tables = tables;
|
||||
}
|
||||
}
|
||||
@@ -129,24 +110,26 @@ impl SystemSchemaProviderInner for PGCatalogProvider {
|
||||
}
|
||||
|
||||
fn system_table(&self, name: &str) -> Option<SystemTableRef> {
|
||||
match name {
|
||||
table_names::PG_TYPE => setup_memory_table!(PG_TYPE),
|
||||
table_names::PG_NAMESPACE => Some(Arc::new(PGNamespace::new(
|
||||
self.catalog_name.clone(),
|
||||
self.catalog_manager.clone(),
|
||||
self.namespace_oid_map.clone(),
|
||||
))),
|
||||
table_names::PG_CLASS => Some(Arc::new(PGClass::new(
|
||||
self.catalog_name.clone(),
|
||||
self.catalog_manager.clone(),
|
||||
self.namespace_oid_map.clone(),
|
||||
))),
|
||||
table_names::PG_DATABASE => Some(Arc::new(PGDatabase::new(
|
||||
self.catalog_name.clone(),
|
||||
self.catalog_manager.clone(),
|
||||
self.namespace_oid_map.clone(),
|
||||
))),
|
||||
_ => None,
|
||||
if let Some((table_name, table_id)) = self.table_ids.get_key_value(name) {
|
||||
let table = self.inner.build_table_by_name(name).expect(name);
|
||||
|
||||
if let Some(table) = table {
|
||||
if let Ok(system_table) = DFTableProviderAsSystemTable::try_new(
|
||||
*table_id,
|
||||
table_name,
|
||||
table::metadata::TableType::Temporary,
|
||||
table,
|
||||
) {
|
||||
Some(Arc::new(system_table))
|
||||
} else {
|
||||
warn!("failed to create pg_catalog system table {}", name);
|
||||
None
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
@@ -155,11 +138,177 @@ impl SystemSchemaProviderInner for PGCatalogProvider {
|
||||
}
|
||||
}
|
||||
|
||||
/// Provide query context to call the [`CatalogManager`]'s method.
|
||||
static PG_QUERY_CTX: LazyLock<QueryContext> = LazyLock::new(|| {
|
||||
QueryContext::with_channel(DEFAULT_CATALOG_NAME, DEFAULT_SCHEMA_NAME, Channel::Postgres)
|
||||
});
|
||||
|
||||
fn query_ctx() -> Option<&'static QueryContext> {
|
||||
Some(&PG_QUERY_CTX)
|
||||
#[derive(Clone)]
|
||||
pub struct CatalogManagerWrapper {
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
}
|
||||
|
||||
impl CatalogManagerWrapper {
|
||||
fn catalog_manager(&self) -> std::result::Result<Arc<dyn CatalogManager>, DataFusionError> {
|
||||
self.catalog_manager.upgrade().ok_or_else(|| {
|
||||
DataFusionError::Internal("Failed to access catalog manager".to_string())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for CatalogManagerWrapper {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.debug_struct("CatalogManagerWrapper").finish()
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait]
|
||||
impl CatalogInfo for CatalogManagerWrapper {
|
||||
async fn catalog_names(&self) -> std::result::Result<Vec<String>, DataFusionError> {
|
||||
if self.catalog_name == DEFAULT_CATALOG_NAME {
|
||||
CatalogManager::catalog_names(self.catalog_manager()?.as_ref())
|
||||
.await
|
||||
.map_err(|e| DataFusionError::External(Box::new(e)))
|
||||
} else {
|
||||
Ok(vec![self.catalog_name.to_string()])
|
||||
}
|
||||
}
|
||||
|
||||
async fn schema_names(
|
||||
&self,
|
||||
catalog_name: &str,
|
||||
) -> std::result::Result<Option<Vec<String>>, DataFusionError> {
|
||||
self.catalog_manager()?
|
||||
.schema_names(catalog_name, None)
|
||||
.await
|
||||
.map(Some)
|
||||
.map_err(|e| DataFusionError::External(Box::new(e)))
|
||||
}
|
||||
|
||||
async fn table_names(
|
||||
&self,
|
||||
catalog_name: &str,
|
||||
schema_name: &str,
|
||||
) -> std::result::Result<Option<Vec<String>>, DataFusionError> {
|
||||
self.catalog_manager()?
|
||||
.table_names(catalog_name, schema_name, None)
|
||||
.await
|
||||
.map(Some)
|
||||
.map_err(|e| DataFusionError::External(Box::new(e)))
|
||||
}
|
||||
|
||||
async fn table_schema(
|
||||
&self,
|
||||
catalog_name: &str,
|
||||
schema_name: &str,
|
||||
table_name: &str,
|
||||
) -> std::result::Result<Option<SchemaRef>, DataFusionError> {
|
||||
let table = self
|
||||
.catalog_manager()?
|
||||
.table(catalog_name, schema_name, table_name, None)
|
||||
.await
|
||||
.map_err(|e| DataFusionError::External(Box::new(e)))?;
|
||||
|
||||
Ok(table.map(|t| t.schema().arrow_schema().clone()))
|
||||
}
|
||||
|
||||
async fn table_type(
|
||||
&self,
|
||||
catalog_name: &str,
|
||||
schema_name: &str,
|
||||
table_name: &str,
|
||||
) -> std::result::Result<Option<TableType>, DataFusionError> {
|
||||
let table = self
|
||||
.catalog_manager()?
|
||||
.table(catalog_name, schema_name, table_name, None)
|
||||
.await
|
||||
.map_err(|e| DataFusionError::External(Box::new(e)))?;
|
||||
|
||||
Ok(table.map(|t| t.table_type().into()))
|
||||
}
|
||||
}
|
||||
|
||||
struct DFTableProviderAsSystemTable {
|
||||
pub table_id: TableId,
|
||||
pub table_name: &'static str,
|
||||
pub table_type: table::metadata::TableType,
|
||||
pub schema: Arc<datatypes::schema::Schema>,
|
||||
pub table_provider: PgCatalogTable,
|
||||
}
|
||||
|
||||
impl DFTableProviderAsSystemTable {
|
||||
pub fn try_new(
|
||||
table_id: TableId,
|
||||
table_name: &'static str,
|
||||
table_type: table::metadata::TableType,
|
||||
table_provider: PgCatalogTable,
|
||||
) -> Result<Self> {
|
||||
let arrow_schema = table_provider.schema();
|
||||
let schema = Arc::new(arrow_schema.try_into().context(ProjectSchemaSnafu)?);
|
||||
Ok(Self {
|
||||
table_id,
|
||||
table_name,
|
||||
table_type,
|
||||
schema,
|
||||
table_provider,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl SystemTable for DFTableProviderAsSystemTable {
|
||||
fn table_id(&self) -> TableId {
|
||||
self.table_id
|
||||
}
|
||||
|
||||
fn table_name(&self) -> &'static str {
|
||||
self.table_name
|
||||
}
|
||||
|
||||
fn schema(&self) -> Arc<datatypes::schema::Schema> {
|
||||
self.schema.clone()
|
||||
}
|
||||
|
||||
fn table_type(&self) -> table::metadata::TableType {
|
||||
self.table_type
|
||||
}
|
||||
|
||||
fn to_stream(&self, _request: ScanRequest) -> Result<SendableRecordBatchStream> {
|
||||
match &self.table_provider {
|
||||
PgCatalogTable::Static(table) => {
|
||||
let schema = self.schema.arrow_schema().clone();
|
||||
let data = table
|
||||
.data()
|
||||
.iter()
|
||||
.map(|rb| Ok(rb.clone()))
|
||||
.collect::<Vec<_>>();
|
||||
let stream = Box::pin(DfRecordBatchStreamAdapter::new(
|
||||
schema,
|
||||
futures::stream::iter(data),
|
||||
));
|
||||
Ok(Box::pin(
|
||||
RecordBatchStreamAdapter::try_new(stream)
|
||||
.map_err(BoxedError::new)
|
||||
.context(InternalSnafu)?,
|
||||
))
|
||||
}
|
||||
|
||||
PgCatalogTable::Dynamic(table) => {
|
||||
let stream = table.execute(Arc::new(TaskContext::default()));
|
||||
Ok(Box::pin(
|
||||
RecordBatchStreamAdapter::try_new(stream)
|
||||
.map_err(BoxedError::new)
|
||||
.context(InternalSnafu)?,
|
||||
))
|
||||
}
|
||||
|
||||
PgCatalogTable::Empty(_) => {
|
||||
let schema = self.schema.arrow_schema().clone();
|
||||
let stream = Box::pin(DfRecordBatchStreamAdapter::new(
|
||||
schema,
|
||||
futures::stream::iter(vec![]),
|
||||
));
|
||||
Ok(Box::pin(
|
||||
RecordBatchStreamAdapter::try_new(stream)
|
||||
.map_err(BoxedError::new)
|
||||
.context(InternalSnafu)?,
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
// Copyright 2023 Greptime Team
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use std::sync::Arc;
|
||||
|
||||
use datatypes::schema::{ColumnSchema, Schema, SchemaRef};
|
||||
use datatypes::vectors::{Int16Vector, StringVector, UInt32Vector, VectorRef};
|
||||
|
||||
use crate::memory_table_cols;
|
||||
use crate::system_schema::pg_catalog::oid_column;
|
||||
use crate::system_schema::pg_catalog::table_names::PG_TYPE;
|
||||
use crate::system_schema::utils::tables::{i16_column, string_column};
|
||||
|
||||
fn pg_type_schema_columns() -> (Vec<ColumnSchema>, Vec<VectorRef>) {
|
||||
// TODO(j0hn50n133): acquire this information from `DataType` instead of hardcoding it to avoid regression.
|
||||
memory_table_cols!(
|
||||
[oid, typname, typlen],
|
||||
[
|
||||
(1, "String", -1),
|
||||
(2, "Binary", -1),
|
||||
(3, "Int8", 1),
|
||||
(4, "Int16", 2),
|
||||
(5, "Int32", 4),
|
||||
(6, "Int64", 8),
|
||||
(7, "UInt8", 1),
|
||||
(8, "UInt16", 2),
|
||||
(9, "UInt32", 4),
|
||||
(10, "UInt64", 8),
|
||||
(11, "Float32", 4),
|
||||
(12, "Float64", 8),
|
||||
(13, "Decimal", 16),
|
||||
(14, "Date", 4),
|
||||
(15, "DateTime", 8),
|
||||
(16, "Timestamp", 8),
|
||||
(17, "Time", 8),
|
||||
(18, "Duration", 8),
|
||||
(19, "Interval", 16),
|
||||
(20, "List", -1),
|
||||
]
|
||||
);
|
||||
(
|
||||
// not quiet identical with pg, we only follow the definition in pg
|
||||
vec![oid_column(), string_column("typname"), i16_column("typlen")],
|
||||
vec![
|
||||
Arc::new(UInt32Vector::from_vec(oid)), // oid
|
||||
Arc::new(StringVector::from(typname)),
|
||||
Arc::new(Int16Vector::from_vec(typlen)), // typlen in bytes
|
||||
],
|
||||
)
|
||||
}
|
||||
|
||||
pub(super) fn get_schema_columns(table_name: &str) -> (SchemaRef, Vec<VectorRef>) {
|
||||
let (column_schemas, columns): (_, Vec<VectorRef>) = match table_name {
|
||||
PG_TYPE => pg_type_schema_columns(),
|
||||
_ => unreachable!("Unknown table in pg_catalog: {}", table_name),
|
||||
};
|
||||
(Arc::new(Schema::new(column_schemas)), columns)
|
||||
}
|
||||
@@ -1,276 +0,0 @@
|
||||
// Copyright 2023 Greptime Team
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use std::fmt;
|
||||
use std::sync::{Arc, Weak};
|
||||
|
||||
use arrow_schema::SchemaRef as ArrowSchemaRef;
|
||||
use common_catalog::consts::PG_CATALOG_PG_CLASS_TABLE_ID;
|
||||
use common_error::ext::BoxedError;
|
||||
use common_recordbatch::adapter::RecordBatchStreamAdapter;
|
||||
use common_recordbatch::{DfSendableRecordBatchStream, RecordBatch};
|
||||
use datafusion::execution::TaskContext;
|
||||
use datafusion::physical_plan::stream::RecordBatchStreamAdapter as DfRecordBatchStreamAdapter;
|
||||
use datafusion::physical_plan::streaming::PartitionStream as DfPartitionStream;
|
||||
use datatypes::scalars::ScalarVectorBuilder;
|
||||
use datatypes::schema::{Schema, SchemaRef};
|
||||
use datatypes::value::Value;
|
||||
use datatypes::vectors::{StringVectorBuilder, UInt32VectorBuilder, VectorRef};
|
||||
use futures::TryStreamExt;
|
||||
use snafu::{OptionExt, ResultExt};
|
||||
use store_api::storage::ScanRequest;
|
||||
use table::metadata::TableType;
|
||||
|
||||
use crate::CatalogManager;
|
||||
use crate::error::{
|
||||
CreateRecordBatchSnafu, InternalSnafu, Result, UpgradeWeakCatalogManagerRefSnafu,
|
||||
};
|
||||
use crate::information_schema::Predicates;
|
||||
use crate::system_schema::SystemTable;
|
||||
use crate::system_schema::pg_catalog::pg_namespace::oid_map::PGNamespaceOidMapRef;
|
||||
use crate::system_schema::pg_catalog::{OID_COLUMN_NAME, PG_CLASS, query_ctx};
|
||||
use crate::system_schema::utils::tables::{string_column, u32_column};
|
||||
|
||||
// === column name ===
|
||||
pub const RELNAME: &str = "relname";
|
||||
pub const RELNAMESPACE: &str = "relnamespace";
|
||||
pub const RELKIND: &str = "relkind";
|
||||
pub const RELOWNER: &str = "relowner";
|
||||
|
||||
// === enum value of relkind ===
|
||||
pub const RELKIND_TABLE: &str = "r";
|
||||
pub const RELKIND_VIEW: &str = "v";
|
||||
|
||||
/// The initial capacity of the vector builders.
|
||||
const INIT_CAPACITY: usize = 42;
|
||||
/// The dummy owner id for the namespace.
|
||||
const DUMMY_OWNER_ID: u32 = 0;
|
||||
|
||||
/// The `pg_catalog.pg_class` table implementation.
|
||||
pub(super) struct PGClass {
|
||||
schema: SchemaRef,
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
|
||||
// Workaround to convert schema_name to a numeric id
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
}
|
||||
|
||||
impl PGClass {
|
||||
pub(super) fn new(
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
) -> Self {
|
||||
Self {
|
||||
schema: Self::schema(),
|
||||
catalog_name,
|
||||
catalog_manager,
|
||||
namespace_oid_map,
|
||||
}
|
||||
}
|
||||
|
||||
fn schema() -> SchemaRef {
|
||||
Arc::new(Schema::new(vec![
|
||||
u32_column(OID_COLUMN_NAME),
|
||||
string_column(RELNAME),
|
||||
u32_column(RELNAMESPACE),
|
||||
string_column(RELKIND),
|
||||
u32_column(RELOWNER),
|
||||
]))
|
||||
}
|
||||
|
||||
fn builder(&self) -> PGClassBuilder {
|
||||
PGClassBuilder::new(
|
||||
self.schema.clone(),
|
||||
self.catalog_name.clone(),
|
||||
self.catalog_manager.clone(),
|
||||
self.namespace_oid_map.clone(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for PGClass {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("PGClass")
|
||||
.field("schema", &self.schema)
|
||||
.field("catalog_name", &self.catalog_name)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
impl SystemTable for PGClass {
|
||||
fn table_id(&self) -> table::metadata::TableId {
|
||||
PG_CATALOG_PG_CLASS_TABLE_ID
|
||||
}
|
||||
|
||||
fn table_name(&self) -> &'static str {
|
||||
PG_CLASS
|
||||
}
|
||||
|
||||
fn schema(&self) -> SchemaRef {
|
||||
self.schema.clone()
|
||||
}
|
||||
|
||||
fn to_stream(
|
||||
&self,
|
||||
request: ScanRequest,
|
||||
) -> Result<common_recordbatch::SendableRecordBatchStream> {
|
||||
let schema = self.schema.arrow_schema().clone();
|
||||
let mut builder = self.builder();
|
||||
let stream = Box::pin(DfRecordBatchStreamAdapter::new(
|
||||
schema,
|
||||
futures::stream::once(async move {
|
||||
builder
|
||||
.make_class(Some(request))
|
||||
.await
|
||||
.map(|x| x.into_df_record_batch())
|
||||
.map_err(Into::into)
|
||||
}),
|
||||
));
|
||||
Ok(Box::pin(
|
||||
RecordBatchStreamAdapter::try_new(stream)
|
||||
.map_err(BoxedError::new)
|
||||
.context(InternalSnafu)?,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
impl DfPartitionStream for PGClass {
|
||||
fn schema(&self) -> &ArrowSchemaRef {
|
||||
self.schema.arrow_schema()
|
||||
}
|
||||
|
||||
fn execute(&self, _: Arc<TaskContext>) -> DfSendableRecordBatchStream {
|
||||
let schema = self.schema.arrow_schema().clone();
|
||||
let mut builder = self.builder();
|
||||
Box::pin(DfRecordBatchStreamAdapter::new(
|
||||
schema,
|
||||
futures::stream::once(async move {
|
||||
builder
|
||||
.make_class(None)
|
||||
.await
|
||||
.map(|x| x.into_df_record_batch())
|
||||
.map_err(Into::into)
|
||||
}),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
/// Builds the `pg_catalog.pg_class` table row by row
|
||||
/// TODO(J0HN50N133): `relowner` is always the [`DUMMY_OWNER_ID`] because we don't have users.
|
||||
/// Once we have user system, make it the actual owner of the table.
|
||||
struct PGClassBuilder {
|
||||
schema: SchemaRef,
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
|
||||
oid: UInt32VectorBuilder,
|
||||
relname: StringVectorBuilder,
|
||||
relnamespace: UInt32VectorBuilder,
|
||||
relkind: StringVectorBuilder,
|
||||
relowner: UInt32VectorBuilder,
|
||||
}
|
||||
|
||||
impl PGClassBuilder {
|
||||
fn new(
|
||||
schema: SchemaRef,
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
) -> Self {
|
||||
Self {
|
||||
schema,
|
||||
catalog_name,
|
||||
catalog_manager,
|
||||
namespace_oid_map,
|
||||
|
||||
oid: UInt32VectorBuilder::with_capacity(INIT_CAPACITY),
|
||||
relname: StringVectorBuilder::with_capacity(INIT_CAPACITY),
|
||||
relnamespace: UInt32VectorBuilder::with_capacity(INIT_CAPACITY),
|
||||
relkind: StringVectorBuilder::with_capacity(INIT_CAPACITY),
|
||||
relowner: UInt32VectorBuilder::with_capacity(INIT_CAPACITY),
|
||||
}
|
||||
}
|
||||
|
||||
async fn make_class(&mut self, request: Option<ScanRequest>) -> Result<RecordBatch> {
|
||||
let catalog_name = self.catalog_name.clone();
|
||||
let catalog_manager = self
|
||||
.catalog_manager
|
||||
.upgrade()
|
||||
.context(UpgradeWeakCatalogManagerRefSnafu)?;
|
||||
let predicates = Predicates::from_scan_request(&request);
|
||||
for schema_name in catalog_manager
|
||||
.schema_names(&catalog_name, query_ctx())
|
||||
.await?
|
||||
{
|
||||
let mut stream = catalog_manager.tables(&catalog_name, &schema_name, query_ctx());
|
||||
while let Some(table) = stream.try_next().await? {
|
||||
let table_info = table.table_info();
|
||||
self.add_class(
|
||||
&predicates,
|
||||
table_info.table_id(),
|
||||
&schema_name,
|
||||
&table_info.name,
|
||||
if table_info.table_type == TableType::View {
|
||||
RELKIND_VIEW
|
||||
} else {
|
||||
RELKIND_TABLE
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
self.finish()
|
||||
}
|
||||
|
||||
fn add_class(
|
||||
&mut self,
|
||||
predicates: &Predicates,
|
||||
oid: u32,
|
||||
schema: &str,
|
||||
table: &str,
|
||||
kind: &str,
|
||||
) {
|
||||
let namespace_oid = self.namespace_oid_map.get_oid(schema);
|
||||
let row = [
|
||||
(OID_COLUMN_NAME, &Value::from(oid)),
|
||||
(RELNAMESPACE, &Value::from(schema)),
|
||||
(RELNAME, &Value::from(table)),
|
||||
(RELKIND, &Value::from(kind)),
|
||||
(RELOWNER, &Value::from(DUMMY_OWNER_ID)),
|
||||
];
|
||||
|
||||
if !predicates.eval(&row) {
|
||||
return;
|
||||
}
|
||||
|
||||
self.oid.push(Some(oid));
|
||||
self.relnamespace.push(Some(namespace_oid));
|
||||
self.relname.push(Some(table));
|
||||
self.relkind.push(Some(kind));
|
||||
self.relowner.push(Some(DUMMY_OWNER_ID));
|
||||
}
|
||||
|
||||
fn finish(&mut self) -> Result<RecordBatch> {
|
||||
let columns: Vec<VectorRef> = vec![
|
||||
Arc::new(self.oid.finish()),
|
||||
Arc::new(self.relname.finish()),
|
||||
Arc::new(self.relnamespace.finish()),
|
||||
Arc::new(self.relkind.finish()),
|
||||
Arc::new(self.relowner.finish()),
|
||||
];
|
||||
RecordBatch::new(self.schema.clone(), columns).context(CreateRecordBatchSnafu)
|
||||
}
|
||||
}
|
||||
@@ -1,223 +0,0 @@
|
||||
// Copyright 2023 Greptime Team
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use std::sync::{Arc, Weak};
|
||||
|
||||
use arrow_schema::SchemaRef as ArrowSchemaRef;
|
||||
use common_catalog::consts::PG_CATALOG_PG_DATABASE_TABLE_ID;
|
||||
use common_error::ext::BoxedError;
|
||||
use common_recordbatch::adapter::RecordBatchStreamAdapter;
|
||||
use common_recordbatch::{DfSendableRecordBatchStream, RecordBatch};
|
||||
use datafusion::execution::TaskContext;
|
||||
use datafusion::physical_plan::stream::RecordBatchStreamAdapter as DfRecordBatchStreamAdapter;
|
||||
use datafusion::physical_plan::streaming::PartitionStream as DfPartitionStream;
|
||||
use datatypes::scalars::ScalarVectorBuilder;
|
||||
use datatypes::schema::{Schema, SchemaRef};
|
||||
use datatypes::value::Value;
|
||||
use datatypes::vectors::{StringVectorBuilder, UInt32VectorBuilder, VectorRef};
|
||||
use snafu::{OptionExt, ResultExt};
|
||||
use store_api::storage::ScanRequest;
|
||||
|
||||
use crate::CatalogManager;
|
||||
use crate::error::{
|
||||
CreateRecordBatchSnafu, InternalSnafu, Result, UpgradeWeakCatalogManagerRefSnafu,
|
||||
};
|
||||
use crate::information_schema::Predicates;
|
||||
use crate::system_schema::SystemTable;
|
||||
use crate::system_schema::pg_catalog::pg_namespace::oid_map::PGNamespaceOidMapRef;
|
||||
use crate::system_schema::pg_catalog::{OID_COLUMN_NAME, PG_DATABASE, query_ctx};
|
||||
use crate::system_schema::utils::tables::{string_column, u32_column};
|
||||
|
||||
// === column name ===
|
||||
pub const DATNAME: &str = "datname";
|
||||
|
||||
/// The initial capacity of the vector builders.
|
||||
const INIT_CAPACITY: usize = 42;
|
||||
|
||||
/// The `pg_catalog.database` table implementation.
|
||||
pub(super) struct PGDatabase {
|
||||
schema: SchemaRef,
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
|
||||
// Workaround to convert schema_name to a numeric id
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
}
|
||||
|
||||
impl std::fmt::Debug for PGDatabase {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
f.debug_struct("PGDatabase")
|
||||
.field("schema", &self.schema)
|
||||
.field("catalog_name", &self.catalog_name)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
impl PGDatabase {
|
||||
pub(super) fn new(
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
) -> Self {
|
||||
Self {
|
||||
schema: Self::schema(),
|
||||
catalog_name,
|
||||
catalog_manager,
|
||||
namespace_oid_map,
|
||||
}
|
||||
}
|
||||
|
||||
fn schema() -> SchemaRef {
|
||||
Arc::new(Schema::new(vec![
|
||||
u32_column(OID_COLUMN_NAME),
|
||||
string_column(DATNAME),
|
||||
]))
|
||||
}
|
||||
|
||||
fn builder(&self) -> PGCDatabaseBuilder {
|
||||
PGCDatabaseBuilder::new(
|
||||
self.schema.clone(),
|
||||
self.catalog_name.clone(),
|
||||
self.catalog_manager.clone(),
|
||||
self.namespace_oid_map.clone(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl DfPartitionStream for PGDatabase {
|
||||
fn schema(&self) -> &ArrowSchemaRef {
|
||||
self.schema.arrow_schema()
|
||||
}
|
||||
|
||||
fn execute(&self, _: Arc<TaskContext>) -> DfSendableRecordBatchStream {
|
||||
let schema = self.schema.arrow_schema().clone();
|
||||
let mut builder = self.builder();
|
||||
Box::pin(DfRecordBatchStreamAdapter::new(
|
||||
schema,
|
||||
futures::stream::once(async move {
|
||||
builder
|
||||
.make_database(None)
|
||||
.await
|
||||
.map(|x| x.into_df_record_batch())
|
||||
.map_err(Into::into)
|
||||
}),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
impl SystemTable for PGDatabase {
|
||||
fn table_id(&self) -> table::metadata::TableId {
|
||||
PG_CATALOG_PG_DATABASE_TABLE_ID
|
||||
}
|
||||
|
||||
fn table_name(&self) -> &'static str {
|
||||
PG_DATABASE
|
||||
}
|
||||
|
||||
fn schema(&self) -> SchemaRef {
|
||||
self.schema.clone()
|
||||
}
|
||||
|
||||
fn to_stream(
|
||||
&self,
|
||||
request: ScanRequest,
|
||||
) -> Result<common_recordbatch::SendableRecordBatchStream> {
|
||||
let schema = self.schema.arrow_schema().clone();
|
||||
let mut builder = self.builder();
|
||||
let stream = Box::pin(DfRecordBatchStreamAdapter::new(
|
||||
schema,
|
||||
futures::stream::once(async move {
|
||||
builder
|
||||
.make_database(Some(request))
|
||||
.await
|
||||
.map(|x| x.into_df_record_batch())
|
||||
.map_err(Into::into)
|
||||
}),
|
||||
));
|
||||
Ok(Box::pin(
|
||||
RecordBatchStreamAdapter::try_new(stream)
|
||||
.map_err(BoxedError::new)
|
||||
.context(InternalSnafu)?,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
/// Builds the `pg_catalog.pg_database` table row by row
|
||||
/// `oid` use schema name as a workaround since we don't have numeric schema id.
|
||||
/// `nspname` is the schema name.
|
||||
struct PGCDatabaseBuilder {
|
||||
schema: SchemaRef,
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
|
||||
oid: UInt32VectorBuilder,
|
||||
datname: StringVectorBuilder,
|
||||
}
|
||||
|
||||
impl PGCDatabaseBuilder {
|
||||
fn new(
|
||||
schema: SchemaRef,
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
) -> Self {
|
||||
Self {
|
||||
schema,
|
||||
catalog_name,
|
||||
catalog_manager,
|
||||
namespace_oid_map,
|
||||
|
||||
oid: UInt32VectorBuilder::with_capacity(INIT_CAPACITY),
|
||||
datname: StringVectorBuilder::with_capacity(INIT_CAPACITY),
|
||||
}
|
||||
}
|
||||
|
||||
async fn make_database(&mut self, request: Option<ScanRequest>) -> Result<RecordBatch> {
|
||||
let catalog_name = self.catalog_name.clone();
|
||||
let catalog_manager = self
|
||||
.catalog_manager
|
||||
.upgrade()
|
||||
.context(UpgradeWeakCatalogManagerRefSnafu)?;
|
||||
let predicates = Predicates::from_scan_request(&request);
|
||||
for schema_name in catalog_manager
|
||||
.schema_names(&catalog_name, query_ctx())
|
||||
.await?
|
||||
{
|
||||
self.add_database(&predicates, &schema_name);
|
||||
}
|
||||
self.finish()
|
||||
}
|
||||
|
||||
fn add_database(&mut self, predicates: &Predicates, schema_name: &str) {
|
||||
let oid = self.namespace_oid_map.get_oid(schema_name);
|
||||
let row: [(&str, &Value); 2] = [
|
||||
(OID_COLUMN_NAME, &Value::from(oid)),
|
||||
(DATNAME, &Value::from(schema_name)),
|
||||
];
|
||||
|
||||
if !predicates.eval(&row) {
|
||||
return;
|
||||
}
|
||||
|
||||
self.oid.push(Some(oid));
|
||||
self.datname.push(Some(schema_name));
|
||||
}
|
||||
|
||||
fn finish(&mut self) -> Result<RecordBatch> {
|
||||
let columns: Vec<VectorRef> =
|
||||
vec![Arc::new(self.oid.finish()), Arc::new(self.datname.finish())];
|
||||
RecordBatch::new(self.schema.clone(), columns).context(CreateRecordBatchSnafu)
|
||||
}
|
||||
}
|
||||
@@ -1,221 +0,0 @@
|
||||
// Copyright 2023 Greptime Team
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//! The `pg_catalog.pg_namespace` table implementation.
|
||||
//! namespace is a schema in greptime
|
||||
|
||||
pub(super) mod oid_map;
|
||||
|
||||
use std::fmt;
|
||||
use std::sync::{Arc, Weak};
|
||||
|
||||
use arrow_schema::SchemaRef as ArrowSchemaRef;
|
||||
use common_catalog::consts::PG_CATALOG_PG_NAMESPACE_TABLE_ID;
|
||||
use common_error::ext::BoxedError;
|
||||
use common_recordbatch::adapter::RecordBatchStreamAdapter;
|
||||
use common_recordbatch::{DfSendableRecordBatchStream, RecordBatch, SendableRecordBatchStream};
|
||||
use datafusion::execution::TaskContext;
|
||||
use datafusion::physical_plan::stream::RecordBatchStreamAdapter as DfRecordBatchStreamAdapter;
|
||||
use datafusion::physical_plan::streaming::PartitionStream as DfPartitionStream;
|
||||
use datatypes::scalars::ScalarVectorBuilder;
|
||||
use datatypes::schema::{Schema, SchemaRef};
|
||||
use datatypes::value::Value;
|
||||
use datatypes::vectors::{StringVectorBuilder, UInt32VectorBuilder, VectorRef};
|
||||
use snafu::{OptionExt, ResultExt};
|
||||
use store_api::storage::ScanRequest;
|
||||
|
||||
use crate::CatalogManager;
|
||||
use crate::error::{
|
||||
CreateRecordBatchSnafu, InternalSnafu, Result, UpgradeWeakCatalogManagerRefSnafu,
|
||||
};
|
||||
use crate::information_schema::Predicates;
|
||||
use crate::system_schema::SystemTable;
|
||||
use crate::system_schema::pg_catalog::{
|
||||
OID_COLUMN_NAME, PG_NAMESPACE, PGNamespaceOidMapRef, query_ctx,
|
||||
};
|
||||
use crate::system_schema::utils::tables::{string_column, u32_column};
|
||||
|
||||
const NSPNAME: &str = "nspname";
|
||||
const INIT_CAPACITY: usize = 42;
|
||||
|
||||
pub(super) struct PGNamespace {
|
||||
schema: SchemaRef,
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
|
||||
// Workaround to convert schema_name to a numeric id
|
||||
oid_map: PGNamespaceOidMapRef,
|
||||
}
|
||||
|
||||
impl PGNamespace {
|
||||
pub(super) fn new(
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
oid_map: PGNamespaceOidMapRef,
|
||||
) -> Self {
|
||||
Self {
|
||||
schema: Self::schema(),
|
||||
catalog_name,
|
||||
catalog_manager,
|
||||
oid_map,
|
||||
}
|
||||
}
|
||||
|
||||
fn schema() -> SchemaRef {
|
||||
Arc::new(Schema::new(vec![
|
||||
// TODO(J0HN50N133): we do not have a numeric schema id, use schema name as a workaround. Use a proper schema id once we have it.
|
||||
u32_column(OID_COLUMN_NAME),
|
||||
string_column(NSPNAME),
|
||||
]))
|
||||
}
|
||||
|
||||
fn builder(&self) -> PGNamespaceBuilder {
|
||||
PGNamespaceBuilder::new(
|
||||
self.schema.clone(),
|
||||
self.catalog_name.clone(),
|
||||
self.catalog_manager.clone(),
|
||||
self.oid_map.clone(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Debug for PGNamespace {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
f.debug_struct("PGNamespace")
|
||||
.field("schema", &self.schema)
|
||||
.field("catalog_name", &self.catalog_name)
|
||||
.finish()
|
||||
}
|
||||
}
|
||||
|
||||
impl SystemTable for PGNamespace {
|
||||
fn schema(&self) -> SchemaRef {
|
||||
self.schema.clone()
|
||||
}
|
||||
|
||||
fn table_id(&self) -> table::metadata::TableId {
|
||||
PG_CATALOG_PG_NAMESPACE_TABLE_ID
|
||||
}
|
||||
|
||||
fn table_name(&self) -> &'static str {
|
||||
PG_NAMESPACE
|
||||
}
|
||||
|
||||
fn to_stream(&self, request: ScanRequest) -> Result<SendableRecordBatchStream> {
|
||||
let schema = self.schema.arrow_schema().clone();
|
||||
let mut builder = self.builder();
|
||||
let stream = Box::pin(DfRecordBatchStreamAdapter::new(
|
||||
schema,
|
||||
futures::stream::once(async move {
|
||||
builder
|
||||
.make_namespace(Some(request))
|
||||
.await
|
||||
.map(|x| x.into_df_record_batch())
|
||||
.map_err(Into::into)
|
||||
}),
|
||||
));
|
||||
Ok(Box::pin(
|
||||
RecordBatchStreamAdapter::try_new(stream)
|
||||
.map_err(BoxedError::new)
|
||||
.context(InternalSnafu)?,
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
impl DfPartitionStream for PGNamespace {
|
||||
fn schema(&self) -> &ArrowSchemaRef {
|
||||
self.schema.arrow_schema()
|
||||
}
|
||||
|
||||
fn execute(&self, _: Arc<TaskContext>) -> DfSendableRecordBatchStream {
|
||||
let schema = self.schema.arrow_schema().clone();
|
||||
let mut builder = self.builder();
|
||||
Box::pin(DfRecordBatchStreamAdapter::new(
|
||||
schema,
|
||||
futures::stream::once(async move {
|
||||
builder
|
||||
.make_namespace(None)
|
||||
.await
|
||||
.map(|x| x.into_df_record_batch())
|
||||
.map_err(Into::into)
|
||||
}),
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
/// Builds the `pg_catalog.pg_namespace` table row by row
|
||||
/// `oid` use schema name as a workaround since we don't have numeric schema id.
|
||||
/// `nspname` is the schema name.
|
||||
struct PGNamespaceBuilder {
|
||||
schema: SchemaRef,
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
|
||||
oid: UInt32VectorBuilder,
|
||||
nspname: StringVectorBuilder,
|
||||
}
|
||||
|
||||
impl PGNamespaceBuilder {
|
||||
fn new(
|
||||
schema: SchemaRef,
|
||||
catalog_name: String,
|
||||
catalog_manager: Weak<dyn CatalogManager>,
|
||||
namespace_oid_map: PGNamespaceOidMapRef,
|
||||
) -> Self {
|
||||
Self {
|
||||
schema,
|
||||
catalog_name,
|
||||
catalog_manager,
|
||||
namespace_oid_map,
|
||||
oid: UInt32VectorBuilder::with_capacity(INIT_CAPACITY),
|
||||
nspname: StringVectorBuilder::with_capacity(INIT_CAPACITY),
|
||||
}
|
||||
}
|
||||
|
||||
/// Construct the `pg_catalog.pg_namespace` virtual table
|
||||
async fn make_namespace(&mut self, request: Option<ScanRequest>) -> Result<RecordBatch> {
|
||||
let catalog_name = self.catalog_name.clone();
|
||||
let catalog_manager = self
|
||||
.catalog_manager
|
||||
.upgrade()
|
||||
.context(UpgradeWeakCatalogManagerRefSnafu)?;
|
||||
let predicates = Predicates::from_scan_request(&request);
|
||||
for schema_name in catalog_manager
|
||||
.schema_names(&catalog_name, query_ctx())
|
||||
.await?
|
||||
{
|
||||
self.add_namespace(&predicates, &schema_name);
|
||||
}
|
||||
self.finish()
|
||||
}
|
||||
fn finish(&mut self) -> Result<RecordBatch> {
|
||||
let columns: Vec<VectorRef> =
|
||||
vec![Arc::new(self.oid.finish()), Arc::new(self.nspname.finish())];
|
||||
RecordBatch::new(self.schema.clone(), columns).context(CreateRecordBatchSnafu)
|
||||
}
|
||||
|
||||
fn add_namespace(&mut self, predicates: &Predicates, schema_name: &str) {
|
||||
let oid = self.namespace_oid_map.get_oid(schema_name);
|
||||
let row = [
|
||||
(OID_COLUMN_NAME, &Value::from(oid)),
|
||||
(NSPNAME, &Value::from(schema_name)),
|
||||
];
|
||||
if !predicates.eval(&row) {
|
||||
return;
|
||||
}
|
||||
self.oid.push(Some(oid));
|
||||
self.nspname.push(Some(schema_name));
|
||||
}
|
||||
}
|
||||
@@ -1,94 +0,0 @@
|
||||
// Copyright 2023 Greptime Team
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use std::hash::BuildHasher;
|
||||
use std::sync::Arc;
|
||||
|
||||
use dashmap::DashMap;
|
||||
use rustc_hash::FxSeededState;
|
||||
|
||||
pub type PGNamespaceOidMapRef = Arc<PGNamespaceOidMap>;
|
||||
// Workaround to convert schema_name to a numeric id,
|
||||
// remove this when we have numeric schema id in greptime
|
||||
pub struct PGNamespaceOidMap {
|
||||
oid_map: DashMap<String, u32>,
|
||||
|
||||
// Rust use SipHasher by default, which provides resistance against DOS attacks.
|
||||
// This will produce different hash value between each greptime instance. This will
|
||||
// cause the sqlness test fail. We need a deterministic hash here to provide
|
||||
// same oid for the same schema name with best effort and DOS attacks aren't concern here.
|
||||
hasher: FxSeededState,
|
||||
}
|
||||
|
||||
impl PGNamespaceOidMap {
|
||||
pub fn new() -> Self {
|
||||
Self {
|
||||
oid_map: DashMap::new(),
|
||||
hasher: FxSeededState::with_seed(0), // PLEASE DO NOT MODIFY THIS SEED VALUE!!!
|
||||
}
|
||||
}
|
||||
|
||||
fn oid_is_used(&self, oid: u32) -> bool {
|
||||
self.oid_map.iter().any(|e| *e.value() == oid)
|
||||
}
|
||||
|
||||
pub fn get_oid(&self, schema_name: &str) -> u32 {
|
||||
if let Some(oid) = self.oid_map.get(schema_name) {
|
||||
*oid
|
||||
} else {
|
||||
let mut oid = self.hasher.hash_one(schema_name) as u32;
|
||||
while self.oid_is_used(oid) {
|
||||
oid = self.hasher.hash_one(oid) as u32;
|
||||
}
|
||||
self.oid_map.insert(schema_name.to_string(), oid);
|
||||
oid
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn oid_is_stable() {
|
||||
let oid_map_1 = PGNamespaceOidMap::new();
|
||||
let oid_map_2 = PGNamespaceOidMap::new();
|
||||
|
||||
let schema = "schema";
|
||||
let oid = oid_map_1.get_oid(schema);
|
||||
|
||||
// oid keep stable in the same instance
|
||||
assert_eq!(oid, oid_map_1.get_oid(schema));
|
||||
|
||||
// oid keep stable between different instances
|
||||
assert_eq!(oid, oid_map_2.get_oid(schema));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn oid_collision() {
|
||||
let oid_map = PGNamespaceOidMap::new();
|
||||
|
||||
let key1 = "3178510";
|
||||
let key2 = "4215648";
|
||||
|
||||
// insert them into oid_map
|
||||
let oid1 = oid_map.get_oid(key1);
|
||||
let oid2 = oid_map.get_oid(key2);
|
||||
|
||||
// they should have different id
|
||||
assert_ne!(oid1, oid2);
|
||||
}
|
||||
}
|
||||
@@ -1,22 +0,0 @@
|
||||
// Copyright 2023 Greptime Team
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// https://www.postgresql.org/docs/current/catalog-pg-database.html
|
||||
pub const PG_DATABASE: &str = "pg_database";
|
||||
// https://www.postgresql.org/docs/current/catalog-pg-namespace.html
|
||||
pub const PG_NAMESPACE: &str = "pg_namespace";
|
||||
// https://www.postgresql.org/docs/current/catalog-pg-class.html
|
||||
pub const PG_CLASS: &str = "pg_class";
|
||||
// https://www.postgresql.org/docs/current/catalog-pg-type.html
|
||||
pub const PG_TYPE: &str = "pg_type";
|
||||
@@ -27,22 +27,6 @@ pub fn string_column(name: &str) -> ColumnSchema {
|
||||
)
|
||||
}
|
||||
|
||||
pub fn u32_column(name: &str) -> ColumnSchema {
|
||||
ColumnSchema::new(
|
||||
str::to_lowercase(name),
|
||||
ConcreteDataType::uint32_datatype(),
|
||||
false,
|
||||
)
|
||||
}
|
||||
|
||||
pub fn i16_column(name: &str) -> ColumnSchema {
|
||||
ColumnSchema::new(
|
||||
str::to_lowercase(name),
|
||||
ConcreteDataType::int16_datatype(),
|
||||
false,
|
||||
)
|
||||
}
|
||||
|
||||
pub fn bigint_column(name: &str) -> ColumnSchema {
|
||||
ColumnSchema::new(
|
||||
str::to_lowercase(name),
|
||||
|
||||
@@ -112,11 +112,8 @@ pub const INFORMATION_SCHEMA_SSTS_STORAGE_TABLE_ID: u32 = 38;
|
||||
// ----- End of information_schema tables -----
|
||||
|
||||
/// ----- Begin of pg_catalog tables -----
|
||||
pub const PG_CATALOG_PG_CLASS_TABLE_ID: u32 = 256;
|
||||
pub const PG_CATALOG_PG_TYPE_TABLE_ID: u32 = 257;
|
||||
pub const PG_CATALOG_PG_NAMESPACE_TABLE_ID: u32 = 258;
|
||||
pub const PG_CATALOG_PG_DATABASE_TABLE_ID: u32 = 259;
|
||||
|
||||
pub const PG_CATALOG_TABLE_ID_START: u32 = 256;
|
||||
// Please leave at 128 table ids for Postgres
|
||||
// ----- End of pg_catalog tables -----
|
||||
|
||||
pub const MITO_ENGINE: &str = "mito";
|
||||
|
||||
@@ -37,6 +37,7 @@ datafusion-common.workspace = true
|
||||
datafusion-expr.workspace = true
|
||||
datafusion-functions-aggregate-common.workspace = true
|
||||
datafusion-physical-expr.workspace = true
|
||||
datafusion-postgres.workspace = true
|
||||
datatypes.workspace = true
|
||||
derive_more = { version = "1", default-features = false, features = ["display"] }
|
||||
geo = { version = "0.29", optional = true }
|
||||
|
||||
@@ -21,8 +21,7 @@ mod version;
|
||||
|
||||
use build::BuildFunction;
|
||||
use database::{
|
||||
ConnectionIdFunction, CurrentSchemaFunction, DatabaseFunction, PgBackendPidFunction,
|
||||
ReadPreferenceFunction, SessionUserFunction,
|
||||
ConnectionIdFunction, DatabaseFunction, PgBackendPidFunction, ReadPreferenceFunction,
|
||||
};
|
||||
use pg_catalog::PGCatalogFunction;
|
||||
use procedure_state::ProcedureStateFunction;
|
||||
@@ -37,9 +36,7 @@ impl SystemFunction {
|
||||
pub fn register(registry: &FunctionRegistry) {
|
||||
registry.register_scalar(BuildFunction);
|
||||
registry.register_scalar(VersionFunction);
|
||||
registry.register_scalar(CurrentSchemaFunction);
|
||||
registry.register_scalar(DatabaseFunction);
|
||||
registry.register_scalar(SessionUserFunction);
|
||||
registry.register_scalar(ReadPreferenceFunction);
|
||||
registry.register_scalar(PgBackendPidFunction);
|
||||
registry.register_scalar(ConnectionIdFunction);
|
||||
|
||||
@@ -26,10 +26,6 @@ use crate::function::{Function, find_function_context};
|
||||
#[derive(Clone, Debug, Default)]
|
||||
pub struct DatabaseFunction;
|
||||
|
||||
#[derive(Clone, Debug, Default)]
|
||||
pub struct CurrentSchemaFunction;
|
||||
pub struct SessionUserFunction;
|
||||
|
||||
pub struct ReadPreferenceFunction;
|
||||
|
||||
#[derive(Display)]
|
||||
@@ -41,8 +37,6 @@ pub struct PgBackendPidFunction;
|
||||
pub struct ConnectionIdFunction;
|
||||
|
||||
const DATABASE_FUNCTION_NAME: &str = "database";
|
||||
const CURRENT_SCHEMA_FUNCTION_NAME: &str = "current_schema";
|
||||
const SESSION_USER_FUNCTION_NAME: &str = "session_user";
|
||||
const READ_PREFERENCE_FUNCTION_NAME: &str = "read_preference";
|
||||
const PG_BACKEND_PID: &str = "pg_backend_pid";
|
||||
const CONNECTION_ID: &str = "connection_id";
|
||||
@@ -71,58 +65,6 @@ impl Function for DatabaseFunction {
|
||||
}
|
||||
}
|
||||
|
||||
// Though "current_schema" can be aliased to "database", to not cause any breaking changes,
|
||||
// we are not doing it: not until https://github.com/apache/datafusion/issues/17469 is resolved.
|
||||
impl Function for CurrentSchemaFunction {
|
||||
fn name(&self) -> &str {
|
||||
CURRENT_SCHEMA_FUNCTION_NAME
|
||||
}
|
||||
|
||||
fn return_type(&self, _: &[DataType]) -> Result<DataType> {
|
||||
Ok(DataType::Utf8View)
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::nullary(Volatility::Immutable)
|
||||
}
|
||||
|
||||
fn invoke_with_args(
|
||||
&self,
|
||||
args: ScalarFunctionArgs,
|
||||
) -> datafusion_common::Result<ColumnarValue> {
|
||||
let func_ctx = find_function_context(&args)?;
|
||||
let db = func_ctx.query_ctx.current_schema();
|
||||
|
||||
Ok(ColumnarValue::Scalar(ScalarValue::Utf8View(Some(db))))
|
||||
}
|
||||
}
|
||||
|
||||
impl Function for SessionUserFunction {
|
||||
fn name(&self) -> &str {
|
||||
SESSION_USER_FUNCTION_NAME
|
||||
}
|
||||
|
||||
fn return_type(&self, _: &[DataType]) -> Result<DataType> {
|
||||
Ok(DataType::Utf8View)
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::nullary(Volatility::Immutable)
|
||||
}
|
||||
|
||||
fn invoke_with_args(
|
||||
&self,
|
||||
args: ScalarFunctionArgs,
|
||||
) -> datafusion_common::Result<ColumnarValue> {
|
||||
let func_ctx = find_function_context(&args)?;
|
||||
let user = func_ctx.query_ctx.current_user();
|
||||
|
||||
Ok(ColumnarValue::Scalar(ScalarValue::Utf8View(Some(
|
||||
user.username().to_string(),
|
||||
))))
|
||||
}
|
||||
}
|
||||
|
||||
impl Function for ReadPreferenceFunction {
|
||||
fn name(&self) -> &str {
|
||||
READ_PREFERENCE_FUNCTION_NAME
|
||||
@@ -203,18 +145,6 @@ impl fmt::Display for DatabaseFunction {
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for CurrentSchemaFunction {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "CURRENT_SCHEMA")
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for SessionUserFunction {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "SESSION_USER")
|
||||
}
|
||||
}
|
||||
|
||||
impl fmt::Display for ReadPreferenceFunction {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, "READ_PREFERENCE")
|
||||
|
||||
@@ -12,29 +12,168 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
mod pg_get_userbyid;
|
||||
mod table_is_visible;
|
||||
mod version;
|
||||
|
||||
use pg_get_userbyid::PGGetUserByIdFunction;
|
||||
use table_is_visible::PGTableIsVisibleFunction;
|
||||
use std::sync::Arc;
|
||||
|
||||
use common_query::error::Result;
|
||||
use datafusion::arrow::array::{ArrayRef, StringArray, as_boolean_array};
|
||||
use datafusion::catalog::TableFunction;
|
||||
use datafusion::common::ScalarValue;
|
||||
use datafusion::common::utils::SingleRowListArrayBuilder;
|
||||
use datafusion_expr::{ColumnarValue, ScalarFunctionArgs, Signature, Volatility};
|
||||
use datafusion_postgres::pg_catalog::{self, PgCatalogStaticTables};
|
||||
use datatypes::arrow::datatypes::{DataType, Field};
|
||||
use derive_more::Display;
|
||||
use version::PGVersionFunction;
|
||||
|
||||
use crate::function::{Function, find_function_context};
|
||||
use crate::function_registry::FunctionRegistry;
|
||||
|
||||
#[macro_export]
|
||||
macro_rules! pg_catalog_func_fullname {
|
||||
($name:literal) => {
|
||||
concat!("pg_catalog.", $name)
|
||||
};
|
||||
const CURRENT_SCHEMA_FUNCTION_NAME: &str = "current_schema";
|
||||
const CURRENT_SCHEMAS_FUNCTION_NAME: &str = "current_schemas";
|
||||
const SESSION_USER_FUNCTION_NAME: &str = "session_user";
|
||||
|
||||
#[derive(Clone, Debug, Default, Display)]
|
||||
#[display("{}", self.name())]
|
||||
pub struct CurrentSchemaFunction;
|
||||
|
||||
#[derive(Clone, Debug, Default, Display)]
|
||||
#[display("{}", self.name())]
|
||||
pub struct CurrentSchemasFunction;
|
||||
|
||||
#[derive(Clone, Debug, Default, Display)]
|
||||
#[display("{}", self.name())]
|
||||
pub struct SessionUserFunction;
|
||||
|
||||
// Though "current_schema" can be aliased to "database", to not cause any breaking changes,
|
||||
// we are not doing it: not until https://github.com/apache/datafusion/issues/17469 is resolved.
|
||||
impl Function for CurrentSchemaFunction {
|
||||
fn name(&self) -> &str {
|
||||
CURRENT_SCHEMA_FUNCTION_NAME
|
||||
}
|
||||
|
||||
fn return_type(&self, _: &[DataType]) -> Result<DataType> {
|
||||
Ok(DataType::Utf8View)
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::nullary(Volatility::Immutable)
|
||||
}
|
||||
|
||||
fn invoke_with_args(
|
||||
&self,
|
||||
args: ScalarFunctionArgs,
|
||||
) -> datafusion_common::Result<ColumnarValue> {
|
||||
let func_ctx = find_function_context(&args)?;
|
||||
let db = func_ctx.query_ctx.current_schema();
|
||||
|
||||
Ok(ColumnarValue::Scalar(ScalarValue::Utf8View(Some(db))))
|
||||
}
|
||||
}
|
||||
|
||||
impl Function for SessionUserFunction {
|
||||
fn name(&self) -> &str {
|
||||
SESSION_USER_FUNCTION_NAME
|
||||
}
|
||||
|
||||
fn return_type(&self, _: &[DataType]) -> Result<DataType> {
|
||||
Ok(DataType::Utf8View)
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::nullary(Volatility::Immutable)
|
||||
}
|
||||
|
||||
fn invoke_with_args(
|
||||
&self,
|
||||
args: ScalarFunctionArgs,
|
||||
) -> datafusion_common::Result<ColumnarValue> {
|
||||
let func_ctx = find_function_context(&args)?;
|
||||
let user = func_ctx.query_ctx.current_user();
|
||||
|
||||
Ok(ColumnarValue::Scalar(ScalarValue::Utf8View(Some(
|
||||
user.username().to_string(),
|
||||
))))
|
||||
}
|
||||
}
|
||||
|
||||
impl Function for CurrentSchemasFunction {
|
||||
fn name(&self) -> &str {
|
||||
CURRENT_SCHEMAS_FUNCTION_NAME
|
||||
}
|
||||
|
||||
fn return_type(&self, _: &[DataType]) -> Result<DataType> {
|
||||
Ok(DataType::List(Arc::new(Field::new(
|
||||
"x",
|
||||
DataType::Utf8View,
|
||||
false,
|
||||
))))
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::exact(vec![DataType::Boolean], Volatility::Immutable)
|
||||
}
|
||||
|
||||
fn invoke_with_args(
|
||||
&self,
|
||||
args: ScalarFunctionArgs,
|
||||
) -> datafusion_common::Result<ColumnarValue> {
|
||||
let args = ColumnarValue::values_to_arrays(&args.args)?;
|
||||
let input = as_boolean_array(&args[0]);
|
||||
|
||||
// Create a UTF8 array with a single value
|
||||
let mut values = vec!["public"];
|
||||
// include implicit schemas
|
||||
if input.value(0) {
|
||||
values.push("information_schema");
|
||||
values.push("pg_catalog");
|
||||
values.push("greptime_private");
|
||||
}
|
||||
|
||||
let list_array = SingleRowListArrayBuilder::new(Arc::new(StringArray::from(values)));
|
||||
|
||||
let array: ArrayRef = Arc::new(list_array.build_list_array());
|
||||
|
||||
Ok(ColumnarValue::Array(array))
|
||||
}
|
||||
}
|
||||
|
||||
pub(super) struct PGCatalogFunction;
|
||||
|
||||
impl PGCatalogFunction {
|
||||
pub fn register(registry: &FunctionRegistry) {
|
||||
registry.register_scalar(PGTableIsVisibleFunction);
|
||||
registry.register_scalar(PGGetUserByIdFunction);
|
||||
let static_tables =
|
||||
Arc::new(PgCatalogStaticTables::try_new().expect("load postgres static tables"));
|
||||
|
||||
registry.register_scalar(PGVersionFunction);
|
||||
registry.register_scalar(CurrentSchemaFunction);
|
||||
registry.register_scalar(CurrentSchemasFunction);
|
||||
registry.register_scalar(SessionUserFunction);
|
||||
registry.register(pg_catalog::format_type::create_format_type_udf());
|
||||
registry.register(pg_catalog::create_pg_get_partkeydef_udf());
|
||||
registry.register(pg_catalog::has_privilege_udf::create_has_privilege_udf(
|
||||
"has_table_privilege",
|
||||
));
|
||||
registry.register(pg_catalog::has_privilege_udf::create_has_privilege_udf(
|
||||
"has_schema_privilege",
|
||||
));
|
||||
registry.register(pg_catalog::has_privilege_udf::create_has_privilege_udf(
|
||||
"has_database_privilege",
|
||||
));
|
||||
registry.register(pg_catalog::has_privilege_udf::create_has_privilege_udf(
|
||||
"has_any_column_privilege",
|
||||
));
|
||||
registry.register_table_function(TableFunction::new(
|
||||
"pg_get_keywords".to_string(),
|
||||
static_tables.pg_get_keywords.clone(),
|
||||
));
|
||||
registry.register(pg_catalog::create_pg_relation_is_publishable_udf());
|
||||
registry.register(pg_catalog::create_pg_get_statisticsobjdef_columns_udf());
|
||||
registry.register(pg_catalog::create_pg_get_userbyid_udf());
|
||||
registry.register(pg_catalog::create_pg_table_is_visible());
|
||||
registry.register(pg_catalog::pg_get_expr_udf::create_pg_get_expr_udf());
|
||||
// TODO(sunng87): upgrade datafusion to add
|
||||
//registry.register(pg_catalog::create_pg_encoding_to_char_udf());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,73 +0,0 @@
|
||||
// Copyright 2023 Greptime Team
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use std::fmt::{self};
|
||||
use std::sync::Arc;
|
||||
|
||||
use common_query::error::Result;
|
||||
use datafusion::arrow::datatypes::DataType as ArrowDataType;
|
||||
use datafusion_expr::{Signature, Volatility};
|
||||
use datatypes::prelude::{DataType, VectorRef};
|
||||
use datatypes::types::LogicalPrimitiveType;
|
||||
use datatypes::with_match_primitive_type_id;
|
||||
use num_traits::AsPrimitive;
|
||||
|
||||
use crate::function::{Function, FunctionContext};
|
||||
use crate::scalars::expression::{EvalContext, scalar_unary_op};
|
||||
|
||||
#[derive(Clone, Debug, Default)]
|
||||
pub struct PGGetUserByIdFunction;
|
||||
|
||||
const NAME: &str = crate::pg_catalog_func_fullname!("pg_get_userbyid");
|
||||
|
||||
impl fmt::Display for PGGetUserByIdFunction {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, crate::pg_catalog_func_fullname!("PG_GET_USERBYID"))
|
||||
}
|
||||
}
|
||||
|
||||
impl Function for PGGetUserByIdFunction {
|
||||
fn name(&self) -> &str {
|
||||
NAME
|
||||
}
|
||||
|
||||
fn return_type(&self, _: &[ArrowDataType]) -> Result<ArrowDataType> {
|
||||
Ok(ArrowDataType::Utf8)
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::uniform(
|
||||
1,
|
||||
vec![arrow::datatypes::DataType::UInt32],
|
||||
Volatility::Immutable,
|
||||
)
|
||||
}
|
||||
|
||||
fn eval(&self, _func_ctx: &FunctionContext, columns: &[VectorRef]) -> Result<VectorRef> {
|
||||
with_match_primitive_type_id!(columns[0].data_type().logical_type_id(), |$T| {
|
||||
let col = scalar_unary_op::<<$T as LogicalPrimitiveType>::Native, String, _>(&columns[0], pg_get_user_by_id, &mut EvalContext::default())?;
|
||||
Ok(Arc::new(col))
|
||||
}, {
|
||||
unreachable!()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn pg_get_user_by_id<I>(table_oid: Option<I>, _ctx: &mut EvalContext) -> Option<String>
|
||||
where
|
||||
I: AsPrimitive<u32>,
|
||||
{
|
||||
// TODO(J0HN50N133): We lack way to get the user_info by a numeric value. Once we have it, we can implement this function.
|
||||
table_oid.map(|_| "".to_string())
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
// Copyright 2023 Greptime Team
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use std::fmt::{self};
|
||||
use std::sync::Arc;
|
||||
|
||||
use common_query::error::Result;
|
||||
use datafusion::arrow::datatypes::DataType as ArrowDataType;
|
||||
use datafusion_expr::{Signature, Volatility};
|
||||
use datatypes::prelude::{DataType, VectorRef};
|
||||
use datatypes::types::LogicalPrimitiveType;
|
||||
use datatypes::with_match_primitive_type_id;
|
||||
use num_traits::AsPrimitive;
|
||||
|
||||
use crate::function::{Function, FunctionContext};
|
||||
use crate::scalars::expression::{EvalContext, scalar_unary_op};
|
||||
|
||||
#[derive(Clone, Debug, Default)]
|
||||
pub struct PGTableIsVisibleFunction;
|
||||
|
||||
const NAME: &str = crate::pg_catalog_func_fullname!("pg_table_is_visible");
|
||||
|
||||
impl fmt::Display for PGTableIsVisibleFunction {
|
||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||
write!(f, crate::pg_catalog_func_fullname!("PG_TABLE_IS_VISIBLE"))
|
||||
}
|
||||
}
|
||||
|
||||
impl Function for PGTableIsVisibleFunction {
|
||||
fn name(&self) -> &str {
|
||||
NAME
|
||||
}
|
||||
|
||||
fn return_type(&self, _: &[ArrowDataType]) -> Result<ArrowDataType> {
|
||||
Ok(ArrowDataType::Boolean)
|
||||
}
|
||||
|
||||
fn signature(&self) -> Signature {
|
||||
Signature::uniform(
|
||||
1,
|
||||
vec![arrow::datatypes::DataType::UInt32],
|
||||
Volatility::Immutable,
|
||||
)
|
||||
}
|
||||
|
||||
fn eval(&self, _func_ctx: &FunctionContext, columns: &[VectorRef]) -> Result<VectorRef> {
|
||||
with_match_primitive_type_id!(columns[0].data_type().logical_type_id(), |$T| {
|
||||
let col = scalar_unary_op::<<$T as LogicalPrimitiveType>::Native, bool, _>(&columns[0], pg_table_is_visible, &mut EvalContext::default())?;
|
||||
Ok(Arc::new(col))
|
||||
}, {
|
||||
unreachable!()
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn pg_table_is_visible<I>(table_oid: Option<I>, _ctx: &mut EvalContext) -> Option<bool>
|
||||
where
|
||||
I: AsPrimitive<u32>,
|
||||
{
|
||||
// There is no table visibility in greptime, so we always return true
|
||||
table_oid.map(|_| true)
|
||||
}
|
||||
@@ -27,13 +27,13 @@ pub(crate) struct PGVersionFunction;
|
||||
|
||||
impl fmt::Display for PGVersionFunction {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
write!(f, crate::pg_catalog_func_fullname!("VERSION"))
|
||||
write!(f, "pg_catalog.VERSION")
|
||||
}
|
||||
}
|
||||
|
||||
impl Function for PGVersionFunction {
|
||||
fn name(&self) -> &str {
|
||||
crate::pg_catalog_func_fullname!("version")
|
||||
"pg_catalog.version"
|
||||
}
|
||||
|
||||
fn return_type(&self, _: &[DataType]) -> Result<DataType> {
|
||||
|
||||
@@ -335,6 +335,14 @@ impl Value {
|
||||
}
|
||||
}
|
||||
|
||||
/// Cast value to Boolean. Return None if value is not a boolean type.
|
||||
pub fn as_bool(&self) -> Option<bool> {
|
||||
match self {
|
||||
Value::Boolean(b) => Some(*b),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the logical type of the value.
|
||||
pub fn logical_type_id(&self) -> LogicalTypeId {
|
||||
match self {
|
||||
@@ -2781,21 +2789,21 @@ mod tests {
|
||||
vector: &vector,
|
||||
idx: 0,
|
||||
}),
|
||||
85,
|
||||
74,
|
||||
);
|
||||
check_value_ref_size_eq(
|
||||
&ValueRef::List(ListValueRef::Indexed {
|
||||
vector: &vector,
|
||||
idx: 1,
|
||||
}),
|
||||
85,
|
||||
74,
|
||||
);
|
||||
check_value_ref_size_eq(
|
||||
&ValueRef::List(ListValueRef::Indexed {
|
||||
vector: &vector,
|
||||
idx: 2,
|
||||
}),
|
||||
85,
|
||||
74,
|
||||
);
|
||||
check_value_ref_size_eq(&ValueRef::Decimal128(Decimal128::new(1234, 3, 1)), 32)
|
||||
}
|
||||
|
||||
@@ -553,7 +553,7 @@ pub mod tests {
|
||||
assert!(validity.is_set(0));
|
||||
assert!(!validity.is_set(1));
|
||||
assert!(validity.is_set(2));
|
||||
assert_eq!(256, list_vector.memory_size());
|
||||
assert_eq!(224, list_vector.memory_size());
|
||||
|
||||
let slice = list_vector.slice(0, 2).to_arrow_array();
|
||||
let sliced_array = slice.as_any().downcast_ref::<ListArray>().unwrap();
|
||||
|
||||
@@ -314,7 +314,7 @@ mod tests {
|
||||
assert!(!v.is_const());
|
||||
assert!(v.validity().is_all_valid());
|
||||
assert!(!v.only_null());
|
||||
assert_eq!(1088, v.memory_size());
|
||||
assert_eq!(1040, v.memory_size());
|
||||
|
||||
for (i, s) in strs.iter().enumerate() {
|
||||
assert_eq!(Value::from(*s), v.get(i));
|
||||
|
||||
@@ -450,7 +450,7 @@ mod tests {
|
||||
let key_bytes = num_keys as usize * 5;
|
||||
assert_eq!(key_bytes * 2, metrics.key_bytes);
|
||||
assert_eq!(key_bytes, builder.key_bytes_in_index);
|
||||
assert_eq!(8850, builder.memory_size());
|
||||
assert_eq!(8730, builder.memory_size());
|
||||
|
||||
let (dict, _) = builder.finish().unwrap();
|
||||
assert_eq!(0, builder.key_bytes_in_index);
|
||||
|
||||
@@ -56,6 +56,7 @@ dashmap.workspace = true
|
||||
datafusion.workspace = true
|
||||
datafusion-common.workspace = true
|
||||
datafusion-expr.workspace = true
|
||||
datafusion-postgres.workspace = true
|
||||
datatypes.workspace = true
|
||||
derive_builder.workspace = true
|
||||
futures.workspace = true
|
||||
|
||||
@@ -12,7 +12,6 @@
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
use std::borrow::Cow;
|
||||
use std::collections::HashMap;
|
||||
use std::sync::Arc;
|
||||
|
||||
@@ -115,17 +114,6 @@ pub(crate) fn process<'a>(query: &str, query_ctx: QueryContextRef) -> Option<Vec
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn rewrite_sql(query: &str) -> Cow<'_, str> {
|
||||
// DBeaver tricky replacement for datafusion not support sql
|
||||
// TODO: add more here
|
||||
query
|
||||
.replace(
|
||||
"SELECT db.oid,db.* FROM pg_catalog.pg_database db",
|
||||
"SELECT db.oid as _oid,db.* FROM pg_catalog.pg_database db",
|
||||
)
|
||||
.into()
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use session::context::{QueryContext, QueryContextRef};
|
||||
@@ -211,12 +199,4 @@ mod test {
|
||||
assert!(process("SHOW TABLES ", query_context.clone()).is_none());
|
||||
assert!(process("SET TIME_ZONE=utc ", query_context.clone()).is_none());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_rewrite() {
|
||||
assert_eq!(
|
||||
"SELECT db.oid as _oid,db.* FROM pg_catalog.pg_database db",
|
||||
rewrite_sql("SELECT db.oid,db.* FROM pg_catalog.pg_database db")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ use common_recordbatch::RecordBatch;
|
||||
use common_recordbatch::error::Result as RecordBatchResult;
|
||||
use common_telemetry::{debug, tracing};
|
||||
use datafusion_common::ParamValues;
|
||||
use datafusion_postgres::sql::PostgresCompatibilityParser;
|
||||
use datatypes::prelude::ConcreteDataType;
|
||||
use datatypes::schema::SchemaRef;
|
||||
use futures::{Sink, SinkExt, Stream, StreamExt, future, stream};
|
||||
@@ -67,14 +68,21 @@ impl SimpleQueryHandler for PostgresServerHandlerInner {
|
||||
return Ok(vec![Response::EmptyQuery]);
|
||||
}
|
||||
|
||||
let query = fixtures::rewrite_sql(query);
|
||||
let query = query.as_ref();
|
||||
let query = if let Ok(statements) = self.query_parser.compatibility_parser.parse(query) {
|
||||
statements
|
||||
.iter()
|
||||
.map(|s| s.to_string())
|
||||
.collect::<Vec<_>>()
|
||||
.join(";")
|
||||
} else {
|
||||
query.to_string()
|
||||
};
|
||||
|
||||
if let Some(resps) = fixtures::process(query, query_ctx.clone()) {
|
||||
if let Some(resps) = fixtures::process(&query, query_ctx.clone()) {
|
||||
send_warning_opt(client, query_ctx).await?;
|
||||
Ok(resps)
|
||||
} else {
|
||||
let outputs = self.query_handler.do_query(query, query_ctx.clone()).await;
|
||||
let outputs = self.query_handler.do_query(&query, query_ctx.clone()).await;
|
||||
|
||||
let mut results = Vec::with_capacity(outputs.len());
|
||||
|
||||
@@ -181,6 +189,7 @@ where
|
||||
pub struct DefaultQueryParser {
|
||||
query_handler: ServerSqlQueryHandlerRef,
|
||||
session: Arc<Session>,
|
||||
compatibility_parser: PostgresCompatibilityParser,
|
||||
}
|
||||
|
||||
impl DefaultQueryParser {
|
||||
@@ -188,6 +197,7 @@ impl DefaultQueryParser {
|
||||
DefaultQueryParser {
|
||||
query_handler,
|
||||
session,
|
||||
compatibility_parser: PostgresCompatibilityParser::new(),
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -215,12 +225,20 @@ impl QueryParser for DefaultQueryParser {
|
||||
});
|
||||
}
|
||||
|
||||
let sql = fixtures::rewrite_sql(sql);
|
||||
let sql = sql.as_ref();
|
||||
let sql = if let Ok(mut statements) = self.compatibility_parser.parse(sql) {
|
||||
statements.remove(0).to_string()
|
||||
} else {
|
||||
// bypass the error: it can run into error because of different
|
||||
// versions of sqlparser
|
||||
sql.to_string()
|
||||
};
|
||||
|
||||
let mut stmts =
|
||||
ParserContext::create_with_dialect(sql, &PostgreSqlDialect {}, ParseOptions::default())
|
||||
.map_err(convert_err)?;
|
||||
let mut stmts = ParserContext::create_with_dialect(
|
||||
&sql,
|
||||
&PostgreSqlDialect {},
|
||||
ParseOptions::default(),
|
||||
)
|
||||
.map_err(convert_err)?;
|
||||
if stmts.len() != 1 {
|
||||
Err(PgWireError::UserError(Box::new(ErrorInfo::from(
|
||||
PgErrorCode::Ec42P14,
|
||||
@@ -245,7 +263,7 @@ impl QueryParser for DefaultQueryParser {
|
||||
};
|
||||
|
||||
Ok(SqlPlan {
|
||||
query: sql.to_owned(),
|
||||
query: sql.clone(),
|
||||
statement: Some(stmt),
|
||||
plan,
|
||||
schema,
|
||||
|
||||
@@ -68,7 +68,9 @@ impl ParserContext<'_> {
|
||||
.parser
|
||||
.parse_literal_uint()
|
||||
.context(error::SyntaxSnafu)?;
|
||||
let _ = self.parser.parse_keyword(Keyword::FROM);
|
||||
let _ = self
|
||||
.parser
|
||||
.parse_one_of_keywords(&[Keyword::FROM, Keyword::IN]);
|
||||
|
||||
let cursor_name = self
|
||||
.parser
|
||||
|
||||
@@ -130,7 +130,14 @@ impl ParserContext<'_> {
|
||||
} else if self.consume_token("PROCESSLIST") {
|
||||
self.parse_show_processlist(false)
|
||||
} else {
|
||||
self.unsupported(self.peek_token_as_string())
|
||||
// follow postgres dialect and assume the next token is the variable
|
||||
let variable = self
|
||||
.parse_object_name()
|
||||
.with_context(|_| error::UnexpectedSnafu {
|
||||
expected: "a variable name",
|
||||
actual: self.peek_token_as_string(),
|
||||
})?;
|
||||
Ok(Statement::ShowVariables(ShowVariables { variable }))
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -101,6 +101,16 @@ impl std::fmt::Display for TableType {
|
||||
}
|
||||
}
|
||||
|
||||
impl From<TableType> for datafusion::datasource::TableType {
|
||||
fn from(t: TableType) -> datafusion::datasource::TableType {
|
||||
match t {
|
||||
TableType::Base => datafusion::datasource::TableType::Base,
|
||||
TableType::View => datafusion::datasource::TableType::View,
|
||||
TableType::Temporary => datafusion::datasource::TableType::Temporary,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Identifier of the table.
|
||||
#[derive(Serialize, Deserialize, Clone, Debug, Eq, PartialEq, Default)]
|
||||
pub struct TableIdent {
|
||||
|
||||
@@ -86,40 +86,636 @@ Error: 4001(TableNotFound), Failed to plan SQL: Table not found: greptime.pg_cat
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
select * from pg_catalog.pg_type order by oid;
|
||||
|
||||
+-----+-----------+--------+
|
||||
| oid | typname | typlen |
|
||||
+-----+-----------+--------+
|
||||
| 1 | String | -1 |
|
||||
| 2 | Binary | -1 |
|
||||
| 3 | Int8 | 1 |
|
||||
| 4 | Int16 | 2 |
|
||||
| 5 | Int32 | 4 |
|
||||
| 6 | Int64 | 8 |
|
||||
| 7 | UInt8 | 1 |
|
||||
| 8 | UInt16 | 2 |
|
||||
| 9 | UInt32 | 4 |
|
||||
| 10 | UInt64 | 8 |
|
||||
| 11 | Float32 | 4 |
|
||||
| 12 | Float64 | 8 |
|
||||
| 13 | Decimal | 16 |
|
||||
| 14 | Date | 4 |
|
||||
| 15 | DateTime | 8 |
|
||||
| 16 | Timestamp | 8 |
|
||||
| 17 | Time | 8 |
|
||||
| 18 | Duration | 8 |
|
||||
| 19 | Interval | 16 |
|
||||
| 20 | List | -1 |
|
||||
+-----+-----------+--------+
|
||||
+-------+----------------------------------------+--------------+----------+--------+----------+---------+-------------+----------------+--------------+----------+----------+-----------------------------+---------+----------+------------------------------+-------------------------------+--------------------------------+--------------------------------+---------------------+----------------------+-----------------------+----------+------------+------------+-------------+-----------+----------+--------------+------------------------------------------------------------+----------------------+--------+
|
||||
| oid | typname | typnamespace | typowner | typlen | typbyval | typtype | typcategory | typispreferred | typisdefined | typdelim | typrelid | typsubscript | typelem | typarray | typinput | typoutput | typreceive | typsend | typmodin | typmodout | typanalyze | typalign | typstorage | typnotnull | typbasetype | typtypmod | typndims | typcollation | typdefaultbin | typdefault | typacl |
|
||||
+-------+----------------------------------------+--------------+----------+--------+----------+---------+-------------+----------------+--------------+----------+----------+-----------------------------+---------+----------+------------------------------+-------------------------------+--------------------------------+--------------------------------+---------------------+----------------------+-----------------------+----------+------------+------------+-------------+-----------+----------+--------------+------------------------------------------------------------+----------------------+--------+
|
||||
| 16 | bool | 11 | 10 | 1 | t | b | B | t | t | , | 0 | - | 0 | 1000 | boolin | boolout | boolrecv | boolsend | - | - | - | c | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 17 | bytea | 11 | 10 | -1 | f | b | U | f | t | , | 0 | - | 0 | 1001 | byteain | byteaout | bytearecv | byteasend | - | - | - | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 18 | char | 11 | 10 | 1 | t | b | Z | f | t | , | 0 | - | 0 | 1002 | charin | charout | charrecv | charsend | - | - | - | c | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 19 | name | 11 | 10 | 64 | f | b | S | f | t | , | 0 | raw_array_subscript_handler | 18 | 1003 | namein | nameout | namerecv | namesend | - | - | - | c | p | f | 0 | -1 | 0 | 950 | | | |
|
||||
| 20 | int8 | 11 | 10 | 8 | t | b | N | f | t | , | 0 | - | 0 | 1016 | int8in | int8out | int8recv | int8send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 21 | int2 | 11 | 10 | 2 | t | b | N | f | t | , | 0 | - | 0 | 1005 | int2in | int2out | int2recv | int2send | - | - | - | s | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 22 | int2vector | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 21 | 1006 | int2vectorin | int2vectorout | int2vectorrecv | int2vectorsend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 23 | int4 | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 1007 | int4in | int4out | int4recv | int4send | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 24 | regproc | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 1008 | regprocin | regprocout | regprocrecv | regprocsend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 25 | text | 11 | 10 | -1 | f | b | S | t | t | , | 0 | - | 0 | 1009 | textin | textout | textrecv | textsend | - | - | - | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 26 | oid | 11 | 10 | 4 | t | b | N | t | t | , | 0 | - | 0 | 1028 | oidin | oidout | oidrecv | oidsend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 27 | tid | 11 | 10 | 6 | f | b | U | f | t | , | 0 | - | 0 | 1010 | tidin | tidout | tidrecv | tidsend | - | - | - | s | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 28 | xid | 11 | 10 | 4 | t | b | U | f | t | , | 0 | - | 0 | 1011 | xidin | xidout | xidrecv | xidsend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 29 | cid | 11 | 10 | 4 | t | b | U | f | t | , | 0 | - | 0 | 1012 | cidin | cidout | cidrecv | cidsend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 30 | oidvector | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 26 | 1013 | oidvectorin | oidvectorout | oidvectorrecv | oidvectorsend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 32 | pg_ddl_command | 11 | 10 | 8 | t | p | P | f | t | , | 0 | - | 0 | 0 | pg_ddl_command_in | pg_ddl_command_out | pg_ddl_command_recv | pg_ddl_command_send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 71 | pg_type | 11 | 10 | -1 | f | c | C | f | t | , | 1247 | - | 0 | 210 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 75 | pg_attribute | 11 | 10 | -1 | f | c | C | f | t | , | 1249 | - | 0 | 270 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 81 | pg_proc | 11 | 10 | -1 | f | c | C | f | t | , | 1255 | - | 0 | 272 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 83 | pg_class | 11 | 10 | -1 | f | c | C | f | t | , | 1259 | - | 0 | 273 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 114 | json | 11 | 10 | -1 | f | b | U | f | t | , | 0 | - | 0 | 199 | json_in | json_out | json_recv | json_send | - | - | - | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 142 | xml | 11 | 10 | -1 | f | b | U | f | t | , | 0 | - | 0 | 143 | xml_in | xml_out | xml_recv | xml_send | - | - | - | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 143 | _xml | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 142 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 194 | pg_node_tree | 11 | 10 | -1 | f | b | Z | f | t | , | 0 | - | 0 | 0 | pg_node_tree_in | pg_node_tree_out | pg_node_tree_recv | pg_node_tree_send | - | - | - | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 199 | _json | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 114 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 210 | _pg_type | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 71 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 269 | table_am_handler | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | table_am_handler_in | table_am_handler_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 270 | _pg_attribute | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 75 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 271 | _xid8 | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 5069 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 272 | _pg_proc | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 81 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 273 | _pg_class | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 83 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 325 | index_am_handler | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | index_am_handler_in | index_am_handler_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 600 | point | 11 | 10 | 16 | f | b | G | f | t | , | 0 | raw_array_subscript_handler | 701 | 1017 | point_in | point_out | point_recv | point_send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 601 | lseg | 11 | 10 | 32 | f | b | G | f | t | , | 0 | raw_array_subscript_handler | 600 | 1018 | lseg_in | lseg_out | lseg_recv | lseg_send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 602 | path | 11 | 10 | -1 | f | b | G | f | t | , | 0 | - | 0 | 1019 | path_in | path_out | path_recv | path_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 603 | box | 11 | 10 | 32 | f | b | G | f | t | ; | 0 | raw_array_subscript_handler | 600 | 1020 | box_in | box_out | box_recv | box_send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 604 | polygon | 11 | 10 | -1 | f | b | G | f | t | , | 0 | - | 0 | 1027 | poly_in | poly_out | poly_recv | poly_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 628 | line | 11 | 10 | 24 | f | b | G | f | t | , | 0 | raw_array_subscript_handler | 701 | 629 | line_in | line_out | line_recv | line_send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 629 | _line | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 628 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 650 | cidr | 11 | 10 | -1 | f | b | I | f | t | , | 0 | - | 0 | 651 | cidr_in | cidr_out | cidr_recv | cidr_send | - | - | - | i | m | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 651 | _cidr | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 650 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 700 | float4 | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 1021 | float4in | float4out | float4recv | float4send | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 701 | float8 | 11 | 10 | 8 | t | b | N | t | t | , | 0 | - | 0 | 1022 | float8in | float8out | float8recv | float8send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 705 | unknown | 11 | 10 | -2 | f | p | X | f | t | , | 0 | - | 0 | 0 | unknownin | unknownout | unknownrecv | unknownsend | - | - | - | c | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 718 | circle | 11 | 10 | 24 | f | b | G | f | t | , | 0 | - | 0 | 719 | circle_in | circle_out | circle_recv | circle_send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 719 | _circle | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 718 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 774 | macaddr8 | 11 | 10 | 8 | f | b | U | f | t | , | 0 | - | 0 | 775 | macaddr8_in | macaddr8_out | macaddr8_recv | macaddr8_send | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 775 | _macaddr8 | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 774 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 790 | money | 11 | 10 | 8 | t | b | N | f | t | , | 0 | - | 0 | 791 | cash_in | cash_out | cash_recv | cash_send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 791 | _money | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 790 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 829 | macaddr | 11 | 10 | 6 | f | b | U | f | t | , | 0 | - | 0 | 1040 | macaddr_in | macaddr_out | macaddr_recv | macaddr_send | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 869 | inet | 11 | 10 | -1 | f | b | I | t | t | , | 0 | - | 0 | 1041 | inet_in | inet_out | inet_recv | inet_send | - | - | - | i | m | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1000 | _bool | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 16 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1001 | _bytea | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 17 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1002 | _char | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 18 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1003 | _name | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 19 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 950 | | | |
|
||||
| 1005 | _int2 | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 21 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1006 | _int2vector | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 22 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1007 | _int4 | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 23 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1008 | _regproc | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 24 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1009 | _text | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 25 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 1010 | _tid | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 27 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1011 | _xid | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 28 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1012 | _cid | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 29 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1013 | _oidvector | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 30 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1014 | _bpchar | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1042 | 0 | array_in | array_out | array_recv | array_send | bpchartypmodin | bpchartypmodout | array_typanalyze | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 1015 | _varchar | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1043 | 0 | array_in | array_out | array_recv | array_send | varchartypmodin | varchartypmodout | array_typanalyze | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 1016 | _int8 | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 20 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1017 | _point | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 600 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1018 | _lseg | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 601 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1019 | _path | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 602 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1020 | _box | 11 | 10 | -1 | f | b | A | f | t | ; | 0 | array_subscript_handler | 603 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1021 | _float4 | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 700 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1022 | _float8 | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 701 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1027 | _polygon | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 604 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1028 | _oid | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 26 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1033 | aclitem | 11 | 10 | 16 | f | b | U | f | t | , | 0 | - | 0 | 1034 | aclitemin | aclitemout | - | - | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1034 | _aclitem | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1033 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1040 | _macaddr | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 829 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1041 | _inet | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 869 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1042 | bpchar | 11 | 10 | -1 | f | b | S | f | t | , | 0 | - | 0 | 1014 | bpcharin | bpcharout | bpcharrecv | bpcharsend | bpchartypmodin | bpchartypmodout | - | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 1043 | varchar | 11 | 10 | -1 | f | b | S | f | t | , | 0 | - | 0 | 1015 | varcharin | varcharout | varcharrecv | varcharsend | varchartypmodin | varchartypmodout | - | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 1082 | date | 11 | 10 | 4 | t | b | D | f | t | , | 0 | - | 0 | 1182 | date_in | date_out | date_recv | date_send | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1083 | time | 11 | 10 | 8 | t | b | D | f | t | , | 0 | - | 0 | 1183 | time_in | time_out | time_recv | time_send | timetypmodin | timetypmodout | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1114 | timestamp | 11 | 10 | 8 | t | b | D | f | t | , | 0 | - | 0 | 1115 | timestamp_in | timestamp_out | timestamp_recv | timestamp_send | timestamptypmodin | timestamptypmodout | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1115 | _timestamp | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1114 | 0 | array_in | array_out | array_recv | array_send | timestamptypmodin | timestamptypmodout | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1182 | _date | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1082 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1183 | _time | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1083 | 0 | array_in | array_out | array_recv | array_send | timetypmodin | timetypmodout | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1184 | timestamptz | 11 | 10 | 8 | t | b | D | t | t | , | 0 | - | 0 | 1185 | timestamptz_in | timestamptz_out | timestamptz_recv | timestamptz_send | timestamptztypmodin | timestamptztypmodout | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1185 | _timestamptz | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1184 | 0 | array_in | array_out | array_recv | array_send | timestamptztypmodin | timestamptztypmodout | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1186 | interval | 11 | 10 | 16 | f | b | T | t | t | , | 0 | - | 0 | 1187 | interval_in | interval_out | interval_recv | interval_send | intervaltypmodin | intervaltypmodout | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1187 | _interval | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1186 | 0 | array_in | array_out | array_recv | array_send | intervaltypmodin | intervaltypmodout | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1231 | _numeric | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1700 | 0 | array_in | array_out | array_recv | array_send | numerictypmodin | numerictypmodout | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1248 | pg_database | 11 | 10 | -1 | f | c | C | f | t | , | 1262 | - | 0 | 10052 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1263 | _cstring | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 2275 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1266 | timetz | 11 | 10 | 12 | f | b | D | f | t | , | 0 | - | 0 | 1270 | timetz_in | timetz_out | timetz_recv | timetz_send | timetztypmodin | timetztypmodout | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1270 | _timetz | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1266 | 0 | array_in | array_out | array_recv | array_send | timetztypmodin | timetztypmodout | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1560 | bit | 11 | 10 | -1 | f | b | V | f | t | , | 0 | - | 0 | 1561 | bit_in | bit_out | bit_recv | bit_send | bittypmodin | bittypmodout | - | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1561 | _bit | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1560 | 0 | array_in | array_out | array_recv | array_send | bittypmodin | bittypmodout | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1562 | varbit | 11 | 10 | -1 | f | b | V | t | t | , | 0 | - | 0 | 1563 | varbit_in | varbit_out | varbit_recv | varbit_send | varbittypmodin | varbittypmodout | - | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1563 | _varbit | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1562 | 0 | array_in | array_out | array_recv | array_send | varbittypmodin | varbittypmodout | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1700 | numeric | 11 | 10 | -1 | f | b | N | f | t | , | 0 | - | 0 | 1231 | numeric_in | numeric_out | numeric_recv | numeric_send | numerictypmodin | numerictypmodout | - | i | m | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 1790 | refcursor | 11 | 10 | -1 | f | b | U | f | t | , | 0 | - | 0 | 2201 | textin | textout | textrecv | textsend | - | - | - | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2201 | _refcursor | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1790 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2202 | regprocedure | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 2207 | regprocedurein | regprocedureout | regprocedurerecv | regproceduresend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2203 | regoper | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 2208 | regoperin | regoperout | regoperrecv | regopersend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2204 | regoperator | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 2209 | regoperatorin | regoperatorout | regoperatorrecv | regoperatorsend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2205 | regclass | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 2210 | regclassin | regclassout | regclassrecv | regclasssend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2206 | regtype | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 2211 | regtypein | regtypeout | regtyperecv | regtypesend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2207 | _regprocedure | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 2202 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2208 | _regoper | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 2203 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2209 | _regoperator | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 2204 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2210 | _regclass | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 2205 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2211 | _regtype | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 2206 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2249 | record | 11 | 10 | -1 | f | p | P | f | t | , | 0 | - | 0 | 2287 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2275 | cstring | 11 | 10 | -2 | f | p | P | f | t | , | 0 | - | 0 | 1263 | cstring_in | cstring_out | cstring_recv | cstring_send | - | - | - | c | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2276 | any | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | any_in | any_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2277 | anyarray | 11 | 10 | -1 | f | p | P | f | t | , | 0 | - | 0 | 0 | anyarray_in | anyarray_out | anyarray_recv | anyarray_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2278 | void | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | void_in | void_out | void_recv | void_send | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2279 | trigger | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | trigger_in | trigger_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2280 | language_handler | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | language_handler_in | language_handler_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2281 | internal | 11 | 10 | 8 | t | p | P | f | t | , | 0 | - | 0 | 0 | internal_in | internal_out | - | - | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2283 | anyelement | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | anyelement_in | anyelement_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2287 | _record | 11 | 10 | -1 | f | p | P | f | t | , | 0 | array_subscript_handler | 2249 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2776 | anynonarray | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | anynonarray_in | anynonarray_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2842 | pg_authid | 11 | 10 | -1 | f | c | C | f | t | , | 1260 | - | 0 | 10057 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2843 | pg_auth_members | 11 | 10 | -1 | f | c | C | f | t | , | 1261 | - | 0 | 10058 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2949 | _txid_snapshot | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 2970 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2950 | uuid | 11 | 10 | 16 | f | b | U | f | t | , | 0 | - | 0 | 2951 | uuid_in | uuid_out | uuid_recv | uuid_send | - | - | - | c | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2951 | _uuid | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 2950 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 2970 | txid_snapshot | 11 | 10 | -1 | f | b | U | f | t | , | 0 | - | 0 | 2949 | txid_snapshot_in | txid_snapshot_out | txid_snapshot_recv | txid_snapshot_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3115 | fdw_handler | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | fdw_handler_in | fdw_handler_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3220 | pg_lsn | 11 | 10 | 8 | t | b | U | f | t | , | 0 | - | 0 | 3221 | pg_lsn_in | pg_lsn_out | pg_lsn_recv | pg_lsn_send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3221 | _pg_lsn | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3220 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3310 | tsm_handler | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | tsm_handler_in | tsm_handler_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3361 | pg_ndistinct | 11 | 10 | -1 | f | b | Z | f | t | , | 0 | - | 0 | 0 | pg_ndistinct_in | pg_ndistinct_out | pg_ndistinct_recv | pg_ndistinct_send | - | - | - | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 3402 | pg_dependencies | 11 | 10 | -1 | f | b | Z | f | t | , | 0 | - | 0 | 0 | pg_dependencies_in | pg_dependencies_out | pg_dependencies_recv | pg_dependencies_send | - | - | - | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 3500 | anyenum | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | anyenum_in | anyenum_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3614 | tsvector | 11 | 10 | -1 | f | b | U | f | t | , | 0 | - | 0 | 3643 | tsvectorin | tsvectorout | tsvectorrecv | tsvectorsend | - | - | ts_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3615 | tsquery | 11 | 10 | -1 | f | b | U | f | t | , | 0 | - | 0 | 3645 | tsqueryin | tsqueryout | tsqueryrecv | tsquerysend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3642 | gtsvector | 11 | 10 | -1 | f | b | U | f | t | , | 0 | - | 0 | 3644 | gtsvectorin | gtsvectorout | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3643 | _tsvector | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3614 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3644 | _gtsvector | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3642 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3645 | _tsquery | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3615 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3734 | regconfig | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 3735 | regconfigin | regconfigout | regconfigrecv | regconfigsend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3735 | _regconfig | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3734 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3769 | regdictionary | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 3770 | regdictionaryin | regdictionaryout | regdictionaryrecv | regdictionarysend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3770 | _regdictionary | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3769 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3802 | jsonb | 11 | 10 | -1 | f | b | U | f | t | , | 0 | jsonb_subscript_handler | 0 | 3807 | jsonb_in | jsonb_out | jsonb_recv | jsonb_send | - | - | - | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3807 | _jsonb | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3802 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3831 | anyrange | 11 | 10 | -1 | f | p | P | f | t | , | 0 | - | 0 | 0 | anyrange_in | anyrange_out | - | - | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3838 | event_trigger | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | event_trigger_in | event_trigger_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3904 | int4range | 11 | 10 | -1 | f | r | R | f | t | , | 0 | - | 0 | 3905 | range_in | range_out | range_recv | range_send | - | - | range_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3905 | _int4range | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3904 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3906 | numrange | 11 | 10 | -1 | f | r | R | f | t | , | 0 | - | 0 | 3907 | range_in | range_out | range_recv | range_send | - | - | range_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3907 | _numrange | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3906 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3908 | tsrange | 11 | 10 | -1 | f | r | R | f | t | , | 0 | - | 0 | 3909 | range_in | range_out | range_recv | range_send | - | - | range_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3909 | _tsrange | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3908 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3910 | tstzrange | 11 | 10 | -1 | f | r | R | f | t | , | 0 | - | 0 | 3911 | range_in | range_out | range_recv | range_send | - | - | range_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3911 | _tstzrange | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3910 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3912 | daterange | 11 | 10 | -1 | f | r | R | f | t | , | 0 | - | 0 | 3913 | range_in | range_out | range_recv | range_send | - | - | range_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3913 | _daterange | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3912 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3926 | int8range | 11 | 10 | -1 | f | r | R | f | t | , | 0 | - | 0 | 3927 | range_in | range_out | range_recv | range_send | - | - | range_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 3927 | _int8range | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 3926 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4066 | pg_shseclabel | 11 | 10 | -1 | f | c | C | f | t | , | 3592 | - | 0 | 10093 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4072 | jsonpath | 11 | 10 | -1 | f | b | U | f | t | , | 0 | - | 0 | 4073 | jsonpath_in | jsonpath_out | jsonpath_recv | jsonpath_send | - | - | - | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4073 | _jsonpath | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4072 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4089 | regnamespace | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 4090 | regnamespacein | regnamespaceout | regnamespacerecv | regnamespacesend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4090 | _regnamespace | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4089 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4096 | regrole | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 4097 | regrolein | regroleout | regrolerecv | regrolesend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4097 | _regrole | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4096 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4191 | regcollation | 11 | 10 | 4 | t | b | N | f | t | , | 0 | - | 0 | 4192 | regcollationin | regcollationout | regcollationrecv | regcollationsend | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4192 | _regcollation | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4191 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4451 | int4multirange | 11 | 10 | -1 | f | m | R | f | t | , | 0 | - | 0 | 6150 | multirange_in | multirange_out | multirange_recv | multirange_send | - | - | multirange_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4532 | nummultirange | 11 | 10 | -1 | f | m | R | f | t | , | 0 | - | 0 | 6151 | multirange_in | multirange_out | multirange_recv | multirange_send | - | - | multirange_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4533 | tsmultirange | 11 | 10 | -1 | f | m | R | f | t | , | 0 | - | 0 | 6152 | multirange_in | multirange_out | multirange_recv | multirange_send | - | - | multirange_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4534 | tstzmultirange | 11 | 10 | -1 | f | m | R | f | t | , | 0 | - | 0 | 6153 | multirange_in | multirange_out | multirange_recv | multirange_send | - | - | multirange_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4535 | datemultirange | 11 | 10 | -1 | f | m | R | f | t | , | 0 | - | 0 | 6155 | multirange_in | multirange_out | multirange_recv | multirange_send | - | - | multirange_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4536 | int8multirange | 11 | 10 | -1 | f | m | R | f | t | , | 0 | - | 0 | 6157 | multirange_in | multirange_out | multirange_recv | multirange_send | - | - | multirange_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4537 | anymultirange | 11 | 10 | -1 | f | p | P | f | t | , | 0 | - | 0 | 0 | anymultirange_in | anymultirange_out | - | - | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4538 | anycompatiblemultirange | 11 | 10 | -1 | f | p | P | f | t | , | 0 | - | 0 | 0 | anycompatiblemultirange_in | anycompatiblemultirange_out | - | - | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 4600 | pg_brin_bloom_summary | 11 | 10 | -1 | f | b | Z | f | t | , | 0 | - | 0 | 0 | brin_bloom_summary_in | brin_bloom_summary_out | brin_bloom_summary_recv | brin_bloom_summary_send | - | - | - | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 4601 | pg_brin_minmax_multi_summary | 11 | 10 | -1 | f | b | Z | f | t | , | 0 | - | 0 | 0 | brin_minmax_multi_summary_in | brin_minmax_multi_summary_out | brin_minmax_multi_summary_recv | brin_minmax_multi_summary_send | - | - | - | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 5017 | pg_mcv_list | 11 | 10 | -1 | f | b | Z | f | t | , | 0 | - | 0 | 0 | pg_mcv_list_in | pg_mcv_list_out | pg_mcv_list_recv | pg_mcv_list_send | - | - | - | i | x | f | 0 | -1 | 0 | 100 | | | |
|
||||
| 5038 | pg_snapshot | 11 | 10 | -1 | f | b | U | f | t | , | 0 | - | 0 | 5039 | pg_snapshot_in | pg_snapshot_out | pg_snapshot_recv | pg_snapshot_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 5039 | _pg_snapshot | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 5038 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 5069 | xid8 | 11 | 10 | 8 | t | b | U | f | t | , | 0 | - | 0 | 271 | xid8in | xid8out | xid8recv | xid8send | - | - | - | d | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 5077 | anycompatible | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | anycompatible_in | anycompatible_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 5078 | anycompatiblearray | 11 | 10 | -1 | f | p | P | f | t | , | 0 | - | 0 | 0 | anycompatiblearray_in | anycompatiblearray_out | anycompatiblearray_recv | anycompatiblearray_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 5079 | anycompatiblenonarray | 11 | 10 | 4 | t | p | P | f | t | , | 0 | - | 0 | 0 | anycompatiblenonarray_in | anycompatiblenonarray_out | - | - | - | - | - | i | p | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 5080 | anycompatiblerange | 11 | 10 | -1 | f | p | P | f | t | , | 0 | - | 0 | 0 | anycompatiblerange_in | anycompatiblerange_out | - | - | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 6101 | pg_subscription | 11 | 10 | -1 | f | c | C | f | t | , | 6100 | - | 0 | 10112 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 6150 | _int4multirange | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4451 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 6151 | _nummultirange | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4532 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 6152 | _tsmultirange | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4533 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 6153 | _tstzmultirange | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4534 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 6155 | _datemultirange | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4535 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 6157 | _int8multirange | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4536 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10000 | _pg_attrdef | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10001 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10001 | pg_attrdef | 11 | 10 | -1 | f | c | C | f | t | , | 2604 | - | 0 | 10000 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10002 | _pg_constraint | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10003 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10003 | pg_constraint | 11 | 10 | -1 | f | c | C | f | t | , | 2606 | - | 0 | 10002 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10004 | _pg_inherits | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10005 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10005 | pg_inherits | 11 | 10 | -1 | f | c | C | f | t | , | 2611 | - | 0 | 10004 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10006 | _pg_index | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10007 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10007 | pg_index | 11 | 10 | -1 | f | c | C | f | t | , | 2610 | - | 0 | 10006 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10008 | _pg_operator | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10009 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10009 | pg_operator | 11 | 10 | -1 | f | c | C | f | t | , | 2617 | - | 0 | 10008 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10010 | _pg_opfamily | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10011 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10011 | pg_opfamily | 11 | 10 | -1 | f | c | C | f | t | , | 2753 | - | 0 | 10010 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10012 | _pg_opclass | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10013 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10013 | pg_opclass | 11 | 10 | -1 | f | c | C | f | t | , | 2616 | - | 0 | 10012 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10014 | _pg_am | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10015 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10015 | pg_am | 11 | 10 | -1 | f | c | C | f | t | , | 2601 | - | 0 | 10014 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10016 | _pg_amop | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10017 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10017 | pg_amop | 11 | 10 | -1 | f | c | C | f | t | , | 2602 | - | 0 | 10016 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10018 | _pg_amproc | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10019 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10019 | pg_amproc | 11 | 10 | -1 | f | c | C | f | t | , | 2603 | - | 0 | 10018 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10020 | _pg_language | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10021 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10021 | pg_language | 11 | 10 | -1 | f | c | C | f | t | , | 2612 | - | 0 | 10020 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10022 | _pg_largeobject_metadata | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10023 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10023 | pg_largeobject_metadata | 11 | 10 | -1 | f | c | C | f | t | , | 2995 | - | 0 | 10022 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10024 | _pg_largeobject | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10025 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10025 | pg_largeobject | 11 | 10 | -1 | f | c | C | f | t | , | 2613 | - | 0 | 10024 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10026 | _pg_aggregate | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10027 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10027 | pg_aggregate | 11 | 10 | -1 | f | c | C | f | t | , | 2600 | - | 0 | 10026 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10028 | _pg_statistic | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10029 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10029 | pg_statistic | 11 | 10 | -1 | f | c | C | f | t | , | 2619 | - | 0 | 10028 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10030 | _pg_statistic_ext | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10031 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10031 | pg_statistic_ext | 11 | 10 | -1 | f | c | C | f | t | , | 3381 | - | 0 | 10030 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10032 | _pg_statistic_ext_data | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10033 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10033 | pg_statistic_ext_data | 11 | 10 | -1 | f | c | C | f | t | , | 3429 | - | 0 | 10032 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10034 | _pg_rewrite | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10035 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10035 | pg_rewrite | 11 | 10 | -1 | f | c | C | f | t | , | 2618 | - | 0 | 10034 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10036 | _pg_trigger | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10037 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10037 | pg_trigger | 11 | 10 | -1 | f | c | C | f | t | , | 2620 | - | 0 | 10036 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10038 | _pg_event_trigger | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10039 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10039 | pg_event_trigger | 11 | 10 | -1 | f | c | C | f | t | , | 3466 | - | 0 | 10038 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10040 | _pg_description | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10041 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10041 | pg_description | 11 | 10 | -1 | f | c | C | f | t | , | 2609 | - | 0 | 10040 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10042 | _pg_cast | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10043 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10043 | pg_cast | 11 | 10 | -1 | f | c | C | f | t | , | 2605 | - | 0 | 10042 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10044 | _pg_enum | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10045 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10045 | pg_enum | 11 | 10 | -1 | f | c | C | f | t | , | 3501 | - | 0 | 10044 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10046 | _pg_namespace | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10047 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10047 | pg_namespace | 11 | 10 | -1 | f | c | C | f | t | , | 2615 | - | 0 | 10046 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10048 | _pg_conversion | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10049 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10049 | pg_conversion | 11 | 10 | -1 | f | c | C | f | t | , | 2607 | - | 0 | 10048 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10050 | _pg_depend | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10051 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10051 | pg_depend | 11 | 10 | -1 | f | c | C | f | t | , | 2608 | - | 0 | 10050 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10052 | _pg_database | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 1248 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10053 | _pg_db_role_setting | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10054 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10054 | pg_db_role_setting | 11 | 10 | -1 | f | c | C | f | t | , | 2964 | - | 0 | 10053 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10055 | _pg_tablespace | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10056 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10056 | pg_tablespace | 11 | 10 | -1 | f | c | C | f | t | , | 1213 | - | 0 | 10055 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10057 | _pg_authid | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 2842 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10058 | _pg_auth_members | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 2843 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10059 | _pg_shdepend | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10060 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10060 | pg_shdepend | 11 | 10 | -1 | f | c | C | f | t | , | 1214 | - | 0 | 10059 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10061 | _pg_shdescription | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10062 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10062 | pg_shdescription | 11 | 10 | -1 | f | c | C | f | t | , | 2396 | - | 0 | 10061 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10063 | _pg_ts_config | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10064 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10064 | pg_ts_config | 11 | 10 | -1 | f | c | C | f | t | , | 3602 | - | 0 | 10063 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10065 | _pg_ts_config_map | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10066 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10066 | pg_ts_config_map | 11 | 10 | -1 | f | c | C | f | t | , | 3603 | - | 0 | 10065 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10067 | _pg_ts_dict | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10068 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10068 | pg_ts_dict | 11 | 10 | -1 | f | c | C | f | t | , | 3600 | - | 0 | 10067 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10069 | _pg_ts_parser | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10070 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10070 | pg_ts_parser | 11 | 10 | -1 | f | c | C | f | t | , | 3601 | - | 0 | 10069 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10071 | _pg_ts_template | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10072 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10072 | pg_ts_template | 11 | 10 | -1 | f | c | C | f | t | , | 3764 | - | 0 | 10071 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10073 | _pg_extension | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10074 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10074 | pg_extension | 11 | 10 | -1 | f | c | C | f | t | , | 3079 | - | 0 | 10073 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10075 | _pg_foreign_data_wrapper | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10076 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10076 | pg_foreign_data_wrapper | 11 | 10 | -1 | f | c | C | f | t | , | 2328 | - | 0 | 10075 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10077 | _pg_foreign_server | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10078 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10078 | pg_foreign_server | 11 | 10 | -1 | f | c | C | f | t | , | 1417 | - | 0 | 10077 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10079 | _pg_user_mapping | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10080 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10080 | pg_user_mapping | 11 | 10 | -1 | f | c | C | f | t | , | 1418 | - | 0 | 10079 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10081 | _pg_foreign_table | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10082 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10082 | pg_foreign_table | 11 | 10 | -1 | f | c | C | f | t | , | 3118 | - | 0 | 10081 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10083 | _pg_policy | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10084 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10084 | pg_policy | 11 | 10 | -1 | f | c | C | f | t | , | 3256 | - | 0 | 10083 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10085 | _pg_replication_origin | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10086 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10086 | pg_replication_origin | 11 | 10 | -1 | f | c | C | f | t | , | 6000 | - | 0 | 10085 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10087 | _pg_default_acl | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10088 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10088 | pg_default_acl | 11 | 10 | -1 | f | c | C | f | t | , | 826 | - | 0 | 10087 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10089 | _pg_init_privs | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10090 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10090 | pg_init_privs | 11 | 10 | -1 | f | c | C | f | t | , | 3394 | - | 0 | 10089 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10091 | _pg_seclabel | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10092 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10092 | pg_seclabel | 11 | 10 | -1 | f | c | C | f | t | , | 3596 | - | 0 | 10091 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10093 | _pg_shseclabel | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 4066 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10094 | _pg_collation | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10095 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10095 | pg_collation | 11 | 10 | -1 | f | c | C | f | t | , | 3456 | - | 0 | 10094 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10096 | _pg_parameter_acl | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10097 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10097 | pg_parameter_acl | 11 | 10 | -1 | f | c | C | f | t | , | 6243 | - | 0 | 10096 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10098 | _pg_partitioned_table | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10099 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10099 | pg_partitioned_table | 11 | 10 | -1 | f | c | C | f | t | , | 3350 | - | 0 | 10098 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10100 | _pg_range | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10101 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10101 | pg_range | 11 | 10 | -1 | f | c | C | f | t | , | 3541 | - | 0 | 10100 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10102 | _pg_transform | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10103 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10103 | pg_transform | 11 | 10 | -1 | f | c | C | f | t | , | 3576 | - | 0 | 10102 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10104 | _pg_sequence | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10105 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10105 | pg_sequence | 11 | 10 | -1 | f | c | C | f | t | , | 2224 | - | 0 | 10104 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10106 | _pg_publication | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10107 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10107 | pg_publication | 11 | 10 | -1 | f | c | C | f | t | , | 6104 | - | 0 | 10106 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10108 | _pg_publication_namespace | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10109 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10109 | pg_publication_namespace | 11 | 10 | -1 | f | c | C | f | t | , | 6237 | - | 0 | 10108 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10110 | _pg_publication_rel | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10111 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10111 | pg_publication_rel | 11 | 10 | -1 | f | c | C | f | t | , | 6106 | - | 0 | 10110 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10112 | _pg_subscription | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 6101 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10113 | _pg_subscription_rel | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 10114 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 10114 | pg_subscription_rel | 11 | 10 | -1 | f | c | C | f | t | , | 6102 | - | 0 | 10113 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12001 | _pg_roles | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12002 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12002 | pg_roles | 11 | 10 | -1 | f | c | C | f | t | , | 12000 | - | 0 | 12001 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12006 | _pg_shadow | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12007 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12007 | pg_shadow | 11 | 10 | -1 | f | c | C | f | t | , | 12005 | - | 0 | 12006 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12011 | _pg_group | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12012 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12012 | pg_group | 11 | 10 | -1 | f | c | C | f | t | , | 12010 | - | 0 | 12011 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12015 | _pg_user | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12016 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12016 | pg_user | 11 | 10 | -1 | f | c | C | f | t | , | 12014 | - | 0 | 12015 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12019 | _pg_policies | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12020 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12020 | pg_policies | 11 | 10 | -1 | f | c | C | f | t | , | 12018 | - | 0 | 12019 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12024 | _pg_rules | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12025 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12025 | pg_rules | 11 | 10 | -1 | f | c | C | f | t | , | 12023 | - | 0 | 12024 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12029 | _pg_views | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12030 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12030 | pg_views | 11 | 10 | -1 | f | c | C | f | t | , | 12028 | - | 0 | 12029 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12034 | _pg_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12035 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12035 | pg_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12033 | - | 0 | 12034 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12039 | _pg_matviews | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12040 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12040 | pg_matviews | 11 | 10 | -1 | f | c | C | f | t | , | 12038 | - | 0 | 12039 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12044 | _pg_indexes | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12045 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12045 | pg_indexes | 11 | 10 | -1 | f | c | C | f | t | , | 12043 | - | 0 | 12044 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12049 | _pg_sequences | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12050 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12050 | pg_sequences | 11 | 10 | -1 | f | c | C | f | t | , | 12048 | - | 0 | 12049 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12054 | _pg_stats | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12055 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12055 | pg_stats | 11 | 10 | -1 | f | c | C | f | t | , | 12053 | - | 0 | 12054 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12059 | _pg_stats_ext | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12060 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12060 | pg_stats_ext | 11 | 10 | -1 | f | c | C | f | t | , | 12058 | - | 0 | 12059 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12064 | _pg_stats_ext_exprs | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12065 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12065 | pg_stats_ext_exprs | 11 | 10 | -1 | f | c | C | f | t | , | 12063 | - | 0 | 12064 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12069 | _pg_publication_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12070 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12070 | pg_publication_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12068 | - | 0 | 12069 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12074 | _pg_locks | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12075 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12075 | pg_locks | 11 | 10 | -1 | f | c | C | f | t | , | 12073 | - | 0 | 12074 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12078 | _pg_cursors | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12079 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12079 | pg_cursors | 11 | 10 | -1 | f | c | C | f | t | , | 12077 | - | 0 | 12078 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12082 | _pg_available_extensions | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12083 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12083 | pg_available_extensions | 11 | 10 | -1 | f | c | C | f | t | , | 12081 | - | 0 | 12082 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12086 | _pg_available_extension_versions | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12087 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12087 | pg_available_extension_versions | 11 | 10 | -1 | f | c | C | f | t | , | 12085 | - | 0 | 12086 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12091 | _pg_prepared_xacts | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12092 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12092 | pg_prepared_xacts | 11 | 10 | -1 | f | c | C | f | t | , | 12090 | - | 0 | 12091 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12096 | _pg_prepared_statements | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12097 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12097 | pg_prepared_statements | 11 | 10 | -1 | f | c | C | f | t | , | 12095 | - | 0 | 12096 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12100 | _pg_seclabels | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12101 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12101 | pg_seclabels | 11 | 10 | -1 | f | c | C | f | t | , | 12099 | - | 0 | 12100 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12105 | _pg_settings | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12106 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12106 | pg_settings | 11 | 10 | -1 | f | c | C | f | t | , | 12104 | - | 0 | 12105 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12111 | _pg_file_settings | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12112 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12112 | pg_file_settings | 11 | 10 | -1 | f | c | C | f | t | , | 12110 | - | 0 | 12111 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12115 | _pg_hba_file_rules | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12116 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12116 | pg_hba_file_rules | 11 | 10 | -1 | f | c | C | f | t | , | 12114 | - | 0 | 12115 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12119 | _pg_ident_file_mappings | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12120 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12120 | pg_ident_file_mappings | 11 | 10 | -1 | f | c | C | f | t | , | 12118 | - | 0 | 12119 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12123 | _pg_timezone_abbrevs | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12124 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12124 | pg_timezone_abbrevs | 11 | 10 | -1 | f | c | C | f | t | , | 12122 | - | 0 | 12123 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12127 | _pg_timezone_names | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12128 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12128 | pg_timezone_names | 11 | 10 | -1 | f | c | C | f | t | , | 12126 | - | 0 | 12127 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12131 | _pg_config | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12132 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12132 | pg_config | 11 | 10 | -1 | f | c | C | f | t | , | 12130 | - | 0 | 12131 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12135 | _pg_shmem_allocations | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12136 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12136 | pg_shmem_allocations | 11 | 10 | -1 | f | c | C | f | t | , | 12134 | - | 0 | 12135 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12139 | _pg_backend_memory_contexts | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12140 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12140 | pg_backend_memory_contexts | 11 | 10 | -1 | f | c | C | f | t | , | 12138 | - | 0 | 12139 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12143 | _pg_stat_all_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12144 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12144 | pg_stat_all_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12142 | - | 0 | 12143 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12148 | _pg_stat_xact_all_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12149 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12149 | pg_stat_xact_all_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12147 | - | 0 | 12148 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12153 | _pg_stat_sys_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12154 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12154 | pg_stat_sys_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12152 | - | 0 | 12153 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12158 | _pg_stat_xact_sys_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12159 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12159 | pg_stat_xact_sys_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12157 | - | 0 | 12158 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12162 | _pg_stat_user_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12163 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12163 | pg_stat_user_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12161 | - | 0 | 12162 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12167 | _pg_stat_xact_user_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12168 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12168 | pg_stat_xact_user_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12166 | - | 0 | 12167 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12171 | _pg_statio_all_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12172 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12172 | pg_statio_all_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12170 | - | 0 | 12171 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12176 | _pg_statio_sys_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12177 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12177 | pg_statio_sys_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12175 | - | 0 | 12176 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12180 | _pg_statio_user_tables | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12181 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12181 | pg_statio_user_tables | 11 | 10 | -1 | f | c | C | f | t | , | 12179 | - | 0 | 12180 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12184 | _pg_stat_all_indexes | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12185 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12185 | pg_stat_all_indexes | 11 | 10 | -1 | f | c | C | f | t | , | 12183 | - | 0 | 12184 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12189 | _pg_stat_sys_indexes | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12190 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12190 | pg_stat_sys_indexes | 11 | 10 | -1 | f | c | C | f | t | , | 12188 | - | 0 | 12189 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12193 | _pg_stat_user_indexes | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12194 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12194 | pg_stat_user_indexes | 11 | 10 | -1 | f | c | C | f | t | , | 12192 | - | 0 | 12193 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12197 | _pg_statio_all_indexes | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12198 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12198 | pg_statio_all_indexes | 11 | 10 | -1 | f | c | C | f | t | , | 12196 | - | 0 | 12197 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12202 | _pg_statio_sys_indexes | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12203 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12203 | pg_statio_sys_indexes | 11 | 10 | -1 | f | c | C | f | t | , | 12201 | - | 0 | 12202 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12206 | _pg_statio_user_indexes | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12207 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12207 | pg_statio_user_indexes | 11 | 10 | -1 | f | c | C | f | t | , | 12205 | - | 0 | 12206 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12210 | _pg_statio_all_sequences | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12211 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12211 | pg_statio_all_sequences | 11 | 10 | -1 | f | c | C | f | t | , | 12209 | - | 0 | 12210 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12215 | _pg_statio_sys_sequences | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12216 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12216 | pg_statio_sys_sequences | 11 | 10 | -1 | f | c | C | f | t | , | 12214 | - | 0 | 12215 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12219 | _pg_statio_user_sequences | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12220 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12220 | pg_statio_user_sequences | 11 | 10 | -1 | f | c | C | f | t | , | 12218 | - | 0 | 12219 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12223 | _pg_stat_activity | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12224 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12224 | pg_stat_activity | 11 | 10 | -1 | f | c | C | f | t | , | 12222 | - | 0 | 12223 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12228 | _pg_stat_replication | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12229 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12229 | pg_stat_replication | 11 | 10 | -1 | f | c | C | f | t | , | 12227 | - | 0 | 12228 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12233 | _pg_stat_slru | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12234 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12234 | pg_stat_slru | 11 | 10 | -1 | f | c | C | f | t | , | 12232 | - | 0 | 12233 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12237 | _pg_stat_wal_receiver | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12238 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12238 | pg_stat_wal_receiver | 11 | 10 | -1 | f | c | C | f | t | , | 12236 | - | 0 | 12237 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12241 | _pg_stat_recovery_prefetch | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12242 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12242 | pg_stat_recovery_prefetch | 11 | 10 | -1 | f | c | C | f | t | , | 12240 | - | 0 | 12241 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12245 | _pg_stat_subscription | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12246 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12246 | pg_stat_subscription | 11 | 10 | -1 | f | c | C | f | t | , | 12244 | - | 0 | 12245 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12250 | _pg_stat_ssl | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12251 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12251 | pg_stat_ssl | 11 | 10 | -1 | f | c | C | f | t | , | 12249 | - | 0 | 12250 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12254 | _pg_stat_gssapi | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12255 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12255 | pg_stat_gssapi | 11 | 10 | -1 | f | c | C | f | t | , | 12253 | - | 0 | 12254 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12258 | _pg_replication_slots | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12259 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12259 | pg_replication_slots | 11 | 10 | -1 | f | c | C | f | t | , | 12257 | - | 0 | 12258 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12263 | _pg_stat_replication_slots | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12264 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12264 | pg_stat_replication_slots | 11 | 10 | -1 | f | c | C | f | t | , | 12262 | - | 0 | 12263 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12267 | _pg_stat_database | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12268 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12268 | pg_stat_database | 11 | 10 | -1 | f | c | C | f | t | , | 12266 | - | 0 | 12267 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12272 | _pg_stat_database_conflicts | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12273 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12273 | pg_stat_database_conflicts | 11 | 10 | -1 | f | c | C | f | t | , | 12271 | - | 0 | 12272 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12276 | _pg_stat_user_functions | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12277 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12277 | pg_stat_user_functions | 11 | 10 | -1 | f | c | C | f | t | , | 12275 | - | 0 | 12276 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12281 | _pg_stat_xact_user_functions | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12282 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12282 | pg_stat_xact_user_functions | 11 | 10 | -1 | f | c | C | f | t | , | 12280 | - | 0 | 12281 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12286 | _pg_stat_archiver | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12287 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12287 | pg_stat_archiver | 11 | 10 | -1 | f | c | C | f | t | , | 12285 | - | 0 | 12286 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12290 | _pg_stat_bgwriter | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12291 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12291 | pg_stat_bgwriter | 11 | 10 | -1 | f | c | C | f | t | , | 12289 | - | 0 | 12290 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12294 | _pg_stat_checkpointer | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12295 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12295 | pg_stat_checkpointer | 11 | 10 | -1 | f | c | C | f | t | , | 12293 | - | 0 | 12294 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12298 | _pg_stat_io | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12299 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12299 | pg_stat_io | 11 | 10 | -1 | f | c | C | f | t | , | 12297 | - | 0 | 12298 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12302 | _pg_stat_wal | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12303 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12303 | pg_stat_wal | 11 | 10 | -1 | f | c | C | f | t | , | 12301 | - | 0 | 12302 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12306 | _pg_stat_progress_analyze | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12307 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12307 | pg_stat_progress_analyze | 11 | 10 | -1 | f | c | C | f | t | , | 12305 | - | 0 | 12306 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12311 | _pg_stat_progress_vacuum | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12312 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12312 | pg_stat_progress_vacuum | 11 | 10 | -1 | f | c | C | f | t | , | 12310 | - | 0 | 12311 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12316 | _pg_stat_progress_cluster | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12317 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12317 | pg_stat_progress_cluster | 11 | 10 | -1 | f | c | C | f | t | , | 12315 | - | 0 | 12316 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12321 | _pg_stat_progress_create_index | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12322 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12322 | pg_stat_progress_create_index | 11 | 10 | -1 | f | c | C | f | t | , | 12320 | - | 0 | 12321 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12326 | _pg_stat_progress_basebackup | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12327 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12327 | pg_stat_progress_basebackup | 11 | 10 | -1 | f | c | C | f | t | , | 12325 | - | 0 | 12326 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12330 | _pg_stat_progress_copy | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12331 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12331 | pg_stat_progress_copy | 11 | 10 | -1 | f | c | C | f | t | , | 12329 | - | 0 | 12330 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12335 | _pg_user_mappings | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12336 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12336 | pg_user_mappings | 11 | 10 | -1 | f | c | C | f | t | , | 12334 | - | 0 | 12335 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12340 | _pg_replication_origin_status | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12341 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12341 | pg_replication_origin_status | 11 | 10 | -1 | f | c | C | f | t | , | 12339 | - | 0 | 12340 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12344 | _pg_stat_subscription_stats | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12345 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12345 | pg_stat_subscription_stats | 11 | 10 | -1 | f | c | C | f | t | , | 12343 | - | 0 | 12344 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12348 | _pg_wait_events | 11 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 12349 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 12349 | pg_wait_events | 11 | 10 | -1 | f | c | C | f | t | , | 12347 | - | 0 | 12348 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13296 | _cardinal_number | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13297 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13297 | cardinal_number | 13283 | 10 | 4 | t | d | N | f | t | , | 0 | - | 0 | 13296 | domain_in | int4out | domain_recv | int4send | - | - | - | i | p | f | 23 | -1 | 0 | 0 | | | |
|
||||
| 13299 | _character_data | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13300 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 950 | | | |
|
||||
| 13300 | character_data | 13283 | 10 | -1 | f | d | S | f | t | , | 0 | - | 0 | 13299 | domain_in | varcharout | domain_recv | varcharsend | - | - | - | i | x | f | 1043 | -1 | 0 | 950 | | | |
|
||||
| 13301 | _sql_identifier | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13302 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 950 | | | |
|
||||
| 13302 | sql_identifier | 13283 | 10 | 64 | f | d | S | f | t | , | 0 | - | 0 | 13301 | domain_in | nameout | domain_recv | namesend | - | - | - | c | p | f | 19 | -1 | 0 | 950 | | | |
|
||||
| 13304 | _information_schema_catalog_name | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13305 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13305 | information_schema_catalog_name | 13283 | 10 | -1 | f | c | C | f | t | , | 13303 | - | 0 | 13304 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13307 | _time_stamp | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13308 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13308 | time_stamp | 13283 | 10 | 8 | t | d | D | f | t | , | 0 | - | 0 | 13307 | domain_in | timestamptz_out | domain_recv | timestamptz_send | - | - | - | d | p | f | 1184 | 2 | 0 | 0 | {SQLVALUEFUNCTION :op 4 :type 1184 :typmod 2 :location -1} | CURRENT_TIMESTAMP(2) | |
|
||||
| 13309 | _yes_or_no | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13310 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | i | x | f | 0 | -1 | 0 | 950 | | | |
|
||||
| 13310 | yes_or_no | 13283 | 10 | -1 | f | d | S | f | t | , | 0 | - | 0 | 13309 | domain_in | varcharout | domain_recv | varcharsend | - | - | - | i | x | f | 1043 | 7 | 0 | 950 | | | |
|
||||
| 13313 | _applicable_roles | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13314 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13314 | applicable_roles | 13283 | 10 | -1 | f | c | C | f | t | , | 13312 | - | 0 | 13313 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13318 | _administrable_role_authorizations | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13319 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13319 | administrable_role_authorizations | 13283 | 10 | -1 | f | c | C | f | t | , | 13317 | - | 0 | 13318 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13322 | _attributes | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13323 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13323 | attributes | 13283 | 10 | -1 | f | c | C | f | t | , | 13321 | - | 0 | 13322 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13327 | _character_sets | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13328 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13328 | character_sets | 13283 | 10 | -1 | f | c | C | f | t | , | 13326 | - | 0 | 13327 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13332 | _check_constraint_routine_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13333 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13333 | check_constraint_routine_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13331 | - | 0 | 13332 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13337 | _check_constraints | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13338 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13338 | check_constraints | 13283 | 10 | -1 | f | c | C | f | t | , | 13336 | - | 0 | 13337 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13342 | _collations | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13343 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13343 | collations | 13283 | 10 | -1 | f | c | C | f | t | , | 13341 | - | 0 | 13342 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13347 | _collation_character_set_applicability | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13348 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13348 | collation_character_set_applicability | 13283 | 10 | -1 | f | c | C | f | t | , | 13346 | - | 0 | 13347 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13352 | _column_column_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13353 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13353 | column_column_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13351 | - | 0 | 13352 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13357 | _column_domain_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13358 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13358 | column_domain_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13356 | - | 0 | 13357 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13362 | _column_privileges | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13363 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13363 | column_privileges | 13283 | 10 | -1 | f | c | C | f | t | , | 13361 | - | 0 | 13362 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13367 | _column_udt_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13368 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13368 | column_udt_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13366 | - | 0 | 13367 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13372 | _columns | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13373 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13373 | columns | 13283 | 10 | -1 | f | c | C | f | t | , | 13371 | - | 0 | 13372 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13377 | _constraint_column_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13378 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13378 | constraint_column_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13376 | - | 0 | 13377 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13382 | _constraint_table_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13383 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13383 | constraint_table_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13381 | - | 0 | 13382 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13387 | _domain_constraints | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13388 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13388 | domain_constraints | 13283 | 10 | -1 | f | c | C | f | t | , | 13386 | - | 0 | 13387 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13392 | _domain_udt_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13393 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13393 | domain_udt_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13391 | - | 0 | 13392 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13396 | _domains | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13397 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13397 | domains | 13283 | 10 | -1 | f | c | C | f | t | , | 13395 | - | 0 | 13396 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13401 | _enabled_roles | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13402 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13402 | enabled_roles | 13283 | 10 | -1 | f | c | C | f | t | , | 13400 | - | 0 | 13401 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13405 | _key_column_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13406 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13406 | key_column_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13404 | - | 0 | 13405 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13410 | _parameters | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13411 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13411 | parameters | 13283 | 10 | -1 | f | c | C | f | t | , | 13409 | - | 0 | 13410 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13415 | _referential_constraints | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13416 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13416 | referential_constraints | 13283 | 10 | -1 | f | c | C | f | t | , | 13414 | - | 0 | 13415 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13420 | _role_column_grants | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13421 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13421 | role_column_grants | 13283 | 10 | -1 | f | c | C | f | t | , | 13419 | - | 0 | 13420 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13424 | _routine_column_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13425 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13425 | routine_column_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13423 | - | 0 | 13424 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13429 | _routine_privileges | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13430 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13430 | routine_privileges | 13283 | 10 | -1 | f | c | C | f | t | , | 13428 | - | 0 | 13429 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13434 | _role_routine_grants | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13435 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13435 | role_routine_grants | 13283 | 10 | -1 | f | c | C | f | t | , | 13433 | - | 0 | 13434 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13438 | _routine_routine_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13439 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13439 | routine_routine_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13437 | - | 0 | 13438 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13443 | _routine_sequence_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13444 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13444 | routine_sequence_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13442 | - | 0 | 13443 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13448 | _routine_table_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13449 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13449 | routine_table_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13447 | - | 0 | 13448 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13453 | _routines | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13454 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13454 | routines | 13283 | 10 | -1 | f | c | C | f | t | , | 13452 | - | 0 | 13453 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13458 | _schemata | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13459 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13459 | schemata | 13283 | 10 | -1 | f | c | C | f | t | , | 13457 | - | 0 | 13458 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13462 | _sequences | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13463 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13463 | sequences | 13283 | 10 | -1 | f | c | C | f | t | , | 13461 | - | 0 | 13462 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13467 | _sql_features | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13468 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13468 | sql_features | 13283 | 10 | -1 | f | c | C | f | t | , | 13466 | - | 0 | 13467 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13472 | _sql_implementation_info | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13473 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13473 | sql_implementation_info | 13283 | 10 | -1 | f | c | C | f | t | , | 13471 | - | 0 | 13472 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13477 | _sql_parts | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13478 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13478 | sql_parts | 13283 | 10 | -1 | f | c | C | f | t | , | 13476 | - | 0 | 13477 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13482 | _sql_sizing | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13483 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13483 | sql_sizing | 13283 | 10 | -1 | f | c | C | f | t | , | 13481 | - | 0 | 13482 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13487 | _table_constraints | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13488 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13488 | table_constraints | 13283 | 10 | -1 | f | c | C | f | t | , | 13486 | - | 0 | 13487 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13492 | _table_privileges | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13493 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13493 | table_privileges | 13283 | 10 | -1 | f | c | C | f | t | , | 13491 | - | 0 | 13492 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13497 | _role_table_grants | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13498 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13498 | role_table_grants | 13283 | 10 | -1 | f | c | C | f | t | , | 13496 | - | 0 | 13497 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13501 | _tables | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13502 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13502 | tables | 13283 | 10 | -1 | f | c | C | f | t | , | 13500 | - | 0 | 13501 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13506 | _transforms | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13507 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13507 | transforms | 13283 | 10 | -1 | f | c | C | f | t | , | 13505 | - | 0 | 13506 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13511 | _triggered_update_columns | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13512 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13512 | triggered_update_columns | 13283 | 10 | -1 | f | c | C | f | t | , | 13510 | - | 0 | 13511 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13516 | _triggers | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13517 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13517 | triggers | 13283 | 10 | -1 | f | c | C | f | t | , | 13515 | - | 0 | 13516 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13521 | _udt_privileges | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13522 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13522 | udt_privileges | 13283 | 10 | -1 | f | c | C | f | t | , | 13520 | - | 0 | 13521 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13526 | _role_udt_grants | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13527 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13527 | role_udt_grants | 13283 | 10 | -1 | f | c | C | f | t | , | 13525 | - | 0 | 13526 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13530 | _usage_privileges | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13531 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13531 | usage_privileges | 13283 | 10 | -1 | f | c | C | f | t | , | 13529 | - | 0 | 13530 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13535 | _role_usage_grants | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13536 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13536 | role_usage_grants | 13283 | 10 | -1 | f | c | C | f | t | , | 13534 | - | 0 | 13535 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13539 | _user_defined_types | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13540 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13540 | user_defined_types | 13283 | 10 | -1 | f | c | C | f | t | , | 13538 | - | 0 | 13539 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13544 | _view_column_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13545 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13545 | view_column_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13543 | - | 0 | 13544 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13549 | _view_routine_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13550 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13550 | view_routine_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13548 | - | 0 | 13549 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13554 | _view_table_usage | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13555 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13555 | view_table_usage | 13283 | 10 | -1 | f | c | C | f | t | , | 13553 | - | 0 | 13554 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13559 | _views | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13560 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13560 | views | 13283 | 10 | -1 | f | c | C | f | t | , | 13558 | - | 0 | 13559 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13564 | _data_type_privileges | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13565 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13565 | data_type_privileges | 13283 | 10 | -1 | f | c | C | f | t | , | 13563 | - | 0 | 13564 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13569 | _element_types | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13570 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13570 | element_types | 13283 | 10 | -1 | f | c | C | f | t | , | 13568 | - | 0 | 13569 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13574 | __pg_foreign_table_columns | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13575 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13575 | _pg_foreign_table_columns | 13283 | 10 | -1 | f | c | C | f | t | , | 13573 | - | 0 | 13574 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13579 | _column_options | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13580 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13580 | column_options | 13283 | 10 | -1 | f | c | C | f | t | , | 13578 | - | 0 | 13579 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13583 | __pg_foreign_data_wrappers | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13584 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13584 | _pg_foreign_data_wrappers | 13283 | 10 | -1 | f | c | C | f | t | , | 13582 | - | 0 | 13583 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13587 | _foreign_data_wrapper_options | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13588 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13588 | foreign_data_wrapper_options | 13283 | 10 | -1 | f | c | C | f | t | , | 13586 | - | 0 | 13587 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13591 | _foreign_data_wrappers | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13592 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13592 | foreign_data_wrappers | 13283 | 10 | -1 | f | c | C | f | t | , | 13590 | - | 0 | 13591 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13595 | __pg_foreign_servers | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13596 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13596 | _pg_foreign_servers | 13283 | 10 | -1 | f | c | C | f | t | , | 13594 | - | 0 | 13595 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13599 | _foreign_server_options | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13600 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13600 | foreign_server_options | 13283 | 10 | -1 | f | c | C | f | t | , | 13598 | - | 0 | 13599 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13603 | _foreign_servers | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13604 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13604 | foreign_servers | 13283 | 10 | -1 | f | c | C | f | t | , | 13602 | - | 0 | 13603 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13607 | __pg_foreign_tables | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13608 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13608 | _pg_foreign_tables | 13283 | 10 | -1 | f | c | C | f | t | , | 13606 | - | 0 | 13607 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13612 | _foreign_table_options | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13613 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13613 | foreign_table_options | 13283 | 10 | -1 | f | c | C | f | t | , | 13611 | - | 0 | 13612 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13616 | _foreign_tables | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13617 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13617 | foreign_tables | 13283 | 10 | -1 | f | c | C | f | t | , | 13615 | - | 0 | 13616 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13620 | __pg_user_mappings | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13621 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13621 | _pg_user_mappings | 13283 | 10 | -1 | f | c | C | f | t | , | 13619 | - | 0 | 13620 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13625 | _user_mapping_options | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13626 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13626 | user_mapping_options | 13283 | 10 | -1 | f | c | C | f | t | , | 13624 | - | 0 | 13625 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13630 | _user_mappings | 13283 | 10 | -1 | f | b | A | f | t | , | 0 | array_subscript_handler | 13631 | 0 | array_in | array_out | array_recv | array_send | - | - | array_typanalyze | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
| 13631 | user_mappings | 13283 | 10 | -1 | f | c | C | f | t | , | 13629 | - | 0 | 13630 | record_in | record_out | record_recv | record_send | - | - | - | d | x | f | 0 | -1 | 0 | 0 | | | |
|
||||
+-------+----------------------------------------+--------------+----------+--------+----------+---------+-------------+----------------+--------------+----------+----------+-----------------------------+---------+----------+------------------------------+-------------------------------+--------------------------------+--------------------------------+---------------------+----------------------+-----------------------+----------+------------+------------+-------------+-----------+----------+--------------+------------------------------------------------------------+----------------------+--------+
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
-- SQLNESS REPLACE (\d+\s*) OID
|
||||
select * from pg_catalog.pg_database where datname = 'public';
|
||||
|
||||
+------------+---------+
|
||||
| oid | datname |
|
||||
+------------+---------+
|
||||
| OID| public |
|
||||
+------------+---------+
|
||||
+-----+---------+--------+----------+------------+----------+---------------+--------------+--------------+---------------+--------------+------------+---------------+--------+
|
||||
| oid | datname | datdba | encoding | datcollate | datctype | datistemplate | datallowconn | datconnlimit | datlastsysoid | datfrozenxid | datminmxid | dattablespace | datacl |
|
||||
+-----+---------+--------+----------+------------+----------+---------------+--------------+--------------+---------------+--------------+------------+---------------+--------+
|
||||
+-----+---------+--------+----------+------------+----------+---------------+--------------+--------------+---------------+--------------+------------+---------------+--------+
|
||||
|
||||
-- \d
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
@@ -136,11 +732,11 @@ WHERE c.relkind IN ('r','p','v','m','S','f','')
|
||||
AND pg_catalog.pg_table_is_visible(c.oid)
|
||||
ORDER BY 1,2;
|
||||
|
||||
+--------+---------+-------+-------+
|
||||
| Schema | Name | Type | Owner |
|
||||
+--------+---------+-------+-------+
|
||||
| public | numbers | table | |
|
||||
+--------+---------+-------+-------+
|
||||
+--------+---------+-------+----------+
|
||||
| Schema | Name | Type | Owner |
|
||||
+--------+---------+-------+----------+
|
||||
| public | numbers | table | postgres |
|
||||
+--------+---------+-------+----------+
|
||||
|
||||
-- \dt
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
@@ -157,25 +753,24 @@ WHERE c.relkind IN ('r','p','')
|
||||
AND pg_catalog.pg_table_is_visible(c.oid)
|
||||
ORDER BY 1,2;
|
||||
|
||||
+--------+---------+-------+-------+
|
||||
| Schema | Name | Type | Owner |
|
||||
+--------+---------+-------+-------+
|
||||
| public | numbers | table | |
|
||||
+--------+---------+-------+-------+
|
||||
+--------+---------+-------+----------+
|
||||
| Schema | Name | Type | Owner |
|
||||
+--------+---------+-------+----------+
|
||||
| public | numbers | table | postgres |
|
||||
+--------+---------+-------+----------+
|
||||
|
||||
-- make sure oid of namespace keep stable
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
-- SQLNESS REPLACE (\d+\s*) OID
|
||||
SELECT * FROM pg_namespace ORDER BY nspname;
|
||||
|
||||
+------------+--------------------+
|
||||
| oid | nspname |
|
||||
+------------+--------------------+
|
||||
| OID| greptime_private |
|
||||
| OID| information_schema |
|
||||
| OID| pg_catalog |
|
||||
| OID| public |
|
||||
+------------+--------------------+
|
||||
+-------+--------------------+----------+--------+---------+
|
||||
| oid | nspname | nspowner | nspacl | options |
|
||||
+-------+--------------------+----------+--------+---------+
|
||||
| OID| greptime_private | OID| | |
|
||||
| OID| information_schema | OID| | |
|
||||
| OID| public | OID| | |
|
||||
+-------+--------------------+----------+--------+---------+
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
create database my_db;
|
||||
@@ -226,12 +821,12 @@ WHERE c.relkind IN ('r','p','')
|
||||
AND pg_catalog.pg_table_is_visible(c.oid)
|
||||
ORDER BY 1,2;
|
||||
|
||||
+--------+---------+-------+-------+
|
||||
| Schema | Name | Type | Owner |
|
||||
+--------+---------+-------+-------+
|
||||
| my_db | foo | table | |
|
||||
| public | numbers | table | |
|
||||
+--------+---------+-------+-------+
|
||||
+--------+---------+-------+----------+
|
||||
| Schema | Name | Type | Owner |
|
||||
+--------+---------+-------+----------+
|
||||
| my_db | foo | table | postgres |
|
||||
| public | numbers | table | postgres |
|
||||
+--------+---------+-------+----------+
|
||||
|
||||
-- show tables in `my_db`, `public`
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
@@ -304,25 +899,54 @@ use pg_catalog;
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
desc table pg_class;
|
||||
|
||||
+--------------+--------+-----+------+---------+---------------+
|
||||
| Column | Type | Key | Null | Default | Semantic Type |
|
||||
+--------------+--------+-----+------+---------+---------------+
|
||||
| oid | UInt32 | | NO | | FIELD |
|
||||
| relname | String | | NO | | FIELD |
|
||||
| relnamespace | UInt32 | | NO | | FIELD |
|
||||
| relkind | String | | NO | | FIELD |
|
||||
| relowner | UInt32 | | NO | | FIELD |
|
||||
+--------------+--------+-----+------+---------+---------------+
|
||||
+---------------------+---------+-----+------+---------+---------------+
|
||||
| Column | Type | Key | Null | Default | Semantic Type |
|
||||
+---------------------+---------+-----+------+---------+---------------+
|
||||
| oid | Int32 | | NO | | FIELD |
|
||||
| relname | String | | NO | | FIELD |
|
||||
| relnamespace | Int32 | | NO | | FIELD |
|
||||
| reltype | Int32 | | NO | | FIELD |
|
||||
| reloftype | Int32 | | YES | | FIELD |
|
||||
| relowner | Int32 | | NO | | FIELD |
|
||||
| relam | Int32 | | NO | | FIELD |
|
||||
| relfilenode | Int32 | | NO | | FIELD |
|
||||
| reltablespace | Int32 | | NO | | FIELD |
|
||||
| relpages | Int32 | | NO | | FIELD |
|
||||
| reltuples | Float64 | | NO | | FIELD |
|
||||
| relallvisible | Int32 | | NO | | FIELD |
|
||||
| reltoastrelid | Int32 | | NO | | FIELD |
|
||||
| relhasindex | Boolean | | NO | | FIELD |
|
||||
| relisshared | Boolean | | NO | | FIELD |
|
||||
| relpersistence | String | | NO | | FIELD |
|
||||
| relkind | String | | NO | | FIELD |
|
||||
| relnatts | Int16 | | NO | | FIELD |
|
||||
| relchecks | Int16 | | NO | | FIELD |
|
||||
| relhasrules | Boolean | | NO | | FIELD |
|
||||
| relhastriggers | Boolean | | NO | | FIELD |
|
||||
| relhassubclass | Boolean | | NO | | FIELD |
|
||||
| relrowsecurity | Boolean | | NO | | FIELD |
|
||||
| relforcerowsecurity | Boolean | | NO | | FIELD |
|
||||
| relispopulated | Boolean | | NO | | FIELD |
|
||||
| relreplident | String | | NO | | FIELD |
|
||||
| relispartition | Boolean | | NO | | FIELD |
|
||||
| relrewrite | Int32 | | YES | | FIELD |
|
||||
| relfrozenxid | Int32 | | NO | | FIELD |
|
||||
| relminmxid | Int32 | | NO | | FIELD |
|
||||
| relpartbound | String | | YES | | FIELD |
|
||||
+---------------------+---------+-----+------+---------+---------------+
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
desc table pg_namespace;
|
||||
|
||||
+---------+--------+-----+------+---------+---------------+
|
||||
| Column | Type | Key | Null | Default | Semantic Type |
|
||||
+---------+--------+-----+------+---------+---------------+
|
||||
| oid | UInt32 | | NO | | FIELD |
|
||||
| nspname | String | | NO | | FIELD |
|
||||
+---------+--------+-----+------+---------+---------------+
|
||||
+----------+--------+-----+------+---------+---------------+
|
||||
| Column | Type | Key | Null | Default | Semantic Type |
|
||||
+----------+--------+-----+------+---------+---------------+
|
||||
| oid | Int32 | | NO | | FIELD |
|
||||
| nspname | String | | NO | | FIELD |
|
||||
| nspowner | Int32 | | NO | | FIELD |
|
||||
| nspacl | String | | YES | | FIELD |
|
||||
| options | String | | YES | | FIELD |
|
||||
+----------+--------+-----+------+---------+---------------+
|
||||
|
||||
-- SQLNESS PROTOCOL POSTGRES
|
||||
drop table my_db.foo;
|
||||
|
||||
@@ -921,7 +921,7 @@ impl Display for PostgresqlFormatter {
|
||||
PgRow::RowDescription(desc) => Arc::new(Schema::new(
|
||||
desc.iter()
|
||||
.map(|column| {
|
||||
ColumnSchema::new(column.name(), ConcreteDataType::string_datatype(), false)
|
||||
ColumnSchema::new(column.name(), ConcreteDataType::string_datatype(), true)
|
||||
})
|
||||
.collect(),
|
||||
)),
|
||||
|
||||
Reference in New Issue
Block a user