aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralexv-smirnov <alex@ydb.tech>2023-11-07 18:01:02 +0300
committeralexv-smirnov <alex@ydb.tech>2023-11-07 18:54:21 +0300
commit4382353c3985417a93ae2b65ad96fe22531e39df (patch)
tree0d9e8a1dbdb53905bf530b0e586430db9f17a3b2
parentb31f6ac49dfc3f7092e78e23ab67507d9de74bf8 (diff)
downloadydb-4382353c3985417a93ae2b65ad96fe22531e39df.tar.gz
KIKIMR-20003 Add service files as dependencies
-rw-r--r--ydb/library/yql/parser/pg_wrapper/CMakeLists.darwin-x86_64.txt24
-rw-r--r--ydb/library/yql/parser/pg_wrapper/CMakeLists.linux-aarch64.txt24
-rw-r--r--ydb/library/yql/parser/pg_wrapper/CMakeLists.linux-x86_64.txt24
-rw-r--r--ydb/library/yql/parser/pg_wrapper/CMakeLists.windows-x86_64.txt24
-rw-r--r--ydb/library/yql/parser/pg_wrapper/copy_src.py322
-rwxr-xr-xydb/library/yql/parser/pg_wrapper/copy_src.sh12
-rw-r--r--ydb/library/yql/parser/pg_wrapper/generate_kernels.py397
-rwxr-xr-xydb/library/yql/parser/pg_wrapper/generate_patch.sh11
-rw-r--r--ydb/library/yql/parser/pg_wrapper/vars.txt1547
-rwxr-xr-xydb/library/yql/parser/pg_wrapper/verify.sh24
-rw-r--r--ydb/library/yql/parser/pg_wrapper/ya.make10
11 files changed, 2419 insertions, 0 deletions
diff --git a/ydb/library/yql/parser/pg_wrapper/CMakeLists.darwin-x86_64.txt b/ydb/library/yql/parser/pg_wrapper/CMakeLists.darwin-x86_64.txt
index baa2397967..d5515f04cc 100644
--- a/ydb/library/yql/parser/pg_wrapper/CMakeLists.darwin-x86_64.txt
+++ b/ydb/library/yql/parser/pg_wrapper/CMakeLists.darwin-x86_64.txt
@@ -936,3 +936,27 @@ target_sources(yql-parser-pg_wrapper PRIVATE
${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/backend/port/posix_sema.c
${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/backend/port/sysv_shmem.c
)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.py
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.py
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.sh
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/generate_kernels.py
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/generate_kernels.py
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/vars.txt
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/vars.txt
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/verify.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/verify.sh
+)
diff --git a/ydb/library/yql/parser/pg_wrapper/CMakeLists.linux-aarch64.txt b/ydb/library/yql/parser/pg_wrapper/CMakeLists.linux-aarch64.txt
index a5d6380c42..f877af81e3 100644
--- a/ydb/library/yql/parser/pg_wrapper/CMakeLists.linux-aarch64.txt
+++ b/ydb/library/yql/parser/pg_wrapper/CMakeLists.linux-aarch64.txt
@@ -933,3 +933,27 @@ target_sources(yql-parser-pg_wrapper PRIVATE
${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/backend/port/posix_sema.c
${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/backend/port/sysv_shmem.c
)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.py
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.py
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.sh
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/generate_kernels.py
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/generate_kernels.py
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/vars.txt
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/vars.txt
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/verify.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/verify.sh
+)
diff --git a/ydb/library/yql/parser/pg_wrapper/CMakeLists.linux-x86_64.txt b/ydb/library/yql/parser/pg_wrapper/CMakeLists.linux-x86_64.txt
index 40c4c4d060..5e4926b67d 100644
--- a/ydb/library/yql/parser/pg_wrapper/CMakeLists.linux-x86_64.txt
+++ b/ydb/library/yql/parser/pg_wrapper/CMakeLists.linux-x86_64.txt
@@ -937,3 +937,27 @@ target_sources(yql-parser-pg_wrapper PRIVATE
${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/backend/port/posix_sema.c
${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/backend/port/sysv_shmem.c
)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.py
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.py
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.sh
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/generate_kernels.py
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/generate_kernels.py
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/vars.txt
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/vars.txt
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/verify.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/verify.sh
+)
diff --git a/ydb/library/yql/parser/pg_wrapper/CMakeLists.windows-x86_64.txt b/ydb/library/yql/parser/pg_wrapper/CMakeLists.windows-x86_64.txt
index adf0b9ad1c..9cd9246e9a 100644
--- a/ydb/library/yql/parser/pg_wrapper/CMakeLists.windows-x86_64.txt
+++ b/ydb/library/yql/parser/pg_wrapper/CMakeLists.windows-x86_64.txt
@@ -975,3 +975,27 @@ target_sources(yql-parser-pg_wrapper PRIVATE
${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/port/win32setlocale.c
${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/postgresql/src/port/win32stat.c
)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.py
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.py
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/copy_src.sh
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/generate_kernels.py
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/generate_kernels.py
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/vars.txt
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/vars.txt
+)
+copy_file(
+ ${CMAKE_SOURCE_DIR}/ydb/library/yql/parser/pg_wrapper/verify.sh
+ ${CMAKE_BINARY_DIR}/ydb/library/yql/parser/pg_wrapper/verify.sh
+)
diff --git a/ydb/library/yql/parser/pg_wrapper/copy_src.py b/ydb/library/yql/parser/pg_wrapper/copy_src.py
new file mode 100644
index 0000000000..17b1b697bf
--- /dev/null
+++ b/ydb/library/yql/parser/pg_wrapper/copy_src.py
@@ -0,0 +1,322 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os
+from shutil import Error, copy2, rmtree
+import subprocess
+from collections import defaultdict
+
+all_vars = set()
+all_funcs_with_statics = defaultdict(list)
+thread_funcs = []
+define_for_yylval = None
+skip_func = False
+erase_func = False
+split_def = False
+def_type = None
+def_var = None
+ignore_func = False
+inside_func = None
+
+to_add_const = set([
+ "nullSemAction",
+ "sentinel",
+ "backslash_quote",
+ "Dummy_trace",
+ "escape_string_warning",
+ "standard_conforming_strings",
+ "gistBufferingOptValues",
+ "StdRdOptIndexCleanupValues",
+ "boolRelOpts",
+ "intRelOpts",
+ "realRelOpts",
+ "viewCheckOptValues",
+ "enumRelOpts",
+ "stringRelOpts"])
+
+def fix_line(line, all_lines, pos):
+ global inside_func
+ global define_for_yylval
+ if line.startswith("#define yylval"):
+ define_for_yylval=line[14:].strip()
+
+ if line.startswith("#define HAVE_EXECINFO_H 1"):
+ return "#undef HAVE_EXECINFO_H\n"
+
+ if line.startswith("#define HAVE_BACKTRACE_SYMBOLS 1"):
+ return "#undef HAVE_BACKTRACE_SYMBOLS\n"
+
+ if "static YYSTYPE yyval_default" in line or \
+ "static YYLTYPE yyloc_default" in line:
+ return line.replace("static","static __thread")
+
+ global skip_func
+ global erase_func
+ if line.startswith("build_guc_variables(void)"):
+ skip_func = True
+ return line
+
+ global ignore_func
+ if line.startswith("yyparse"):
+ ignore_func = True
+ return line
+
+ if inside_func is not None:
+ for v in all_funcs_with_statics[inside_func]:
+ if v in line and "static" in line:
+ return line.replace("static","static __thread")
+
+ if inside_func:
+ if line.startswith("}"):
+ inside_func=None
+
+ if skip_func:
+ if line.startswith("{"):
+ return None if erase_func else line
+ if not line.startswith("}"):
+ return None
+ skip_func=False
+ if erase_func:
+ erase_func=False
+ return None
+
+ if ignore_func:
+ if line.startswith("{"):
+ return line
+ if not line.startswith("}"):
+ return line
+ ignore_func=False
+
+ global split_def
+ global def_type
+ global def_var
+ if line.startswith("static struct xllist"):
+ split_def = True
+ def_type = "xllist"
+ def_var = "records";
+ return "typedef struct xllist\n";
+
+ if line.startswith("static struct RELCACHECALLBACK"):
+ split_def = True
+ def_type = "RELCACHECALLBACK"
+ def_var = "relcache_callback_list[MAX_RELCACHE_CALLBACKS]";
+ return "typedef struct RELCACHECALLBACK\n";
+
+ if line.startswith("static struct SYSCACHECALLBACK"):
+ split_def = True
+ def_type = "SYSCACHECALLBACK"
+ def_var = "syscache_callback_list[MAX_SYSCACHE_CALLBACKS]";
+ return "typedef struct SYSCACHECALLBACK\n";
+
+ if split_def and line.startswith("}"):
+ split_def = False;
+ return "} " + def_type + "; static __thread " + def_type + " " + def_var + ";\n"
+
+ if line.strip()=="static struct":
+ i = pos
+ while i < len(all_lines):
+ if all_lines[i].startswith("}"):
+ name = all_lines[i][1:].replace(";","").strip()
+ split_def = True
+ def_type = name + "_t"
+ def_var = name
+ return "typedef struct " + def_type + "\n";
+ i += 1
+
+ if "ConfigureNames" in line and line.strip().endswith("[] ="):
+ skip_func = True
+ erase_func = True
+ return None
+
+ if line.startswith("#") or line.startswith(" ") or line.startswith("\t"):
+ return line
+
+ for f in all_funcs_with_statics:
+ if f in line and ";" not in line:
+ inside_func = f
+ return line
+
+ if not "=" in line:
+ line2=line
+ if "//" in line2: line2 = line2[:line2.find("//")]
+ if "/*" in line2: line2 = line2[:line2.find("/*")]
+
+ if "(" in line2 or "{" in line2 or "}" in line2:
+ return line
+
+ if ";" not in line2:
+ return line
+
+ if line.startswith("YYSTYPE yylval;"):
+ line = line.replace("yylval", define_for_yylval)
+
+ norm = line.replace("\t"," ")
+
+ ret = None
+ found_v = None
+ for v in to_add_const:
+ if v in norm:
+ ret = line \
+ .replace("static","static const") \
+ .replace("relopt_enum_elt_def","const relopt_enum_elt_def")
+
+ if v == "backslash_quote":
+ ret = ret.replace("int","const int")
+
+ if v == "escape_string_warning" or v == "standard_conforming_strings":
+ ret = ret.replace("bool","const bool")
+
+ if v == "nullSemAction":
+ ret = ret.replace("JsonSemAction","const JsonSemAction")
+
+ return ret
+
+ for v in all_vars:
+ if " " + v + " " in norm or " " + v + ";" in norm or " " + v + "[" in norm or \
+ "*" + v + " " in norm or "*" + v + ";" in norm or "*" + v + "[" in norm:
+ found_v = v
+ if line.startswith("static"):
+ ret = "static __thread" + line[6:]
+ elif line.startswith("extern"):
+ ret = "extern __thread" + line[6:]
+ else:
+ ret = "__thread " + line
+ break
+
+ if ret is None:
+ return line
+
+ if "DLIST_STATIC_INIT" in ret:
+ # rewrite without {{}} inits
+ pos=ret.find("=");
+ ret=ret[:pos] + ";";
+ ret+="void "+found_v+"_init(void) { dlist_init(&" + found_v + "); }";
+ ret+="\n";
+ thread_funcs.append(found_v+"_init");
+
+ if "CurrentTransactionState" in ret or "mainrdata_last" in ret:
+ # rewrite with address of TLS var
+ pos=ret.find("=");
+ init_val=ret[pos+1:];
+ ret=ret[:pos] + ";";
+ ret+="void "+found_v+"_init(void) { "+found_v+"="+init_val +" };"
+ ret+="\n";
+ thread_funcs.append(found_v+"_init");
+
+ return ret
+
+def mycopy2(src, dst):
+ global define_for_yylval
+ define_for_yylval = None
+ if not (src.endswith(".h") or src.endswith(".c")):
+ return
+ with open(src,"r") as fsrc:
+ with open(dst,"w") as fdst:
+ all_lines = list(fsrc)
+ for pos,line in enumerate(all_lines):
+ line = fix_line(line,all_lines,pos)
+ if line is not None:
+ fdst.write(line)
+
+def copytree(src, dst):
+ names = os.listdir(src)
+ os.makedirs(dst)
+ errors = []
+ for name in names:
+ if name == "help_config.c": continue
+ srcname = os.path.join(src, name)
+ dstname = os.path.join(dst, name)
+ #print(srcname)
+ try:
+ if os.path.isdir(srcname):
+ copytree(srcname, dstname)
+ else:
+ mycopy2(srcname, dstname)
+ except OSError as why:
+ errors.append((srcname, dstname, str(why)))
+ except Error as err:
+ errors.extend(err.args[0])
+ if errors:
+ raise Error(errors)
+
+def make_sources_list():
+ with open("../../../../../contrib/libs/postgresql/ya.make","r") as fsrc:
+ with open("pg_sources.inc","w") as fdst:
+ fdst.write("SRCS(\n")
+ for line in fsrc:
+ if line.startswith(" src/"):
+ #print(line.strip())
+ if "/help_config.c" in line: continue
+ fdst.write(" postgresql/" + line.strip() + "\n")
+ fdst.write(")\n")
+
+def get_vars():
+ s=subprocess.check_output("objdump ../../../../../contrib/libs/postgresql/libpostgres.a -tw",shell=True).decode("utf-8")
+ for a in s.replace("\t"," ").split("\n"):
+ for b in a.split(" "):
+ sym=None
+ if b.startswith(".bss."): sym=b[5:]
+ elif b.startswith(".data."): sym=b[6:]
+ if sym is not None:
+ all_vars.add(sym.replace("yql_",""))
+
+ for x in to_add_const:
+ all_vars.remove(x)
+
+ all_vars.remove("BlockSig")
+ all_vars.remove("StartupBlockSig")
+ all_vars.remove("UnBlockSig")
+ all_vars.remove("on_proc_exit_index")
+ all_vars.remove("on_shmem_exit_index")
+ all_vars.remove("before_shmem_exit_index")
+
+ all_vars.add("yychar")
+ all_vars.add("yyin")
+ all_vars.add("yyout")
+ all_vars.add("yyleng")
+ all_vars.add("yynerrs")
+ all_vars.add("yytext")
+ all_vars.add("yy_flex_debug")
+ all_vars.add("yylineno")
+
+ all_vars.remove("UsedShmemSegID")
+ all_vars.remove("UsedShmemSegAddr")
+ all_vars.remove("local_my_wait_event_info")
+ all_vars.remove("my_wait_event_info")
+
+ with open("vars.txt","w") as f:
+ for a in sorted(all_vars):
+ print(a, file=f)
+
+ for a in all_vars:
+ l=a.split(".")
+ if len(l)==2:
+ all_funcs_with_statics[l[0]].append(l[1])
+
+def write_thread_inits():
+ with open("thread_inits.c","w") as f:
+ print("""#include "thread_inits.h"
+static __thread int pg_thread_init_flag;
+
+void pg_thread_init(void) {
+ if (pg_thread_init_flag) return;
+ pg_thread_init_flag=1;
+ setup_pg_thread_cleanup();
+ pg_timezone_initialize();
+""", file=f)
+
+ for a in sorted(thread_funcs):
+ print(" " + a + "();", file=f)
+ print("}", file=f)
+
+ with open("thread_inits.h","w") as f:
+ print("#pragma once", file=f)
+ print("extern void pg_thread_init();", file=f)
+
+if __name__ == "__main__":
+ get_vars()
+ make_sources_list()
+ if os.path.isdir("postgresql"):
+ rmtree("postgresql")
+ copytree("../../../../../contrib/libs/postgresql", "postgresql")
+ write_thread_inits()
diff --git a/ydb/library/yql/parser/pg_wrapper/copy_src.sh b/ydb/library/yql/parser/pg_wrapper/copy_src.sh
new file mode 100755
index 0000000000..4d8b3291f8
--- /dev/null
+++ b/ydb/library/yql/parser/pg_wrapper/copy_src.sh
@@ -0,0 +1,12 @@
+#!/usr/bin/env bash
+set -eux
+echo copy data files...
+cp ../../../../../contrib/libs/postgresql/src/include/catalog/*.dat postgresql/src/include/catalog/
+cp ../../../../../contrib/libs/postgresql/src/backend/catalog/*.sql postgresql/src/backend/catalog/
+
+rm -f ../../../../../contrib/libs/postgresql/libpostgres.a
+ya make ../../../../../contrib/libs/postgresql --checkout
+
+export LANG=ru_RU.UTF-8
+python3 copy_src.py
+for i in $(ls patches/); do (cd postgresql && patch -p1 < ../patches/$i); done
diff --git a/ydb/library/yql/parser/pg_wrapper/generate_kernels.py b/ydb/library/yql/parser/pg_wrapper/generate_kernels.py
new file mode 100644
index 0000000000..6173e695a4
--- /dev/null
+++ b/ydb/library/yql/parser/pg_wrapper/generate_kernels.py
@@ -0,0 +1,397 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+import os
+import json
+import zlib
+from collections import defaultdict
+
+SPLIT_FILES = 20
+
+def is_strict(oid_per_name, funcs, name):
+ found = None
+ for oid in oid_per_name[name]:
+ strict = funcs[oid][1]
+ if found is None:
+ found = strict
+ else:
+ assert found == strict
+ return "true" if found else "false"
+
+def is_result_fixed(oid_per_name, catalog_by_oid, name):
+ found = None
+ for oid in oid_per_name[name]:
+ fixed = catalog_by_oid[oid]["ret_type_fixed"]
+ if found is None:
+ found = fixed
+ else:
+ assert found == fixed
+ return "true" if found else "false"
+
+def get_fixed_args(oid_per_name, catalog_by_oid, name):
+ found = None
+ for oid in oid_per_name[name]:
+ fixed = [x["arg_type_fixed"] for x in catalog_by_oid[oid]["args"]]
+ if found is None:
+ found = fixed
+ else:
+ # e.g. range_constructor2
+ if found != fixed:
+ return None
+ return found
+
+def main():
+ pg_sources = []
+ with open("pg_sources.inc") as f:
+ for line in f:
+ pg_sources.append(line.rstrip())
+ with open("../../../../../yql/tools/pg_catalog_dump/dump.json") as f:
+ catalog = json.load(f)
+ catalog_by_oid = {}
+ catalog_funcs = set()
+ for proc in catalog["proc"]:
+ catalog_by_oid[proc["oid"]] = proc
+ catalog_funcs.add(proc["src"])
+ catalog_aggs_by_id = {}
+ for agg in catalog["aggregation"]:
+ if not agg["combine_func_id"]:
+ continue
+ catalog_aggs_by_id[agg["internal_id"]] = agg
+ assert len(agg["args"]) <= 2
+
+ funcs={}
+ with open("postgresql/src/backend/utils/fmgrtab.c") as f:
+ parse=False
+ for line in f:
+ if "fmgr_builtins[]" in line:
+ parse=True
+ continue
+ if not parse:
+ continue
+ if line.startswith("}"):
+ parse=False
+ continue
+ c=line.strip()[1:-2].split(", ")
+ oid=int(c[0])
+ nargs=int(c[1])
+ strict=c[2].strip()=="true"
+ retset=c[3].strip()=="true"
+ name=c[4].strip().strip('"')
+ func=c[5].strip()
+ if retset: continue
+ if name!=func:
+ print(name,func)
+ continue
+ if not oid in catalog_by_oid:
+ print("skipped by catalog: ",name)
+ continue
+ funcs[oid] = (nargs, strict, name)
+ print("funcs: ", len(funcs))
+ func_names=set(x[2] for x in funcs.values())
+ print("unique names: ", len(func_names))
+ print("aggs: ", len(catalog_aggs_by_id))
+ oid_per_name={}
+ all_found_funcs=set()
+ for x in funcs:
+ name = funcs[x][2]
+ if not name in oid_per_name:
+ oid_per_name[name]=[]
+ oid_per_name[name].append(x)
+ symbols={}
+ for i in range(len(pg_sources)):
+ line = pg_sources[i]
+ if not line.endswith(".c"):
+ continue
+ cfile = line.strip()
+ found_funcs = set()
+ #print(cfile)
+ with open(cfile) as f:
+ for srcline in f:
+ pos=srcline.find("(PG_FUNCTION_ARGS)")
+ if pos!=-1:
+ names=[srcline[0:pos].strip()]
+ elif srcline.startswith("CMPFUNC("):
+ pos=srcline.find(",")
+ names=[srcline[8:pos]]
+ elif srcline.startswith("TSVECTORCMPFUNC("):
+ pos=srcline.find(",")
+ names=["tsvector_"+srcline[16:pos]]
+ elif srcline.startswith("PSEUDOTYPE_DUMMY_IO_FUNCS("):
+ pos=srcline.find(")")
+ names=[srcline[26:pos]+"_in", srcline[26:pos]+"_out"]
+ elif srcline.startswith("PSEUDOTYPE_DUMMY_INPUT_FUNC(") and "\\" not in srcline:
+ pos=srcline.find(")")
+ names=[srcline[28:pos]+"_in"]
+ elif srcline.startswith("PSEUDOTYPE_DUMMY_BINARY_IO_FUNCS"):
+ pos=srcline.find(")")
+ names=[srcline[33:pos]+"_send", srcline[33:pos]+"_recv"]
+ elif srcline.startswith("PSEUDOTYPE_DUMMY_RECEIVE_FUNC(") and "\\" not in srcline:
+ pos=srcline.find(")")
+ names=[srcline[30:pos]+"_recv"]
+ else:
+ continue
+ for name in names:
+ if name in func_names:
+ found_funcs.add(name)
+ all_found_funcs.add(name)
+ if not found_funcs:
+ continue
+ print(cfile, len(found_funcs))
+ symbols[cfile] = found_funcs
+ split_symbols = []
+ split_all_found_funcs = []
+ for i in range(SPLIT_FILES):
+ curr_symbols = {}
+ curr_all_found_funcs = set()
+ for cfile in symbols:
+ if zlib.crc32(cfile.encode("utf8")) % SPLIT_FILES != i: continue
+ curr_symbols[cfile] = symbols[cfile]
+ curr_all_found_funcs.update(symbols[cfile])
+
+ split_symbols.append(curr_symbols)
+ split_all_found_funcs.append(curr_all_found_funcs)
+ # check if all functions are available
+ split_for_agg = {}
+ for agg in catalog_aggs_by_id.values():
+ oids = set()
+ oids.add(agg["trans_func_id"])
+ if agg["serialize_func_id"]:
+ assert catalog_by_oid[agg["serialize_func_id"]]["strict"]
+ oids.add(agg["serialize_func_id"])
+ if agg["deserialize_func_id"]:
+ assert catalog_by_oid[agg["deserialize_func_id"]]["strict"]
+ oids.add(agg["deserialize_func_id"])
+ if agg["final_func_id"]:
+ oids.add(agg["final_func_id"])
+ oids.add(agg["combine_func_id"])
+ names = [catalog_by_oid[oid]["src"] for oid in oids]
+
+ for i in range(SPLIT_FILES):
+ with open("pg_bc."+str(i)+".inc", "w") as bc:
+ bc.write("LLVM_BC(\n" + \
+ "\n".join((" " + x) for x in sorted(split_symbols[i].keys())) + \
+ "\n pg_kernels."+str(i)+".cpp\n" + \
+ "\n NAME PgFuncs" + str(i) + "\n" + \
+ "\n SYMBOLS\n" + \
+ "\n".join((" arrow_" + x) for x in sorted(split_all_found_funcs[i])) + \
+ "\n)\n")
+ for i in range(SPLIT_FILES):
+ with open("pg_proc_policies." + str(i) + ".inc", "w") as p:
+ for x in sorted(split_all_found_funcs[i]):
+ fixed_args = get_fixed_args(oid_per_name, catalog_by_oid, x)
+ if fixed_args is not None:
+ p.write("struct TArgs_NAME_Policy {\n".replace("NAME", x))
+ p.write(" static constexpr bool VarArgs = false;\n")
+ p.write(" static constexpr std::array<bool, N> IsFixedArg = {V};\n" \
+ .replace("N", str(len(fixed_args))) \
+ .replace("V", ",".join("true" if x else "false" for x in fixed_args)))
+ p.write("};\n")
+ else:
+ print("polymorphic args:", x)
+ for i in range(SPLIT_FILES):
+ with open("pg_kernels." + str(i) + ".inc", "w") as k:
+ for x in sorted(split_all_found_funcs[i]):
+ fixed_args = get_fixed_args(oid_per_name, catalog_by_oid, x)
+ k.write(
+ "TExecFunc arrow_NAME() { return TGenericExec<TPgDirectFunc<&NAME>, STRICT, IS_RESULT_FIXED, POLICY>({}); }\n" \
+ .replace("NAME", x) \
+ .replace("STRICT", is_strict(oid_per_name, funcs, x)) \
+ .replace("IS_RESULT_FIXED", is_result_fixed(oid_per_name, catalog_by_oid, x))
+ .replace("POLICY", "TArgs_" + x + "_Policy" if fixed_args is not None else "TDefaultArgsPolicy"))
+ for i in range(SPLIT_FILES):
+ with open("pg_kernels.slow." + str(i) + ".inc", "w") as k:
+ for x in sorted(split_all_found_funcs[i]):
+ k.write(
+ "TExecFunc arrow_NAME() { return MakeIndirectExec<STRICT, IS_RESULT_FIXED>(&NAME); }\n" \
+ .replace("NAME", x) \
+ .replace("STRICT", is_strict(oid_per_name, funcs, x)) \
+ .replace("IS_RESULT_FIXED", is_result_fixed(oid_per_name, catalog_by_oid, x)))
+ with open("pg_kernels_fwd.inc", "w") as k:
+ k.write(\
+ "\n".join("extern TExecFunc arrow_NAME();".replace("NAME", x) for x in sorted(all_found_funcs)) + \
+ "\n")
+ for i in range(SPLIT_FILES):
+ with open("pg_kernels_register." + str(i) + ".inc", "w") as r:
+ for name in oid_per_name:
+ if not name in split_all_found_funcs[i]: continue
+ for oid in sorted(oid_per_name[name]):
+ r.write("RegisterExec(" + str(oid) + ", arrow_" + name + "());\n")
+ for slow in [False, True]:
+ with open("pg_aggs" + (".slow" if slow else "") + ".inc","w") as p:
+ for agg_id in sorted(catalog_aggs_by_id.keys()):
+ agg = catalog_aggs_by_id[agg_id]
+ trans_func = catalog_by_oid[agg["trans_func_id"]]["src"]
+ trans_fixed_args = None if slow else get_fixed_args(oid_per_name, catalog_by_oid, trans_func)
+ combine_func = catalog_by_oid[agg["combine_func_id"]]["src"]
+ combine_fixed_args = None if slow else get_fixed_args(oid_per_name, catalog_by_oid, combine_func)
+ serialize_func = ""
+ serialize_fixed_args = None
+ if agg["serialize_func_id"]:
+ serialize_func = catalog_by_oid[agg["serialize_func_id"]]["src"]
+ serialize_fixed_args = None if slow else get_fixed_args(oid_per_name, catalog_by_oid, serialize_func)
+ deserialize_func = ""
+ deserialize_fixed_args = None
+ if agg["deserialize_func_id"]:
+ deserialize_func = catalog_by_oid[agg["deserialize_func_id"]]["src"]
+ deserialize_fixed_args = None if slow else get_fixed_args(oid_per_name, catalog_by_oid, deserialize_func)
+ final_func = ""
+ final_fixed_args = None
+ if agg["final_func_id"]:
+ final_func = catalog_by_oid[agg["final_func_id"]]["src"]
+ final_fixed_args = None if slow else get_fixed_args(oid_per_name, catalog_by_oid, final_func)
+
+ p.write("auto MakePgAgg_" + agg["name"] + "_" + str(agg_id) + "() {\n"
+ " return TGenericAgg<\n \
+ TRANS_FUNC, IS_TRANS_STRICT, TRANS_ARGS_POLICY,\n \
+ COMBINE_FUNC, IS_COMBINE_STRICT, COMBINE_ARGS_POLICY,\n \
+ HAS_SERIALIZE_FUNC, SERIALIZE_FUNC1, SERIALIZE_ARGS_POLICY1,\n \
+ HAS_DESERIALIZE_FUNC, DESERIALIZE_FUNC, DESERIALIZE_ARGS_POLICY,\n \
+ HAS_FINAL_FUNC, FINAL_FUNC, IS_FINAL_STRICT, FINAL_ARGS_POLICY,\n \
+ TRANS_TYPE_FIXED, SERIALIZED_TYPE_FIXED, FINAL_TYPE_FIXED, HAS_INIT_VALUE\n \
+ >(TRANS_OBJ, COMBINE_OBJ, SERIALIZE1_OBJ, DESERIALIZE_OBJ, FINAL_OBJ);\n" \
+ .replace("TRANS_FUNC", "TPgIndirectFunc" if slow else "TPgDirectFunc<&" + trans_func + ">") \
+ .replace("IS_TRANS_STRICT", "true" if catalog_by_oid[agg["trans_func_id"]]["strict"] else "false") \
+ .replace("TRANS_ARGS_POLICY", "TArgs_" + trans_func + "_Policy" if trans_fixed_args is not None else "TDefaultArgsPolicy") \
+ .replace("COMBINE_FUNC", "TPgIndirectFunc" if slow else "TPgDirectFunc<&" + combine_func + ">") \
+ .replace("IS_COMBINE_STRICT", "true" if catalog_by_oid[agg["combine_func_id"]]["strict"] else "false") \
+ .replace("COMBINE_ARGS_POLICY", "TArgs_" + combine_func + "_Policy" if combine_fixed_args is not None else "TDefaultArgsPolicy") \
+ .replace("HAS_SERIALIZE_FUNC", "true" if serialize_func else "false") \
+ .replace("SERIALIZE_FUNC1", "TPgDirectFunc<&" + serialize_func + ">" if serialize_func and not slow else "TPgIndirectFunc") \
+ .replace("SERIALIZE_ARGS_POLICY1", "TArgs_" + serialize_func + "_Policy" if serialize_fixed_args is not None else "TDefaultArgsPolicy") \
+ .replace("HAS_DESERIALIZE_FUNC", "true" if deserialize_func else "false") \
+ .replace("DESERIALIZE_FUNC", "TPgDirectFunc<&" + deserialize_func + ">" if deserialize_func and not slow else "TPgIndirectFunc") \
+ .replace("DESERIALIZE_ARGS_POLICY", "TArgs_" + deserialize_func + "_Policy" if deserialize_fixed_args is not None else "TDefaultArgsPolicy") \
+ .replace("HAS_FINAL_FUNC", "true" if final_func else "false") \
+ .replace("FINAL_FUNC", "TPgDirectFunc<&" + final_func + ">" if final_func and not slow else "TPgIndirectFunc") \
+ .replace("IS_FINAL_STRICT", "true" if final_func and catalog_by_oid[agg["final_func_id"]]["strict"] else "false") \
+ .replace("FINAL_ARGS_POLICY", "TArgs_" + final_func + "_Policy" if final_fixed_args is not None else "TDefaultArgsPolicy") \
+ .replace("TRANS_TYPE_FIXED", "true" if agg["trans_type_fixed"] else "false") \
+ .replace("SERIALIZED_TYPE_FIXED", "true" if agg["serialized_type_fixed"] else "false") \
+ .replace("FINAL_TYPE_FIXED", "true" if agg["ret_type_fixed"] else "false") \
+ .replace("HAS_INIT_VALUE", "true" if agg["has_init_value"] else "false") \
+ .replace("TRANS_OBJ", "&" + trans_func if slow else "{}") \
+ .replace("COMBINE_OBJ", "&" + combine_func if slow else "{}") \
+ .replace("SERIALIZE1_OBJ", ("&" + serialize_func if slow else "{}") if serialize_func else "nullptr") \
+ .replace("DESERIALIZE_OBJ", ("&" +deserialize_func if slow else "{}") if deserialize_func else "nullptr") \
+ .replace("FINAL_OBJ", ("&" + final_func if slow else "{}") if final_func else "nullptr") \
+ )
+ p.write("}\n")
+
+ agg_names = defaultdict(list)
+ with open("pg_aggs_register.inc","w") as p:
+ for agg_id in sorted(catalog_aggs_by_id.keys()):
+ agg_names[catalog_aggs_by_id[agg_id]["name"]].append(agg_id)
+ for name in agg_names:
+ p.write(
+ ("class TPgAggFactory_NAME: public IBlockAggregatorFactory {\n" \
+ "std::unique_ptr<IPreparedBlockAggregator<IBlockAggregatorCombineAll>> PrepareCombineAll(\n" \
+ " TTupleType* tupleType,\n" \
+ " std::optional<ui32> filterColumn,\n" \
+ " const std::vector<ui32>& argsColumns,\n" \
+ " const TTypeEnvironment& env) const final {\n" \
+ " const auto& aggDesc = ResolveAggregation(\"NAME\", tupleType, argsColumns, nullptr);\n" \
+ " switch (aggDesc.InternalId) {\n" +
+ "".join([" case " + str(agg_id) + ": return MakePgAgg_NAME_" + str(agg_id) + "().PrepareCombineAll(filterColumn, argsColumns, aggDesc);\n" for agg_id in agg_names[name]]) +
+ " default: throw yexception() << \"Unsupported agg id: \" << aggDesc.InternalId;\n" \
+ " }\n" \
+ "}\n" \
+ "\n" \
+ "std::unique_ptr<IPreparedBlockAggregator<IBlockAggregatorCombineKeys>> PrepareCombineKeys(\n" \
+ " TTupleType* tupleType,\n" \
+ " const std::vector<ui32>& argsColumns,\n" \
+ " const TTypeEnvironment& env) const final {\n" \
+ " const auto& aggDesc = ResolveAggregation(\"NAME\", tupleType, argsColumns, nullptr);\n"
+ " switch (aggDesc.InternalId) {\n" +
+ "".join([" case " + str(agg_id) + ": return MakePgAgg_NAME_" + str(agg_id) + "().PrepareCombineKeys(argsColumns, aggDesc);\n" for agg_id in agg_names[name]]) +
+ " default: throw yexception() << \"Unsupported agg id: \" << aggDesc.InternalId;\n" \
+ " }\n" \
+ "}\n" \
+ "\n" \
+ "std::unique_ptr<IPreparedBlockAggregator<IBlockAggregatorFinalizeKeys>> PrepareFinalizeKeys(\n" \
+ " TTupleType* tupleType,\n" \
+ " const std::vector<ui32>& argsColumns,\n" \
+ " const TTypeEnvironment& env,\n" \
+ " TType* returnType) const final {\n" \
+ " const auto& aggDesc = ResolveAggregation(\"NAME\", tupleType, argsColumns, returnType);\n"
+ " switch (aggDesc.InternalId) {\n" +
+ "".join([" case " + str(agg_id) + ": return MakePgAgg_NAME_" + str(agg_id) + "().PrepareFinalizeKeys(argsColumns.front(), aggDesc);\n" for agg_id in agg_names[name]]) +
+ " default: throw yexception() << \"Unsupported agg id: \" << aggDesc.InternalId;\n" \
+ " }\n" \
+ "}\n" \
+ "};\n").replace("NAME", name))
+ for name in agg_names:
+ p.write('registry.emplace("pg_' + name + '", std::make_unique<TPgAggFactory_' + name + '>());\n')
+
+ for i in range(SPLIT_FILES):
+ with open("pg_kernels." + str(i) + ".cpp","w") as f:
+ f.write(
+ 'extern "C" {\n'
+ '#include "postgres.h"\n'
+ '#include "fmgr.h"\n'
+ '#include "postgresql/src/backend/utils/fmgrprotos.h"\n'
+ '#undef Abs\n'
+ '#undef Min\n'
+ '#undef Max\n'
+ '#undef TypeName\n'
+ '#undef SortBy\n'
+ '#undef Sort\n'
+ '#undef Unique\n'
+ '#undef LOG\n'
+ '#undef INFO\n'
+ '#undef NOTICE\n'
+ '#undef WARNING\n'
+ '#undef ERROR\n'
+ '#undef FATAL\n'
+ '#undef PANIC\n'
+ '#undef open\n'
+ '#undef fopen\n'
+ '#undef bind\n'
+ '#undef locale_t\n'
+ '}\n'
+ '\n'
+ '#include "arrow.h"\n'
+ '\n'
+ 'namespace NYql {\n'
+ '\n'
+ 'extern "C" {\n'
+ '\n'
+ '#ifdef USE_SLOW_PG_KERNELS\n'
+ '#include "pg_kernels.slow.INDEX.inc"\n'
+ '#else\n'
+ '#include "pg_proc_policies.INDEX.inc"\n'
+ '#include "pg_kernels.INDEX.inc"\n'
+ '#endif\n'
+ '\n'
+ '}\n'
+ '\n'
+ '}\n'.replace("INDEX",str(i))
+ )
+
+ with open("pg_kernels_register.all.inc","w") as f:
+ for i in range(SPLIT_FILES):
+ f.write('#include "pg_kernels_register.INDEX.inc"\n'.replace("INDEX", str(i)))
+
+ with open("pg_proc_policies.all.inc","w") as f:
+ for i in range(SPLIT_FILES):
+ f.write('#include "pg_proc_policies.INDEX.inc"\n'.replace("INDEX", str(i)))
+
+ with open("pg_kernel_sources.inc","w") as f:
+ f.write("SRCS(\n")
+ for i in range(SPLIT_FILES):
+ f.write(' pg_kernels.INDEX.cpp\n'.replace("INDEX", str(i)))
+ f.write(")\n")
+
+ with open("pg_bc.all.inc","w") as f:
+ for i in range(SPLIT_FILES):
+ f.write('INCLUDE(pg_bc.INDEX.inc)\n'.replace("INDEX", str(i)))
+
+ print("found funcs: ",len(all_found_funcs))
+ print("agg names: ",len(agg_names))
+ print("agg funcs: ",len(catalog_aggs_by_id))
+ missing=func_names.difference(all_found_funcs)
+ if missing:
+ print("missing funcs: ",len(missing))
+ print(missing)
+
+if __name__ == "__main__":
+ main()
diff --git a/ydb/library/yql/parser/pg_wrapper/generate_patch.sh b/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
new file mode 100755
index 0000000000..b4512bc7d8
--- /dev/null
+++ b/ydb/library/yql/parser/pg_wrapper/generate_patch.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+# Run on clean reposiory (changes should be commited)
+
+set -eEu
+trap 'echo Script failed!' ERR
+
+rm -rf postgresql.patched
+cp -a postgresql postgresql.patched
+./copy_src.sh > /dev/null 2>&1
+diff -ruN postgresql postgresql.patched || true
+rm -rf postgresql.patched
diff --git a/ydb/library/yql/parser/pg_wrapper/vars.txt b/ydb/library/yql/parser/pg_wrapper/vars.txt
new file mode 100644
index 0000000000..a9ca5a5c3a
--- /dev/null
+++ b/ydb/library/yql/parser/pg_wrapper/vars.txt
@@ -0,0 +1,1547 @@
+ATExecSetRelOptions.validnsps
+AbortStartTime
+ActivePortal
+ActiveSnapshot
+AnonymousShmem
+AnonymousShmemSize
+Ap
+ApplyContext
+ApplyMessageContext
+ArchiveRecoveryRequested
+Array_nulls
+AttoptCacheHash
+AuthenticatedUserId
+AuthenticatedUserIsSuperuser
+AuthenticationTimeout
+AutoVacPID
+AutoVacuumShmem
+AutovacMemCxt
+AutovacuumLauncherPid
+AuxProcessResourceOwner
+AuxiliaryProcs
+BackendActivityBuffer
+BackendActivityBufferSize
+BackendAppnameBuffer
+BackendClientHostnameBuffer
+BackendList
+BackendSslStatusBuffer
+BackendStatusArray
+BackendWritebackContext
+BackgroundWorkerData
+BackgroundWorkerList
+BgBufferSync.next_passes
+BgBufferSync.next_to_clean
+BgBufferSync.prev_strategy_buf_id
+BgBufferSync.prev_strategy_passes
+BgBufferSync.saved_info_valid
+BgBufferSync.smoothed_alloc
+BgBufferSync.smoothed_density
+BgWriterDelay
+BgWriterPID
+BgWriterStats
+BufferBlocks
+BufferDescriptors
+BufferIOCVArray
+CFuncHash
+CacheHdr
+CacheInitialized
+CacheMemoryContext
+CatalogSnapshot
+CatalogSnapshotData
+CheckClientConnectionPending
+CheckPointCompletionTarget
+CheckPointDistanceEstimate
+CheckPointSegments
+CheckPointTimeout
+CheckPointWarning
+CheckXidAlive
+CheckpointStats
+CheckpointWriteDelay.absorb_counter
+CheckpointerPID
+CheckpointerShmem
+CkptBufferIds
+ClientAuthInProgress
+ClientAuthentication_hook
+ClientConnectionLost
+ClientEncoding
+CommitDelay
+CommitSiblings
+CommitTsCtlData
+ComputeXidHorizonsResultLastXmin
+ConfigFileLineno
+ConfigFileName
+ConfigReloadPending
+ConfigureNamesBool
+ConfigureNamesEnum
+ConfigureNamesInt
+ConfigureNamesReal
+ConfigureNamesString
+ControlFile
+ConvProcList
+CreateNewPortal.unnamed_portal_count
+CritSectionCount
+CurTransactionContext
+CurTransactionResourceOwner
+CurrentDynaHashCxt
+CurrentExtensionObject
+CurrentLCTimeValid
+CurrentLocaleConvValid
+CurrentMemoryContext
+CurrentResourceOwner
+CurrentSession
+CurrentSnapshot
+CurrentSnapshotData
+CurrentTransactionState
+CurrentUserId
+DCHCache
+DCHCounter
+DataDir
+DatabaseEncoding
+DatabaseList
+DatabaseListCxt
+DatabasePath
+DateOrder
+DateStyle
+Db_user_namespace
+DeadlockTimeout
+Debug_pretty_print
+Debug_print_parse
+Debug_print_plan
+Debug_print_rewritten
+DefaultXactDeferrable
+DefaultXactIsoLevel
+DefaultXactReadOnly
+DefineRelation.validnsps
+DoingCommandRead
+Dynamic_library_path
+EOXactTupleDescArray
+EOXactTupleDescArrayLen
+EchoQuery
+EnableHotStandby
+EnableSSL
+EndRecPtr
+ErrorContext
+EventTriggerCache
+EventTriggerCacheContext
+EventTriggerCacheState
+ExecutorCheckPerms_hook
+ExecutorEnd_hook
+ExecutorFinish_hook
+ExecutorRun_hook
+ExecutorStart_hook
+ExitOnAnyError
+ExplainOneQuery_hook
+ExportInProgress
+FastPathLocalUseCount
+FastPathStrongRelationLocks
+FatalError
+FeBeWaitSet
+FinishedSerializableTransactions
+FirstCallSinceLastCheckpoint.ckpt_done
+FirstSnapshotSet
+FirstXactSnapshot
+FrontendProtocol
+GUCNestLevel
+GUC_check_errcode_value
+GUC_check_errdetail_string
+GUC_check_errhint_string
+GUC_check_errmsg_string
+GUC_flex_fatal_errmsg
+GUC_flex_fatal_jmp
+GUC_yy_flex_debug
+GUC_yyin
+GUC_yyleng
+GUC_yylineno
+GUC_yyout
+GUC_yytext
+Geqo_effort
+Geqo_generations
+Geqo_pool_size
+Geqo_seed
+Geqo_selection_bias
+GetBackgroundWorkerTypeByPid.result
+GetConfigOption.buffer
+GetConfigOptionResetString.buffer
+GetConflictingVirtualXIDs.vxids
+GetCurrentTimeUsec.cache_fsec
+GetCurrentTimeUsec.cache_timezone
+GetCurrentTimeUsec.cache_tm
+GetCurrentTimeUsec.cache_ts
+GetCurrentTimeUsec.cache_tz
+GetLocalBufferStorage.LocalBufferContext
+GetLocalBufferStorage.cur_block
+GetLocalBufferStorage.next_buf_in_block
+GetLocalBufferStorage.num_bufs_in_block
+GetLocalBufferStorage.total_bufs_allocated
+GetLockConflicts.vxids
+GetPgClassDescriptor.pgclassdesc
+GetPgIndexDescriptor.pgindexdesc
+GetRunningTransactionData.CurrentRunningXactsData
+GetSQLCurrentDate.cache_date
+GetSQLCurrentDate.cache_mday
+GetSQLCurrentDate.cache_mon
+GetSQLCurrentDate.cache_year
+GetStableLatestTransactionId.lxid
+GetStableLatestTransactionId.stablexid
+GetXLogBuffer.cachedPage
+GetXLogBuffer.cachedPos
+GinFuzzySearchLimit
+GlobalVisCatalogRels
+GlobalVisDataRels
+GlobalVisSharedRels
+GlobalVisTempRels
+HandleParallelMessages.hpm_context
+HaveCrashedWorker
+HbaFileName
+HistoricSnapshot
+ILHead
+IdentFileName
+IdleInTransactionSessionTimeout
+IdleInTransactionSessionTimeoutPending
+IdleSessionTimeout
+IdleSessionTimeoutPending
+IgnoreSystemIndexes
+InArchiveRecovery
+InProgressBuf
+InRecovery
+InRedo
+InitializingParallelWorker
+InterruptHoldoffCount
+InterruptPending
+IntervalStyle
+IsBackgroundWorker
+IsBinaryUpgrade
+IsForInput
+IsPostmasterEnvironment
+IsUnderPostmaster
+KnownAssignedXids
+KnownAssignedXidsValid
+LWLockTrancheNames
+LWLockTrancheNamesAllocated
+LastRec
+LatchWaitSet
+ListenAddresses
+ListenSocket
+LoadedSSL
+LocalBufHash
+LocalBufferBlockPointers
+LocalBufferDescriptors
+LocalHotStandbyActive
+LocalLatchData
+LocalPredicateLockHash
+LocalPromoteIsTriggered
+LocalRecoveryInProgress
+LocalRefCount
+LocalXLogInsertAllowed
+LockMethodLocalHash
+LockMethodLockHash
+LockMethodProcLockHash
+LockTimeout
+LogMemoryContextPending
+LogRepWorkerWalRcvConn
+Log_RotationAge
+Log_RotationSize
+Log_autovacuum_min_duration
+Log_connections
+Log_destination
+Log_destination_string
+Log_directory
+Log_disconnections
+Log_error_verbosity
+Log_file_mode
+Log_filename
+Log_line_prefix
+Log_truncate_on_rotation
+Logging_collector
+LogicalRepCtx
+LogicalRepPartMap
+LogicalRepPartMapContext
+LogicalRepRelMap
+LogicalRepRelMapContext
+LogicalStreamingContext
+LogstreamResult
+LogwrtResult
+MXactCache
+MXactCacheMembers
+MXactContext
+MainLWLockArray
+MaxBackends
+MaxConnections
+MdCxt
+MergeAttributes.bogus_marker
+MessageContext
+MessageEncoding
+Mode
+MultiXactMemberCtlData
+MultiXactOffsetCtlData
+MultiXactState
+MyAuxProcType
+MyBEEntry
+MyBackendId
+MyBackendType
+MyBgworkerEntry
+MyCancelKey
+MyDatabaseId
+MyDatabaseTableSpace
+MyFixedParallelState
+MyLatch
+MyLockNo
+MyLockedGxact
+MyLogicalRepWorker
+MyPMChildSlot
+MyProc
+MyProcPid
+MyProcPort
+MyProcSignalSlot
+MyReplicationSlot
+MySerializableXact
+MyStartTime
+MyStartTimestamp
+MySubscription
+MySubscriptionValid
+MyTriggerDepth
+MyWalSnd
+MyWorkerInfo
+MyXactDidWrite
+MyXactFlags
+NBuffers
+NLocBuffer
+NUMCache
+NUMCounter
+NamedLWLockTrancheArray
+NamedLWLockTrancheRequestArray
+NamedLWLockTrancheRequests
+NamedLWLockTrancheRequestsAllocated
+NextEOXactTupleDescNum
+NextRecordTypmod
+None_Receiver
+NotifyCtlData
+Nulls
+OldCommittedSxact
+OldestActiveSnapshot
+OldestMemberMXactId
+OldestVisibleMXactId
+OpClassCache
+OprCacheHash
+OprProofCacheHash
+OuterUserId
+OutputFileName
+PGLC_localeconv.CurrentLocaleConv
+PGLC_localeconv.CurrentLocaleConvAllocated
+PG_exception_stack
+PMSignalState
+PageSetChecksumCopy.pageCopy
+ParallelCurrentXids
+ParallelLeaderBackendId
+ParallelLeaderPid
+ParallelMessagePending
+ParallelWorkerNumber
+Password_encryption
+PgArch
+PgArchCanRestart.last_pgarch_start_time
+PgArchPID
+PgReloadTime
+PgStartTime
+PgStatPID
+PinCountWaitBuf
+PortalContext
+PortalHashTable
+PostAuthDelay
+PostPortNumber
+PostmasterContext
+PostmasterPid
+PqCommBusy
+PqCommMethods
+PqCommReadingMsg
+PqRecvBuffer
+PqRecvLength
+PqRecvPointer
+PqSendBuffer
+PqSendBufferSize
+PqSendPointer
+PqSendStart
+PreAuthDelay
+PredXact
+PredicateLockHash
+PredicateLockTargetHash
+PreparedXactProcs
+PrevCheckPointDistance
+PrimaryConnInfo
+PrimarySlotName
+PrivateRefCountArray
+PrivateRefCountClock
+PrivateRefCountHash
+PrivateRefCountOverflowed
+ProcDiePending
+ProcGlobal
+ProcLastRecPtr
+ProcSignal
+ProcSignalBarrierPending
+ProcStructLock
+ProcessStandbyReplyMessage.fullyAppliedLastTime
+ProcessSyncRequests.sync_in_progress
+ProcessUtilitySlow.validnsps
+ProcessUtility_hook
+PromoteTriggerFile
+QueryCancelHoldoffCount
+QueryCancelPending
+RWConflictPool
+ReachedNormalRunning
+ReadControlFile.wal_segsz_str
+ReadRecPtr
+ReceiveSharedInvalidMessages.messages
+ReceiveSharedInvalidMessages.nextmsg
+ReceiveSharedInvalidMessages.nummsgs
+RecentXmin
+RecordCacheArray
+RecordCacheArrayLen
+RecordCacheHash
+RecordIdentifierArray
+RecoveryConflictPending
+RecoveryConflictReason
+RecoveryConflictRetryable
+RecoveryLockLists
+RedoRecPtr
+RedoStartLSN
+RegisterBackgroundWorker.numworkers
+RegisteredSnapshots
+Reinit
+RelationIdCache
+RelfilenodeMapHash
+ReplicationSlotCtl
+ReservedBackends
+ReservedRefCountEntry
+ResourceRelease_callbacks
+SLRUStats
+SMgrRelationHash
+SPI_processed
+SPI_result
+SPI_result_code_string.buf
+SPI_tuptable
+SSLCipherSuites
+SSLECDHCurve
+SSLPreferServerCiphers
+SSL_context
+SSL_initialized
+SSLerrmessage.errbuf
+Save_r
+Save_t
+SavedResourceOwnerDuringExport
+SavedSerializableXact
+ScratchPartitionLock
+ScratchTargetTagHash
+SecondarySnapshot
+SecondarySnapshotData
+SecurityRestrictionContext
+SendStop
+SerialSlruCtlData
+SerializableXidHash
+SessionReplicationRole
+SessionUserId
+SessionUserIsSuperuser
+SetRoleIsActive
+SharedBufHash
+SharedFileSetInit.counter
+SharedFileSetInit.registered_cleanup
+SharedInvalidMessageCounter
+SharedInvalidMessagesArray
+ShmemBase
+ShmemEnd
+ShmemIndex
+ShmemLock
+ShmemSegHdr
+ShmemVariableCache
+Shutdown
+ShutdownRequestPending
+SizeVfdCache
+SnapshotAnyData
+SnapshotSelfData
+StandbyMode
+StandbyModeRequested
+StartWorkerNeeded
+StartupPID
+StartupStatus
+StatementTimeout
+StoreAttrDefault.nulls
+StrategyControl
+StrongLockInProgress
+SubTransCtlData
+SubXact_callbacks
+SyncRepConfig
+SyncRepStandbyNames
+SyncRepWaitMode
+SysAtt
+SysCache
+SysCacheRelationOid
+SysCacheRelationOidSize
+SysCacheSupportingRelOid
+SysCacheSupportingRelOidSize
+SysLoggerPID
+TSConfigCacheHash
+TSCurrentConfig
+TSCurrentConfigCache
+TSDictionaryCacheHash
+TSParserCacheHash
+TableSpaceCacheHash
+ThisTimeLineID
+ToClientConvProc
+ToServerConvProc
+TopMemoryContext
+TopPortalContext
+TopTransactionContext
+TopTransactionResourceOwner
+TopTransactionStateData
+Trace_notify
+TransactionAbortContext
+TransactionIdIsInProgress.other_xids
+TransactionIdIsInProgress.xids
+TransactionXmin
+Transform_null_equals
+TwoPhaseGetGXact.cached_gxact
+TwoPhaseGetGXact.cached_xid
+TwoPhaseState
+Typ
+TypeCacheHash
+Unix_socket_directories
+Unix_socket_group
+Unix_socket_permissions
+UsableBytesInSegment
+UseSemiNewlineNewline
+Utf8ToServerConvProc
+VacuumActiveNWorkers
+VacuumCostActive
+VacuumCostBalance
+VacuumCostBalanceLocal
+VacuumCostDelay
+VacuumCostLimit
+VacuumCostPageDirty
+VacuumCostPageHit
+VacuumCostPageMiss
+VacuumPageDirty
+VacuumPageHit
+VacuumPageMiss
+VacuumSharedCostBalance
+VfdCache
+VoidString
+WALInsertLockAcquire.lockToTry
+WALInsertLocks
+WaitForWALToBecomeAvailable.last_fail_time
+WalRcv
+WalReceiverFunctions
+WalReceiverPID
+WalReceiverRequested
+WalSndCaughtUp
+WalSndCtl
+WalSndUpdateProgress.sendTime
+WalSndWaitForWal.RecentFlushPtr
+WalStats
+WalWriterDelay
+WalWriterFlushAfter
+WalWriterPID
+XLOGbuffers
+XLogArchiveCommand
+XLogArchiveMode
+XLogArchiveTimeout
+XLogBackgroundFlush.lastflush
+XLogCtl
+XLogReceiptSource
+XLogReceiptTime
+XLogSendLogical.flushPtr
+XLogWalRcvSendHSFeedback.primary_has_standby_xmin
+XLogWalRcvSendHSFeedback.sendTime
+XLogWalRcvSendReply.flushPtr
+XLogWalRcvSendReply.sendTime
+XLogWalRcvSendReply.writePtr
+XactCtlData
+XactDeferrable
+XactIsoLevel
+XactLastCommitEnd
+XactLastRecEnd
+XactReadOnly
+XactTopFullTransactionId
+Xact_callbacks
+_SPI_connected
+_SPI_current
+_SPI_stack
+_SPI_stack_depth
+_rand48_seed
+abbrevcache
+abortedRecPtr
+acos_0_5
+activeCreationNamespace
+activePathGeneration
+activeSearchPath
+activeTempCreationPending
+active_local_updates
+active_shared_updates
+active_timeouts
+addWrd.nres
+addWrd.ntres
+add_reloption.max_custom_options
+addin_request_allowed
+afterConstraints
+afterTriggers
+alarm_enabled
+allProcs
+all_timeouts
+all_timeouts_initialized
+allocatedDescs
+allowSystemTableMods
+amRegisteredListener
+am_autovacuum_launcher
+am_autovacuum_worker
+am_cascading_walsender
+am_db_walsender
+am_walsender
+anl_context
+announce_next_takeover
+application_name
+archiveCleanupCommand
+archiverStats
+array_extra_data
+asin_0_5
+assert_enabled
+asyncQueueControl
+atan_1_0
+atexit_callback_setup
+attrtypes
+autovac_refresh_stats.last_read
+autovacuum_anl_scale
+autovacuum_anl_thresh
+autovacuum_freeze_max_age
+autovacuum_max_workers
+autovacuum_multixact_freeze_max_age
+autovacuum_naptime
+autovacuum_start_daemon
+autovacuum_vac_cost_delay
+autovacuum_vac_cost_limit
+autovacuum_vac_ins_scale
+autovacuum_vac_ins_thresh
+autovacuum_vac_scale
+autovacuum_vac_thresh
+autovacuum_work_mem
+avlauncher_needs_signal
+awaitedLock
+awaitedOwner
+backendStatusSnapContext
+backend_flush_after
+backend_startup_complete
+backtrace_functions
+backtrace_symbol_list
+backup_started_in_recovery
+backup_streamed
+backup_total
+baseCreationNamespace
+baseSearchPath
+baseSearchPathValid
+baseTempCreationPending
+base_yyparse.yyloc_default
+base_yyparse.yyval_default
+beforeConstraints
+before_shmem_exit_list
+begininsert_called
+bgwriterLaunched
+bgwriter_flush_after
+bgwriter_lru_maxpages
+bgwriter_lru_multiplier
+binary_upgrade_next_array_pg_type_oid
+binary_upgrade_next_heap_pg_class_oid
+binary_upgrade_next_index_pg_class_oid
+binary_upgrade_next_mrng_array_pg_type_oid
+binary_upgrade_next_mrng_pg_type_oid
+binary_upgrade_next_pg_authid_oid
+binary_upgrade_next_pg_enum_oid
+binary_upgrade_next_pg_type_oid
+binary_upgrade_next_toast_pg_class_oid
+binary_upgrade_record_init_privs
+block_size
+blocking_autovacuum_proc
+bonjour_name
+boot_reldesc
+boot_yy_flex_debug
+boot_yychar
+boot_yyin
+boot_yyleng
+boot_yylineno
+boot_yylval
+boot_yynerrs
+boot_yyout
+boot_yytext
+bootstrap_data_checksum_version
+bsysscan
+btvacinfo
+buffer_lists
+bytea_output
+bytesToHex.hex
+cachedCommitLSN
+cachedFetchXid
+cachedFetchXidStatus
+cached_db_hash
+cached_expression_list
+cached_role
+cached_roles
+catchupInterruptPending
+check_function_bodies
+check_password_hook
+checkpoint_cycle_ctr
+checkpoint_flush_after
+ckpt_active
+ckpt_cached_elapsed
+ckpt_start_recptr
+ckpt_start_time
+client_connection_check_interval
+client_encoding_string
+client_min_messages
+cluster_name
+collation_cache
+comboCids
+comboHash
+commitTsShared
+compute_query_id
+connsAllowed
+constraint_exclusion
+context_freelists
+cookies
+cookies_size
+copybuf
+cot_45
+cpu_index_tuple_cost
+cpu_operator_cost
+cpu_tuple_cost
+create_ctas_internal.validnsps
+create_upper_paths_hook
+creating_extension
+criticalRelcachesBuilt
+criticalSharedRelcachesBuilt
+csvlogFile
+curConstraints
+curFileTLI
+curinsert_flags
+currentCommandId
+currentCommandIdUsed
+currentEventTriggerState
+currentSource
+currentSubTransactionId
+currentlyReindexedHeap
+currentlyReindexedIndex
+cursor_tuple_fraction
+custom_options
+custom_scan_methods
+cv_sleep_target
+dataExecPlaceToPageInternal.data
+data_checksums
+data_directory
+data_directory_mode
+data_sync_retry
+datecache
+datestyle_string
+deadlockDetails
+deadlock_state
+debug_discard_caches
+debug_query_string
+default_freeze_min_age
+default_freeze_table_age
+default_multixact_freeze_min_age
+default_multixact_freeze_table_age
+default_statistics_target
+default_table_access_method
+default_tablespace
+default_toast_compression
+default_toast_compression_options
+default_with_oids
+degree_c_forty_five
+degree_c_one
+degree_c_one_half
+degree_c_sixty
+degree_c_thirty
+degree_consts_set
+deltacache
+disable_cost
+dispatch_table
+doPageWrites
+doRequestWalReceiverReply
+doing_extended_query_message
+drandom_seed
+drandom_seed_set
+dsm_control
+dsm_control_handle
+dsm_control_impl_private
+dsm_control_mapped_size
+dsm_init_done
+dsm_main_space_begin
+dsm_segment_list
+dummy_spinlock
+dummy_ssl_passwd_cb_called
+dynamic_shared_memory_type
+effective_cache_size
+effective_io_concurrency
+elapsed_min_unit
+elevel
+emit_log_hook
+emode_for_corrupt_record.lastComplaint
+enableFsync
+enable_async_append
+enable_bitmapscan
+enable_bonjour
+enable_gathermerge
+enable_geqo
+enable_hashagg
+enable_hashjoin
+enable_incremental_sort
+enable_indexonlyscan
+enable_indexscan
+enable_material
+enable_memoize
+enable_mergejoin
+enable_nestloop
+enable_parallel_append
+enable_parallel_hash
+enable_partition_pruning
+enable_partitionwise_aggregate
+enable_partitionwise_join
+enable_seqscan
+enable_sort
+enable_tidscan
+entryExecPlaceToPage.data
+eoxact_list
+eoxact_list_len
+eoxact_list_overflowed
+error_context_stack
+errordata
+errordata_stack_depth
+event_source
+executeDateTimeMethod.fmt_str
+executeDateTimeMethod.fmt_txt
+expectedTLEs
+explain_get_index_name_hook
+exportedSnapshots
+extensible_node_methods
+external_pid_file
+extra_float_digits
+file_list
+file_tail
+filesetlist
+find_rendezvous_variable.rendezvousHash
+firstDomainTypeEntry
+first_syslogger_file_time
+flushedUpto
+fmgr_hook
+forceSyncCommit
+force_parallel_mode
+formatted_log_time
+formatted_start_time
+from_collapse_limit
+fscxt
+fullPageWrites
+geqo_threshold
+getWeights.ws
+get_attavgwidth_hook
+get_code_decomposition.x
+get_config_unit_name.bbuf
+get_config_unit_name.xbuf
+get_index_stats_hook
+get_object_property_data.prop_last
+get_relation_info_hook
+get_relation_stats_hook
+get_stack_depth_rlimit.val
+gin_pending_list_limit
+gistGetFakeLSN.counter
+gistGetFakeLSN.lastlsn
+globalStats
+gmtsub.gmtptr
+got_SIGHUP
+got_SIGUSR2
+got_STOPPING
+got_deadlock_timeout
+got_standby_deadlock_timeout
+got_standby_lock_timeout
+guc_dirty
+guc_variables
+hash_mem_multiplier
+have_function_stats
+have_xact_temporary_files
+hdr_rdt
+hdr_scratch
+held_lwlocks
+hist_entries
+hist_start
+holdingAllLocks
+hot_standby_feedback
+huge_page_size
+huge_pages
+icu_converter
+ignore_checksum_failure
+ignore_invalid_pages
+ignore_till_sync
+in_hot_standby
+in_progress_list
+in_progress_list_len
+in_progress_list_maxlen
+in_remote_transaction
+in_restore_command
+in_streamed_transaction
+incoming_message
+int64_div_fast_to_numeric.pow10
+integer_datetimes
+internal_flush.last_reported_send_errno
+invalid_page_tab
+jit_above_cost
+jit_debugging_support
+jit_dump_bitcode
+jit_enabled
+jit_expressions
+jit_inline_above_cost
+jit_optimize_above_cost
+jit_profiling_support
+jit_provider
+jit_tuple_deforming
+join_collapse_limit
+join_search_hook
+jsonpath_yy_flex_debug
+jsonpath_yyin
+jsonpath_yyleng
+jsonpath_yylineno
+jsonpath_yyout
+jsonpath_yyparse.yyval_default
+jsonpath_yytext
+label_file
+label_provider_list
+lag_tracker
+lastFullPageWrites
+lastSourceFailed
+lastUsedConfig
+lastUsedDictionary
+lastUsedParser
+last_assigned_kind
+last_checkpoint_time
+last_csv_file_name
+last_file_name
+last_pgstat_start_time
+last_processing
+last_reply_timestamp
+last_roleid
+last_roleid_is_super
+last_sigterm_time
+last_snapshot_lsn
+last_snapshot_ts
+last_status_len
+last_used_seq
+last_xlog_switch_time
+latestObservedXid
+lc_collate_is_c.result
+lc_ctype_is_c.result
+listenChannels
+litbuf
+lo_cleanup_needed
+lo_compat_privileges
+lo_heap_r
+lo_index_r
+localBackendStatusTable
+localNumBackends
+local_map
+local_preload_libraries_string
+locale_collate
+locale_ctype
+locale_messages
+locale_monetary
+locale_numeric
+locale_time
+localized_abbrev_days
+localized_abbrev_months
+localized_full_days
+localized_full_months
+lockAwaited
+lock_files
+lock_named_request_allowed
+log_btree_build_stats
+log_checkpoints
+log_duration
+log_executor_stats
+log_hostname
+log_line_prefix.log_line_number
+log_line_prefix.log_my_pid
+log_lock_waits
+log_min_duration_sample
+log_min_duration_statement
+log_min_error_statement
+log_min_messages
+log_parameter_max_length
+log_parameter_max_length_on_error
+log_parser_stats
+log_planner_stats
+log_recovery_conflict_waits
+log_replication_commands
+log_statement
+log_statement_sample_rate
+log_statement_stats
+log_temp_files
+log_timezone
+log_timezone_string
+log_xact_sample_rate
+logical_decoding_ctx
+logical_decoding_work_mem
+lsn_mapping
+mainrdata_head
+mainrdata_last
+mainrdata_len
+maintenance_io_concurrency
+maintenance_work_mem
+make_greater_string.suffixchar
+make_greater_string.suffixcollation
+matview_maintenance_depth
+maxAllocatedDescs
+maxCurConstraints
+maxPossibleConstraints
+maxSems
+maxSharedInvalidMessagesArray
+max_files_per_process
+max_function_args
+max_identifier_length
+max_index_keys
+max_locks_per_xact
+max_logical_replication_workers
+max_parallel_maintenance_workers
+max_parallel_workers
+max_parallel_workers_per_gather
+max_predicate_locks_per_page
+max_predicate_locks_per_relation
+max_predicate_locks_per_xact
+max_prepared_xacts
+max_rdatas
+max_registered_block_id
+max_registered_buffers
+max_replication_slots
+max_safe_fds
+max_slot_wal_keep_size_mb
+max_stack_depth
+max_stack_depth_bytes
+max_standby_archive_delay
+max_standby_streaming_delay
+max_sync_workers_per_subscription
+max_wal_senders
+max_wal_size_mb
+max_worker_processes
+memory_units_hint
+minRecoveryPoint
+minRecoveryPointTLI
+min_dynamic_shared_memory
+min_parallel_index_scan_size
+min_parallel_table_scan_size
+min_wal_size_mb
+missingContrecPtr
+mxid_to_string.str
+myTempNamespace
+myTempNamespaceSubID
+myTempToastNamespace
+my_bio_methods
+my_exec_path
+nCurConstraints
+nDeadlockDetails
+nParallelCurrentXids
+nPossibleConstraints
+nUnreportedXids
+nVisitedProcs
+nWaitOrders
+n_DCHCache
+n_NUMCache
+namespaceUser
+namespace_search_path
+need_initialization
+needs_fmgr_hook
+newNodeMacroHolder
+nextFreeLocalBuf
+nextLocalTransactionId
+nextSemKey
+nextTempTableSpace
+next_rotation_time
+nfile
+nogc
+notifyInterruptPending
+noverify_checksums
+numAllocatedDescs
+numExternalFDs
+numSems
+numSharedInvalidMessagesArray
+numTempTableSpaces
+num_active_timeouts
+num_columns_read
+num_custom_options
+num_guc_variables
+num_held_lwlocks
+num_rdatas
+num_res
+num_seq_scans
+num_temp_buffers
+num_word.buf
+numattr
+object_access_hook
+oldSnapshotControl
+old_snapshot_threshold
+oldrs
+on_commit_launcher_wakeup
+on_commits
+on_proc_exit_list
+on_shmem_exit_list
+one_minus_cos_60
+opCtx
+openLogFile
+openLogSegNo
+openlog_done
+openssl_tls_init_hook
+outbuf_maxlen
+output_message
+overrideStack
+parallel_leader_participation
+parallel_setup_cost
+parallel_tuple_cost
+parsed_hba_context
+parsed_hba_lines
+parsed_ident_context
+parsed_ident_lines
+pcxt_list
+pendingActions
+pendingDeletes
+pendingNotifies
+pendingOps
+pendingOpsCxt
+pendingReindexedIndexes
+pendingSyncHash
+pendingUnlinks
+pendingWalRcvRestart
+pending_client_encoding
+pending_local_updates
+pending_shared_updates
+pending_write_requests
+per_line_ctx
+pgBufferUsage
+pgLastSessionReportTime
+pgStatActiveTime
+pgStatAddr
+pgStatBlockReadTime
+pgStatBlockWriteTime
+pgStatDBHash
+pgStatFunctions
+pgStatLocalContext
+pgStatRunningInCollector
+pgStatSessionEndCause
+pgStatSock
+pgStatTabHash
+pgStatTabList
+pgStatTransactionIdleTime
+pgStatXactCommit
+pgStatXactRollback
+pgStatXactStack
+pgWalUsage
+pg_TZDIR.done_tzdir
+pg_TZDIR.tzdir
+pg_comp_crc32c
+pg_ctype_cache_list
+pg_dir_create_mode
+pg_file_create_mode
+pg_flush_data.not_implemented_by_kernel
+pg_flush_data.pagesize
+pg_krb_caseins_users
+pg_krb_server_keyfile
+pg_mode_mask
+pg_perm_setlocale.save_lc_ctype
+pg_popcount32
+pg_popcount64
+pg_regex_collation
+pg_regex_locale
+pg_regex_strategy
+pg_rusage_show.result
+pg_strerror.errorstr_buf
+pg_strtok_ptr
+pg_xml_init_library.first_time
+pgstat_report_stat.last_report
+pgstat_send_wal.sendTime
+pgstat_stat_directory
+pgstat_stat_filename
+pgstat_stat_tmpname
+pgstat_temp_directory
+pgstat_track_activities
+pgstat_track_activity_query_size
+pgstat_track_counts
+pgstat_track_functions
+phony_random_seed
+pipe_eof_seen
+pkglib_path
+plan_cache_mode
+plan_getrulebyoid
+plan_getviewrule
+planner_hook
+pmState
+possibleConstraints
+post_parse_analyze_hook
+postmaster_alive_fds
+postmaster_possibly_dead
+pq_mq_busy
+pq_mq_handle
+pq_mq_parallel_leader_backend_id
+pq_mq_parallel_leader_pid
+prepareGID
+prepared_queries
+prevWalUsage
+primary_image_masked
+procArray
+proc_exit_inprogress
+process_shared_preload_libraries_in_progress
+process_syncing_tables_for_apply.last_start_times
+process_syncing_tables_for_apply.table_states
+promote_signaled
+provider
+provider_failed_loading
+provider_successfully_loaded
+ps_buffer
+ps_buffer_cur_len
+ps_buffer_fixed_size
+ps_buffer_size
+query_getrulebyoid
+query_getviewrule
+query_id_enabled
+quote_all_identifiers
+random_page_cost
+rdatas
+re_array
+reachedConsistency
+readFile
+readLen
+readOff
+readSegNo
+readSource
+ready_to_stop
+receiveTLI
+recentMulti
+recentXid
+records
+recoveryEndCommand
+recoveryRestoreCommand
+recoveryStopAfter
+recoveryStopLSN
+recoveryStopName
+recoveryStopTime
+recoveryStopXid
+recoveryTarget
+recoveryTargetAction
+recoveryTargetInclusive
+recoveryTargetLSN
+recoveryTargetName
+recoveryTargetTLI
+recoveryTargetTLIRequested
+recoveryTargetTime
+recoveryTargetTimeLineGoal
+recoveryTargetXid
+recovery_init_sync_method
+recovery_init_sync_method_options
+recovery_min_apply_delay
+recovery_signal_file_found
+recovery_target_lsn_string
+recovery_target_name_string
+recovery_target_string
+recovery_target_time_string
+recovery_target_timeline_string
+recovery_target_xid_string
+recursion_depth
+recvFile
+recvFileTLI
+recvSegNo
+redirection_done
+register_persistent_abort_backup_handler.already_done
+registered_buffers
+reindexingNestLevel
+relOpts
+relcacheInvalsReceived
+relcache_callback_count
+relcache_callback_list
+relfilenode_skey
+remote_final_lsn
+remove_temp_files_after_crash
+replSlotStatHash
+repl_pushed_back_token
+replay_image_masked
+replication_active
+replication_parse_result
+replication_states
+replication_states_ctl
+replication_yy_flex_debug
+replication_yychar
+replication_yyin
+replication_yyleng
+replication_yylineno
+replication_yylval
+replication_yynerrs
+replication_yyout
+replication_yytext
+replorigin_session_origin
+replorigin_session_origin_lsn
+replorigin_session_origin_timestamp
+replorigin_session_setup.registered_cleanup
+reply_message
+report_needed
+reporting_enabled
+restart_after_crash
+restoredFromArchive
+reverse_dispatch_table
+ri_compare_cache
+ri_constraint_cache
+ri_constraint_cache_valid_count
+ri_constraint_cache_valid_list
+ri_query_cache
+role_string
+roleid_callback_registered
+rotation_disabled
+rotation_requested
+row_description_buf
+row_description_context
+row_security
+row_security_policy_hook_permissive
+row_security_policy_hook_restrictive
+sanitize_char.buf
+sanitize_str.buf
+save_XactDeferrable
+save_XactIsoLevel
+save_XactReadOnly
+save_argc
+save_argv
+save_format_domain
+save_format_errnumber
+save_pgBufferUsage
+save_pgWalUsage
+saved_plan_list
+saved_timeval
+saved_timeval_set
+scan_locations
+scanbuf
+scanbufhandle
+scanbuflen
+scanstring
+scram_mock_salt.sha_digest
+segment_size
+sendTimeLine
+sendTimeLineIsHistoric
+sendTimeLineNextTLI
+sendTimeLineValidUpto
+send_feedback.last_flushpos
+send_feedback.last_recvpos
+send_feedback.last_writepos
+send_feedback.reply_message
+send_feedback.send_time
+sentPtr
+seq_page_cost
+seq_scan_level
+seq_scan_tables
+seqhashtab
+serialControl
+server_encoding_string
+server_version_num
+server_version_string
+sessionBackupState
+session_auth_is_superuser
+session_authorization_string
+session_preload_libraries_string
+session_replication_state
+session_timezone
+set_join_pathlist_hook
+set_rel_pathlist_hook
+sharedSemas
+shared_map
+shared_memory_options
+shared_memory_type
+shared_preload_libraries_string
+shmInvalBuffer
+shmem_exit_inprogress
+shmem_startup_hook
+show_data_directory_mode.buf
+show_log_file_mode.buf
+show_tcp_keepalives_count.nbuf
+show_tcp_keepalives_idle.nbuf
+show_tcp_keepalives_interval.nbuf
+show_tcp_user_timeout.nbuf
+show_unix_socket_permissions.buf
+shutdown_requested
+signal_due_at
+signal_fd
+signal_pending
+sin_30
+sizeComboCids
+size_guc_variables
+slruStats
+slru_errcause
+slru_errno
+sock_paths
+speculativeInsertionToken
+spins_per_delay
+ssl_ca_file
+ssl_cert_file
+ssl_crl_dir
+ssl_crl_file
+ssl_dh_params_file
+ssl_is_server_start
+ssl_key_file
+ssl_library
+ssl_loaded_verify_locations
+ssl_max_protocol_version
+ssl_min_protocol_version
+ssl_passphrase_command
+ssl_passphrase_command_supports_reload
+ssl_renegotiation_limit
+stack_base_ptr
+standbySnapshotPendingXmin
+standbyState
+standbyWait_us
+standby_signal_file_found
+start_autovac_launcher
+startptr
+statrelpath
+stmtStartTimestamp
+str_time.buf
+stream_fd
+stream_xid
+streamingDoneReceiving
+streamingDoneSending
+subxact_data
+sync_cycle_ctr
+sync_method
+synchronize_seqscans
+synchronous_commit
+syncrep_parse_error_msg
+syncrep_parse_result
+syncrep_yy_flex_debug
+syncrep_yychar
+syncrep_yyin
+syncrep_yyleng
+syncrep_yylineno
+syncrep_yylval
+syncrep_yynerrs
+syncrep_yyout
+syncrep_yytext
+syscache_callback_count
+syscache_callback_links
+syscache_callback_list
+syslogFile
+syslogPipe
+syslog_facility
+syslog_ident
+syslog_ident_str
+syslog_sequence_numbers
+syslog_split_messages
+table_recheck_autovac.reuse_stats
+table_states_valid
+tan_45
+tblspc_map_file
+tcp_keepalives_count
+tcp_keepalives_idle
+tcp_keepalives_interval
+tcp_user_timeout
+tempFileCounter
+tempTableSpaces
+temp_file_limit
+temp_tablespaces
+temporary_files_size
+throttled_last
+throttling_counter
+throttling_sample
+time_units_hint
+timestamptz_to_str.buf
+timezone_abbreviations_string
+timezone_cache
+timezone_string
+tm
+tmpbuf
+topoProcs
+total_addin_request
+total_checksum_failures
+total_func_time
+trace_recovery_messages
+trace_sort
+track_commit_timestamp
+track_io_timing
+track_wal_io_timing
+transInvalInfo
+tryAdvanceTail
+tuplecid_data
+tupledesc_id_counter
+twophaseExitRegistered
+uncommitted_enums
+unlistenExitRegistered
+unnamed_stmt_psrc
+unowned_relns
+unpack_sql_state.buf
+unreportedXids
+updateMinRecoveryPoint
+update_process_title
+usedComboCids
+userDoption
+vac_context
+vac_strategy
+vacuum.in_vacuum
+vacuum_defer_cleanup_age
+vacuum_failsafe_age
+vacuum_freeze_min_age
+vacuum_freeze_table_age
+vacuum_multixact_failsafe_age
+vacuum_multixact_freeze_min_age
+vacuum_multixact_freeze_table_age
+values
+visitedProcs
+waitOrderProcs
+waitOrders
+waiting
+waiting_for_ping_response
+wake_wal_senders
+walStats
+wal_block_size
+wal_compression
+wal_consistency_checking
+wal_consistency_checking_string
+wal_init_zero
+wal_keep_size_mb
+wal_level
+wal_log_hints
+wal_receiver_create_temp_slot
+wal_receiver_status_interval
+wal_receiver_timeout
+wal_recycle
+wal_retrieve_retry_interval
+wal_segment_size
+wal_sender_timeout
+wal_skip_threshold
+whereToSendOutput
+work_mem
+wrconn
+write_csvlog.log_line_number
+write_csvlog.log_my_pid
+write_syslog.seq
+xactStartTimestamp
+xactStopTimestamp
+xact_is_sampled
+xact_started
+xdbuf
+xidhash
+xloginsert_cxt
+xlogreader
+xmlbinary
+xmloption
+yy_buffer_stack
+yy_buffer_stack_max
+yy_buffer_stack_top
+yy_c_buf_p
+yy_did_buffer_switch_on_eof
+yy_flex_debug
+yy_hold_char
+yy_init
+yy_last_accepting_cpos
+yy_last_accepting_state
+yy_n_chars
+yy_start
+yy_start_state_list
+yychar
+yyin
+yyleng
+yyline
+yylineno
+yynerrs
+yyout
+yytext
+zero_damaged_pages
+zoneabbrevtbl
diff --git a/ydb/library/yql/parser/pg_wrapper/verify.sh b/ydb/library/yql/parser/pg_wrapper/verify.sh
new file mode 100755
index 0000000000..870a7ab93f
--- /dev/null
+++ b/ydb/library/yql/parser/pg_wrapper/verify.sh
@@ -0,0 +1,24 @@
+#!/usr/bin/env bash
+set -u
+
+echo -n "Building library: "
+ya make || exit $?
+
+echo -n "Checking static variables: "
+
+data=$(objdump libyql-parser-pg_wrapper.a -t | grep -E "\.data\.|\.bss\." | \
+grep -v -E "progname|pg_popcount32|pg_popcount64|pg_comp_crc32c|_ZN4NYqlL10GlobalInitE|BlockSig|StartupBlockSig|UnBlockSig" | \
+grep -v -E "local_my_wait_event_info|my_wait_event_info|maxSems|nextSemKey|numSems|sharedSemas|AnonymousShmem|AnonymousShmemSize" | \
+grep -v -E "UsedShmemSegAddr|UsedShmemSegID|_ZN4NYql11TVPtrHolder8InstanceE" | \
+grep -v -E "on_proc_exit_index|on_shmem_exit_index|before_shmem_exit_index")
+
+if [ ${#data} -eq 0 ]; then
+ echo "OK";
+ exit 0;
+fi
+
+cnt=$(echo "$data" | wc -l)
+
+echo "***GOT $cnt UNEXPECTED SYMBOLS***"
+echo "$data"
+exit 1;
diff --git a/ydb/library/yql/parser/pg_wrapper/ya.make b/ydb/library/yql/parser/pg_wrapper/ya.make
index d4bcf73770..7632b8ae55 100644
--- a/ydb/library/yql/parser/pg_wrapper/ya.make
+++ b/ydb/library/yql/parser/pg_wrapper/ya.make
@@ -124,6 +124,16 @@ ELSEIF (OS_WINDOWS)
)
ENDIF()
+# Service files must be listed as dependencies to be included in export
+FILES(
+ copy_src.py
+ copy_src.sh
+ generate_kernels.py
+ generate_patch.sh
+ vars.txt
+ verify.sh
+)
+
END()
RECURSE(