diff --git a/api.go b/api.go index 8e7fa7b2b..ce8ffda33 100644 --- a/api.go +++ b/api.go @@ -36,6 +36,8 @@ import ( "github.com/molecula/featurebase/v2/disco" "github.com/molecula/featurebase/v2/ingest" + + //"github.com/molecula/featurebase/v2/pg" "github.com/molecula/featurebase/v2/pql" "github.com/molecula/featurebase/v2/roaring" "github.com/molecula/featurebase/v2/stats" @@ -3024,6 +3026,9 @@ processing: } return result, ctx.Err() } +func (api *API) Plan(ctx context.Context, q string) (*Stmt, error) { + return api.server.PlanSQL(ctx, q) +} type serverInfo struct { ShardWidth uint64 `json:"shardWidth"` diff --git a/ctl/server.go b/ctl/server.go index 2aa617295..6c4405135 100644 --- a/ctl/server.go +++ b/ctl/server.go @@ -111,6 +111,7 @@ func BuildServerFlags(cmd *cobra.Command, srv *server.Command) { flags.DurationVar((*time.Duration)(&srv.Config.Postgres.WriteTimeout), "postgres.write-timeout", time.Duration(srv.Config.Postgres.WriteTimeout), "Timeout for writes on a postgres connection. (set 0 to disable)") flags.Uint32Var(&srv.Config.Postgres.MaxStartupSize, "postgres.max-startup-size", srv.Config.Postgres.MaxStartupSize, "Maximum acceptable size of a postgres startup packet, in bytes. (set 0 to disable)") flags.Uint16Var(&srv.Config.Postgres.ConnectionLimit, "postgres.connection-limit", srv.Config.Postgres.ConnectionLimit, "Maximum number of simultaneous postgres connections to allow. (set 0 to disable)") + flags.Uint16Var(&srv.Config.Postgres.SqlVersion, "postgres.sql-version", srv.Config.Postgres.SqlVersion, "Molecula Sql Handling Version (default 1)") // Disk and Memory usage cache for ui/usage endpoint flags.Float64Var(&srv.Config.UsageDutyCycle, "usage-duty-cycle", srv.Config.UsageDutyCycle, "Sets the percentage of time that is spent recalculating the disk and memory usage cache. 100.0 for always-running, 0 disables the cache and the /ui/usage endpoint.") diff --git a/pg/lookerToFeaturebase.md b/pg/lookerToFeaturebase.md new file mode 100644 index 000000000..cd7c82b9b --- /dev/null +++ b/pg/lookerToFeaturebase.md @@ -0,0 +1,652 @@ +```mermaid +sequenceDiagram + +participant 213070643358480 as c0 +participant 213070643358482 as c1 +participant 213070643358484 as c2 +participant 213070643358486 as c3 +participant 213070643358488 as c4 +participant 213070643358490 as c5 +participant 213070643358492 as c6 +participant 213070643358494 as c7 +participant 213070643358496 as c8 +participant 213070643358498 as c9 +participant 213070643358500 as c10 +participant 213070643358502 as c11 +213070643358480->>server:+SSL REQUEST +server-->>213070643358480:-SSL BACKEND ANSWER: N +213070643358480->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358480:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358480:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358480:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358480:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358480:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358480:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358480:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358480:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358480:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358480:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358480:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358480:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358480:-BACKEND KEY DATA pid=1459324827, key=1506254533 +server-->>213070643358480:-READY FOR QUERY type= +213070643358480->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358480->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358480->>server:+EXECUTE name='', nb_rows=1 +213070643358480->>server:+SYNC +server-->>213070643358480:-PARSE COMPLETE +server-->>213070643358480:-BIND COMPLETE +server-->>213070643358480:-COMMAND COMPLETE command='SET' +server-->>213070643358480:-READY FOR QUERY type= +213070643358480->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358480->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358480->>server:+EXECUTE name='', nb_rows=1 +213070643358480->>server:+SYNC +server-->>213070643358480:-PARSE COMPLETE +server-->>213070643358480:-BIND COMPLETE +server-->>213070643358480:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358480:-COMMAND COMPLETE command='SET' +server-->>213070643358480:-READY FOR QUERY type= +213070643358480->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358480->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358480->>server:+DESCRIBE kind='P', name='' +213070643358480->>server:+EXECUTE name='', nb_rows=1 +213070643358480->>server:+SYNC +server-->>213070643358480:-PARSE COMPLETE +server-->>213070643358480:-BIND COMPLETE +server-->>213070643358480:-NO DATA +server-->>213070643358480:-EMPTY QUERY RESPONSE +server-->>213070643358480:-READY FOR QUERY type= +213070643358480->>server:+DISCONNECT +213070643358482->>server:+SSL REQUEST +server-->>213070643358482:-SSL BACKEND ANSWER: N +213070643358482->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358482:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358482:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358482:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358482:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358482:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358482:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358482:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358482:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358482:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358482:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358482:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358482:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358482:-BACKEND KEY DATA pid=1742342691, key=1299317425 +server-->>213070643358482:-READY FOR QUERY type= +213070643358482->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358482->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358482->>server:+EXECUTE name='', nb_rows=1 +213070643358482->>server:+SYNC +server-->>213070643358482:-PARSE COMPLETE +server-->>213070643358482:-BIND COMPLETE +server-->>213070643358482:-COMMAND COMPLETE command='SET' +server-->>213070643358482:-READY FOR QUERY type= +213070643358482->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358482->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358482->>server:+EXECUTE name='', nb_rows=1 +213070643358482->>server:+SYNC +server-->>213070643358482:-PARSE COMPLETE +server-->>213070643358482:-BIND COMPLETE +server-->>213070643358482:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358482:-COMMAND COMPLETE command='SET' +server-->>213070643358482:-READY FOR QUERY type= +213070643358482->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358482->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358482->>server:+DESCRIBE kind='P', name='' +213070643358482->>server:+EXECUTE name='', nb_rows=1 +213070643358482->>server:+SYNC +server-->>213070643358482:-PARSE COMPLETE +server-->>213070643358482:-BIND COMPLETE +server-->>213070643358482:-NO DATA +server-->>213070643358482:-EMPTY QUERY RESPONSE +server-->>213070643358482:-READY FOR QUERY type= +213070643358482->>server:+DISCONNECT +213070643358484->>server:+SSL REQUEST +server-->>213070643358484:-SSL BACKEND ANSWER: N +213070643358484->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358484:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358484:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358484:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358484:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358484:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358484:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358484:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358484:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358484:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358484:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358484:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358484:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358484:-BACKEND KEY DATA pid=700852804, key=1377869267 +server-->>213070643358484:-READY FOR QUERY type= +213070643358484->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358484->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358484->>server:+EXECUTE name='', nb_rows=1 +213070643358484->>server:+SYNC +server-->>213070643358484:-PARSE COMPLETE +server-->>213070643358484:-BIND COMPLETE +server-->>213070643358484:-COMMAND COMPLETE command='SET' +server-->>213070643358484:-READY FOR QUERY type= +213070643358484->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358484->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358484->>server:+EXECUTE name='', nb_rows=1 +213070643358484->>server:+SYNC +server-->>213070643358484:-PARSE COMPLETE +server-->>213070643358484:-BIND COMPLETE +server-->>213070643358484:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358484:-COMMAND COMPLETE command='SET' +server-->>213070643358484:-READY FOR QUERY type= +213070643358484->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358484->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358484->>server:+DESCRIBE kind='P', name='' +213070643358484->>server:+EXECUTE name='', nb_rows=1 +213070643358484->>server:+SYNC +server-->>213070643358484:-PARSE COMPLETE +server-->>213070643358484:-BIND COMPLETE +server-->>213070643358484:-NO DATA +server-->>213070643358484:-EMPTY QUERY RESPONSE +server-->>213070643358484:-READY FOR QUERY type= +213070643358484->>server:+DISCONNECT +213070643358486->>server:+SSL REQUEST +server-->>213070643358486:-SSL BACKEND ANSWER: N +213070643358486->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358486:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358486:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358486:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358486:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358486:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358486:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358486:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358486:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358486:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358486:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358486:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358486:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358486:-BACKEND KEY DATA pid=413235241, key=1302652759 +server-->>213070643358486:-READY FOR QUERY type= +213070643358486->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358486->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358486->>server:+EXECUTE name='', nb_rows=1 +213070643358486->>server:+SYNC +server-->>213070643358486:-PARSE COMPLETE +server-->>213070643358486:-BIND COMPLETE +server-->>213070643358486:-COMMAND COMPLETE command='SET' +server-->>213070643358486:-READY FOR QUERY type= +213070643358486->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358486->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358486->>server:+EXECUTE name='', nb_rows=1 +213070643358486->>server:+SYNC +server-->>213070643358486:-PARSE COMPLETE +server-->>213070643358486:-BIND COMPLETE +server-->>213070643358486:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358486:-COMMAND COMPLETE command='SET' +server-->>213070643358486:-READY FOR QUERY type= +213070643358486->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358486->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358486->>server:+DESCRIBE kind='P', name='' +213070643358486->>server:+EXECUTE name='', nb_rows=1 +213070643358486->>server:+SYNC +server-->>213070643358486:-PARSE COMPLETE +server-->>213070643358486:-BIND COMPLETE +server-->>213070643358486:-NO DATA +server-->>213070643358486:-EMPTY QUERY RESPONSE +server-->>213070643358486:-READY FOR QUERY type= +213070643358486->>server:+PARSE name='', num_params=0, params_type=, query=SELECT pg_backend_pid() +213070643358486->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358486->>server:+DESCRIBE kind='P', name='' +213070643358486->>server:+EXECUTE name='', nb_rows=0 +213070643358486->>server:+SYNC +server-->>213070643358486:-PARSE COMPLETE +server-->>213070643358486:-BIND COMPLETE +server-->>213070643358486:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='pg_backend_pid' type=23 type_len=4 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643358486:-DATA ROW num_values=1 ---[Value 0001]--- length=9 value='413235241' +server-->>213070643358486:-COMMAND COMPLETE command='SELECT' +server-->>213070643358486:-READY FOR QUERY type= +213070643358486->>server:+PARSE name='', num_params=0, params_type=, query=SELECT VERSION() AS version +213070643358486->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358486->>server:+DESCRIBE kind='P', name='' +213070643358486->>server:+EXECUTE name='', nb_rows=0 +213070643358486->>server:+SYNC +server-->>213070643358486:-PARSE COMPLETE +server-->>213070643358486:-BIND COMPLETE +server-->>213070643358486:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='version' type=25 type_len=65535 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643358486:-DATA ROW num_values=1 ---[Value 0001]--- length=27 value='PostgresSQL 13.0 (molecula)' +server-->>213070643358486:-COMMAND COMPLETE command='SELECT' +server-->>213070643358486:-READY FOR QUERY type= +213070643358486->>server:+PARSE name='', num_params=0, params_type=, query= SELECT COUNT(*) FROM pg_type AS t0, pg_aggregate AS t1, pg_settings AS t2, pg_settings AS t3 +213070643358486->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358486->>server:+DESCRIBE kind='P', name='' +213070643358486->>server:+EXECUTE name='', nb_rows=0 +213070643358486->>server:+SYNC +213070643358488->>server:+SSL REQUEST +server-->>213070643358488:-SSL BACKEND ANSWER: N +213070643358488->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358488:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358488:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358488:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358488:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358488:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358488:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358488:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358488:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358488:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358488:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358488:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358488:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358488:-BACKEND KEY DATA pid=180554708, key=1504602717 +server-->>213070643358488:-READY FOR QUERY type= +213070643358488->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358488->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358488->>server:+EXECUTE name='', nb_rows=1 +213070643358488->>server:+SYNC +server-->>213070643358488:-PARSE COMPLETE +server-->>213070643358488:-BIND COMPLETE +server-->>213070643358488:-COMMAND COMPLETE command='SET' +server-->>213070643358488:-READY FOR QUERY type= +213070643358488->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358488->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358488->>server:+EXECUTE name='', nb_rows=1 +213070643358488->>server:+SYNC +server-->>213070643358488:-PARSE COMPLETE +server-->>213070643358488:-BIND COMPLETE +server-->>213070643358488:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358488:-COMMAND COMPLETE command='SET' +server-->>213070643358488:-READY FOR QUERY type= +213070643358488->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358488->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358488->>server:+DESCRIBE kind='P', name='' +213070643358488->>server:+EXECUTE name='', nb_rows=1 +213070643358488->>server:+SYNC +server-->>213070643358488:-PARSE COMPLETE +server-->>213070643358488:-BIND COMPLETE +server-->>213070643358488:-NO DATA +server-->>213070643358488:-EMPTY QUERY RESPONSE +server-->>213070643358488:-READY FOR QUERY type= +213070643358488->>server:+DISCONNECT +213070643358490->>server:+SSL REQUEST +server-->>213070643358490:-SSL BACKEND ANSWER: N +213070643358490->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358490:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358490:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358490:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358490:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358490:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358490:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358490:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358490:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358490:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358490:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358490:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358490:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358490:-BACKEND KEY DATA pid=1713101217, key=29850369 +server-->>213070643358490:-READY FOR QUERY type= +213070643358490->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358490->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358490->>server:+EXECUTE name='', nb_rows=1 +213070643358490->>server:+SYNC +server-->>213070643358490:-PARSE COMPLETE +server-->>213070643358490:-BIND COMPLETE +server-->>213070643358490:-COMMAND COMPLETE command='SET' +server-->>213070643358490:-READY FOR QUERY type= +213070643358490->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358490->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358490->>server:+EXECUTE name='', nb_rows=1 +213070643358490->>server:+SYNC +server-->>213070643358490:-PARSE COMPLETE +server-->>213070643358490:-BIND COMPLETE +server-->>213070643358490:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358490:-COMMAND COMPLETE command='SET' +server-->>213070643358490:-READY FOR QUERY type= +213070643358490->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358490->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358490->>server:+DESCRIBE kind='P', name='' +213070643358490->>server:+EXECUTE name='', nb_rows=1 +213070643358490->>server:+SYNC +server-->>213070643358490:-PARSE COMPLETE +server-->>213070643358490:-BIND COMPLETE +server-->>213070643358490:-NO DATA +server-->>213070643358490:-EMPTY QUERY RESPONSE +server-->>213070643358490:-READY FOR QUERY type= +213070643358490->>server:+PARSE name='', num_params=0, params_type=, query=SELECT VERSION() AS version +213070643358490->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358490->>server:+DESCRIBE kind='P', name='' +213070643358490->>server:+EXECUTE name='', nb_rows=0 +213070643358490->>server:+SYNC +server-->>213070643358490:-PARSE COMPLETE +server-->>213070643358490:-BIND COMPLETE +server-->>213070643358490:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='version' type=25 type_len=65535 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643358490:-DATA ROW num_values=1 ---[Value 0001]--- length=27 value='PostgresSQL 13.0 (molecula)' +server-->>213070643358490:-COMMAND COMPLETE command='SELECT' +server-->>213070643358490:-READY FOR QUERY type= +213070643358490->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358490->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358490->>server:+DESCRIBE kind='P', name='' +213070643358490->>server:+EXECUTE name='', nb_rows=1 +213070643358490->>server:+SYNC +server-->>213070643358490:-PARSE COMPLETE +server-->>213070643358490:-BIND COMPLETE +server-->>213070643358490:-NO DATA +server-->>213070643358490:-EMPTY QUERY RESPONSE +server-->>213070643358490:-READY FOR QUERY type= +213070643358490->>server:+PARSE name='', num_params=0, params_type=, query= SELECT pid as id, query as stmt, EXTRACT(seconds from query_start - NOW()) as elapsed_time FROM pg_stat_activity WHERE usename='docker' +213070643358490->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358490->>server:+DESCRIBE kind='P', name='' +213070643358490->>server:+EXECUTE name='', nb_rows=0 +213070643358490->>server:+SYNC +server-->>213070643358490:-PARSE COMPLETE +server-->>213070643358490:-BIND COMPLETE +server-->>213070643358490:-ROW DESCRIPTION: num_fields=3 ---[Field 01]--- name='id' type=23 type_len=4 type_mod=4294967295 relid=0 attnum=0 format=0 ---[Field 02]--- name='stmt' type=25 type_len=65535 type_mod=4294967295 relid=0 attnum=0 format=0 ---[Field 03]--- name='elapsed_time' type=701 type_len=8 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643358490:-DATA ROW num_values=3 ---[Value 0001]--- length=9 value='413235241' ---[Value 0002]--- length=148 value=' SELECT COUNT(*). FROM pg_type AS t0,. pg_aggregate AS t1,. pg_settings AS t2,. pg_settings AS t3.' ---[Value 0003]--- length=11 value='1.311371547' +server-->>213070643358490:-DATA ROW num_values=3 ---[Value 0001]--- length=10 value='1713101217' ---[Value 0002]--- length=190 value=' SELECT pid as id,. query as stmt,. EXTRACT(seconds from query_start - NOW()) as elapsed_time. FROM pg_stat_activity. WHERE usename='docker'.' ---[Value 0003]--- length=11 value='0.000169969' +server-->>213070643358490:-COMMAND COMPLETE command='SELECT' +server-->>213070643358490:-READY FOR QUERY type= +213070643358492->>server:+SSL REQUEST +server-->>213070643358492:-SSL BACKEND ANSWER: N +213070643358492->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358492:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358492:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358492:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358492:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358492:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358492:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358492:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358492:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358492:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358492:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358492:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358492:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358492:-BACKEND KEY DATA pid=2034361563, key=1419995666 +server-->>213070643358492:-READY FOR QUERY type= +213070643358492->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358492->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358492->>server:+EXECUTE name='', nb_rows=1 +213070643358492->>server:+SYNC +server-->>213070643358492:-PARSE COMPLETE +server-->>213070643358492:-BIND COMPLETE +server-->>213070643358492:-COMMAND COMPLETE command='SET' +server-->>213070643358492:-READY FOR QUERY type= +213070643358492->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358492->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358492->>server:+EXECUTE name='', nb_rows=1 +213070643358492->>server:+SYNC +server-->>213070643358492:-PARSE COMPLETE +server-->>213070643358492:-BIND COMPLETE +server-->>213070643358492:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358492:-COMMAND COMPLETE command='SET' +server-->>213070643358492:-READY FOR QUERY type= +213070643358492->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358492->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358492->>server:+DESCRIBE kind='P', name='' +213070643358492->>server:+EXECUTE name='', nb_rows=1 +213070643358492->>server:+SYNC +server-->>213070643358492:-PARSE COMPLETE +server-->>213070643358492:-BIND COMPLETE +server-->>213070643358492:-NO DATA +server-->>213070643358492:-EMPTY QUERY RESPONSE +server-->>213070643358492:-READY FOR QUERY type= +213070643358492->>server:+DISCONNECT +213070643358494->>server:+SSL REQUEST +server-->>213070643358494:-SSL BACKEND ANSWER: N +213070643358494->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358494:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358494:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358494:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358494:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358494:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358494:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358494:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358494:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358494:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358494:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358494:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358494:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358494:-BACKEND KEY DATA pid=964429462, key=1673405115 +server-->>213070643358494:-READY FOR QUERY type= +213070643358494->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358494->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358494->>server:+EXECUTE name='', nb_rows=1 +213070643358494->>server:+SYNC +server-->>213070643358494:-PARSE COMPLETE +server-->>213070643358494:-BIND COMPLETE +server-->>213070643358494:-COMMAND COMPLETE command='SET' +server-->>213070643358494:-READY FOR QUERY type= +213070643358494->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358494->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358494->>server:+EXECUTE name='', nb_rows=1 +213070643358494->>server:+SYNC +server-->>213070643358494:-PARSE COMPLETE +server-->>213070643358494:-BIND COMPLETE +server-->>213070643358494:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358494:-COMMAND COMPLETE command='SET' +server-->>213070643358494:-READY FOR QUERY type= +213070643358494->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358494->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358494->>server:+DESCRIBE kind='P', name='' +213070643358494->>server:+EXECUTE name='', nb_rows=1 +213070643358494->>server:+SYNC +server-->>213070643358494:-PARSE COMPLETE +server-->>213070643358494:-BIND COMPLETE +server-->>213070643358494:-NO DATA +server-->>213070643358494:-EMPTY QUERY RESPONSE +server-->>213070643358494:-READY FOR QUERY type= +213070643358494->>server:+PARSE name='', num_params=0, params_type=, query=select pg_terminate_backend(413235241) +213070643358494->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358494->>server:+DESCRIBE kind='P', name='' +213070643358494->>server:+EXECUTE name='', nb_rows=0 +213070643358494->>server:+SYNC +server-->>213070643358494:-PARSE COMPLETE +server-->>213070643358494:-BIND COMPLETE +server-->>213070643358494:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='pg_terminate_backend' type=16 type_len=1 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643358494:-DATA ROW num_values=1 ---[Value 0001]--- length=1 value='t' +server-->>213070643358494:-COMMAND COMPLETE command='SELECT 1' +server-->>213070643358486:-PARSE COMPLETE +server-->>213070643358486:-BIND COMPLETE +server-->>213070643358486:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='count' type=20 type_len=8 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643358486:-ERROR RESPONSE Severity: 'FATAL' Message: 'terminating connection due to administrator command' Code: '57P01' +server-->>213070643358494:-READY FOR QUERY type= +213070643358490->>server:+DISCONNECT +213070643358494->>server:+DISCONNECT +213070643358496->>server:+SSL REQUEST +server-->>213070643358496:-SSL BACKEND ANSWER: N +213070643358496->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358496:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358496:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358496:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358496:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358496:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358496:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358496:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358496:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358496:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358496:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358496:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358496:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358496:-BACKEND KEY DATA pid=841257432, key=992978867 +server-->>213070643358496:-READY FOR QUERY type= +213070643358496->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358496->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358496->>server:+EXECUTE name='', nb_rows=1 +213070643358496->>server:+SYNC +server-->>213070643358496:-PARSE COMPLETE +server-->>213070643358496:-BIND COMPLETE +server-->>213070643358496:-COMMAND COMPLETE command='SET' +server-->>213070643358496:-READY FOR QUERY type= +213070643358496->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358496->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358496->>server:+EXECUTE name='', nb_rows=1 +213070643358496->>server:+SYNC +server-->>213070643358496:-PARSE COMPLETE +server-->>213070643358496:-BIND COMPLETE +server-->>213070643358496:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358496:-COMMAND COMPLETE command='SET' +server-->>213070643358496:-READY FOR QUERY type= +213070643358496->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358496->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358496->>server:+DESCRIBE kind='P', name='' +213070643358496->>server:+EXECUTE name='', nb_rows=1 +213070643358496->>server:+SYNC +server-->>213070643358496:-PARSE COMPLETE +server-->>213070643358496:-BIND COMPLETE +server-->>213070643358496:-NO DATA +server-->>213070643358496:-EMPTY QUERY RESPONSE +server-->>213070643358496:-READY FOR QUERY type= +213070643358496->>server:+DISCONNECT +213070643358498->>server:+SSL REQUEST +server-->>213070643358498:-SSL BACKEND ANSWER: N +213070643358498->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358498:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358498:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358498:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358498:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358498:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358498:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358498:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358498:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358498:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358498:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358498:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358498:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358498:-BACKEND KEY DATA pid=645931978, key=579078180 +server-->>213070643358498:-READY FOR QUERY type= +213070643358498->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358498->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358498->>server:+EXECUTE name='', nb_rows=1 +213070643358498->>server:+SYNC +server-->>213070643358498:-PARSE COMPLETE +server-->>213070643358498:-BIND COMPLETE +server-->>213070643358498:-COMMAND COMPLETE command='SET' +server-->>213070643358498:-READY FOR QUERY type= +213070643358498->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358498->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358498->>server:+EXECUTE name='', nb_rows=1 +213070643358498->>server:+SYNC +server-->>213070643358498:-PARSE COMPLETE +server-->>213070643358498:-BIND COMPLETE +server-->>213070643358498:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358498:-COMMAND COMPLETE command='SET' +server-->>213070643358498:-READY FOR QUERY type= +213070643358498->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358498->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358498->>server:+DESCRIBE kind='P', name='' +213070643358498->>server:+EXECUTE name='', nb_rows=1 +213070643358498->>server:+SYNC +server-->>213070643358498:-PARSE COMPLETE +server-->>213070643358498:-BIND COMPLETE +server-->>213070643358498:-NO DATA +server-->>213070643358498:-EMPTY QUERY RESPONSE +server-->>213070643358498:-READY FOR QUERY type= +213070643358498->>server:+PARSE name='', num_params=0, params_type=, query=SELECT 1 +213070643358498->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358498->>server:+DESCRIBE kind='P', name='' +213070643358498->>server:+EXECUTE name='', nb_rows=0 +213070643358498->>server:+SYNC +server-->>213070643358498:-PARSE COMPLETE +server-->>213070643358498:-BIND COMPLETE +server-->>213070643358498:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='?column?' type=23 type_len=4 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643358498:-DATA ROW num_values=1 ---[Value 0001]--- length=1 value='1' +server-->>213070643358498:-COMMAND COMPLETE command='SELECT' +server-->>213070643358498:-READY FOR QUERY type= +213070643358498->>server:+DISCONNECT +213070643358500->>server:+SSL REQUEST +server-->>213070643358500:-SSL BACKEND ANSWER: N +213070643358500->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358500:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358500:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358500:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358500:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358500:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358500:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358500:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358500:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358500:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358500:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358500:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358500:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358500:-BACKEND KEY DATA pid=1632401438, key=1341645778 +server-->>213070643358500:-READY FOR QUERY type= +213070643358500->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358500->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358500->>server:+EXECUTE name='', nb_rows=1 +213070643358500->>server:+SYNC +server-->>213070643358500:-PARSE COMPLETE +server-->>213070643358500:-BIND COMPLETE +server-->>213070643358500:-COMMAND COMPLETE command='SET' +server-->>213070643358500:-READY FOR QUERY type= +213070643358500->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358500->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358500->>server:+EXECUTE name='', nb_rows=1 +213070643358500->>server:+SYNC +server-->>213070643358500:-PARSE COMPLETE +server-->>213070643358500:-BIND COMPLETE +server-->>213070643358500:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358500:-COMMAND COMPLETE command='SET' +server-->>213070643358500:-READY FOR QUERY type= +213070643358500->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358500->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358500->>server:+DESCRIBE kind='P', name='' +213070643358500->>server:+EXECUTE name='', nb_rows=1 +213070643358500->>server:+SYNC +server-->>213070643358500:-PARSE COMPLETE +server-->>213070643358500:-BIND COMPLETE +server-->>213070643358500:-NO DATA +server-->>213070643358500:-EMPTY QUERY RESPONSE +server-->>213070643358500:-READY FOR QUERY type= +213070643358500->>server:+DISCONNECT +213070643358502->>server:+SSL REQUEST +server-->>213070643358502:-SSL BACKEND ANSWER: N +213070643358502->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643358502:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643358502:-PARAMETER STATUS name='application_name', value='' +server-->>213070643358502:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643358502:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643358502:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643358502:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643358502:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643358502:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643358502:-PARAMETER STATUS name='server_version', value='13.0.0' +server-->>213070643358502:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643358502:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643358502:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643358502:-BACKEND KEY DATA pid=232586748, key=226557416 +server-->>213070643358502:-READY FOR QUERY type= +213070643358502->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643358502->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358502->>server:+EXECUTE name='', nb_rows=1 +213070643358502->>server:+SYNC +server-->>213070643358502:-PARSE COMPLETE +server-->>213070643358502:-BIND COMPLETE +server-->>213070643358502:-COMMAND COMPLETE command='SET' +server-->>213070643358502:-READY FOR QUERY type= +213070643358502->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643358502->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358502->>server:+EXECUTE name='', nb_rows=1 +213070643358502->>server:+SYNC +server-->>213070643358502:-PARSE COMPLETE +server-->>213070643358502:-BIND COMPLETE +server-->>213070643358502:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643358502:-COMMAND COMPLETE command='SET' +server-->>213070643358502:-READY FOR QUERY type= +213070643358502->>server:+PARSE name='', num_params=0, params_type=, query= +213070643358502->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358502->>server:+DESCRIBE kind='P', name='' +213070643358502->>server:+EXECUTE name='', nb_rows=1 +213070643358502->>server:+SYNC +server-->>213070643358502:-PARSE COMPLETE +server-->>213070643358502:-BIND COMPLETE +server-->>213070643358502:-NO DATA +server-->>213070643358502:-EMPTY QUERY RESPONSE +server-->>213070643358502:-READY FOR QUERY type= +213070643358502->>server:+PARSE name='', num_params=0, params_type=, query=SELECT VERSION() AS version +213070643358502->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643358502->>server:+DESCRIBE kind='P', name='' +213070643358502->>server:+EXECUTE name='', nb_rows=0 +213070643358502->>server:+SYNC +server-->>213070643358502:-PARSE COMPLETE +server-->>213070643358502:-BIND COMPLETE +server-->>213070643358502:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='version' type=25 type_len=65535 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643358502:-DATA ROW num_values=1 ---[Value 0001]--- length=27 value='PostgresSQL 13.0 (molecula)' +server-->>213070643358502:-COMMAND COMPLETE command='SELECT' +server-->>213070643358502:-READY FOR QUERY type= +213070643358502->>server:+DISCONNECT +``` diff --git a/pg/lookerToPostgres.md b/pg/lookerToPostgres.md new file mode 100644 index 000000000..53ef945be --- /dev/null +++ b/pg/lookerToPostgres.md @@ -0,0 +1,677 @@ +```mermaid +sequenceDiagram + +participant 213070643360888 as c0 +participant 213070643360892 as c1 +participant 213070643360896 as c2 +participant 213070643360900 as c3 +participant 213070643360904 as c4 +participant 213070643360908 as c5 +participant 213070643360912 as c6 +participant 213070643360916 as c7 +participant 213070643360920 as c8 +participant 213070643360924 as c9 +participant 213070643360928 as c10 +participant 213070643360932 as c11 +213070643360888->>server:+SSL REQUEST +server-->>213070643360888:-SSL BACKEND ANSWER: N +213070643360888->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360888:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='affbc4bf') +213070643360888->>server:+PASSWORD MESSAGE password=md5de1ae46649b137ee14e14d8fd5fc6cb6 +server-->>213070643360888:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360888:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360888:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360888:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360888:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360888:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360888:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360888:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360888:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360888:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360888:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360888:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360888:-BACKEND KEY DATA pid=97, key=2120775944 +server-->>213070643360888:-READY FOR QUERY type= +213070643360888->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360888->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360888->>server:+EXECUTE name='', nb_rows=1 +213070643360888->>server:+SYNC +server-->>213070643360888:-PARSE COMPLETE +server-->>213070643360888:-BIND COMPLETE +server-->>213070643360888:-COMMAND COMPLETE command='SET' +server-->>213070643360888:-READY FOR QUERY type= +213070643360888->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360888->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360888->>server:+EXECUTE name='', nb_rows=1 +213070643360888->>server:+SYNC +server-->>213070643360888:-PARSE COMPLETE +server-->>213070643360888:-BIND COMPLETE +server-->>213070643360888:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360888:-COMMAND COMPLETE command='SET' +server-->>213070643360888:-READY FOR QUERY type= +213070643360888->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360888->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360888->>server:+DESCRIBE kind='P', name='' +213070643360888->>server:+EXECUTE name='', nb_rows=1 +213070643360888->>server:+SYNC +server-->>213070643360888:-PARSE COMPLETE +server-->>213070643360888:-BIND COMPLETE +server-->>213070643360888:-NO DATA +server-->>213070643360888:-EMPTY QUERY RESPONSE +server-->>213070643360888:-READY FOR QUERY type= +213070643360888->>server:+DISCONNECT +213070643360892->>server:+SSL REQUEST +server-->>213070643360892:-SSL BACKEND ANSWER: N +213070643360892->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360892:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='0b76ce86') +213070643360892->>server:+PASSWORD MESSAGE password=md5b82e4b6283fe5694c0199ca058378bb8 +server-->>213070643360892:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360892:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360892:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360892:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360892:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360892:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360892:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360892:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360892:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360892:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360892:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360892:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360892:-BACKEND KEY DATA pid=98, key=1329847468 +server-->>213070643360892:-READY FOR QUERY type= +213070643360892->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360892->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360892->>server:+EXECUTE name='', nb_rows=1 +213070643360892->>server:+SYNC +server-->>213070643360892:-PARSE COMPLETE +server-->>213070643360892:-BIND COMPLETE +server-->>213070643360892:-COMMAND COMPLETE command='SET' +server-->>213070643360892:-READY FOR QUERY type= +213070643360892->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360892->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360892->>server:+EXECUTE name='', nb_rows=1 +213070643360892->>server:+SYNC +server-->>213070643360892:-PARSE COMPLETE +server-->>213070643360892:-BIND COMPLETE +server-->>213070643360892:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360892:-COMMAND COMPLETE command='SET' +server-->>213070643360892:-READY FOR QUERY type= +213070643360892->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360892->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360892->>server:+DESCRIBE kind='P', name='' +213070643360892->>server:+EXECUTE name='', nb_rows=1 +213070643360892->>server:+SYNC +server-->>213070643360892:-PARSE COMPLETE +server-->>213070643360892:-BIND COMPLETE +server-->>213070643360892:-NO DATA +server-->>213070643360892:-EMPTY QUERY RESPONSE +server-->>213070643360892:-READY FOR QUERY type= +213070643360892->>server:+DISCONNECT +213070643360896->>server:+SSL REQUEST +server-->>213070643360896:-SSL BACKEND ANSWER: N +213070643360896->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360896:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='80e88231') +213070643360896->>server:+PASSWORD MESSAGE password=md59023db05ad8c94976359641cf0ada45a +server-->>213070643360896:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360896:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360896:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360896:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360896:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360896:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360896:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360896:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360896:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360896:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360896:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360896:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360896:-BACKEND KEY DATA pid=99, key=1084480878 +server-->>213070643360896:-READY FOR QUERY type= +213070643360896->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360896->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360896->>server:+EXECUTE name='', nb_rows=1 +213070643360896->>server:+SYNC +server-->>213070643360896:-PARSE COMPLETE +server-->>213070643360896:-BIND COMPLETE +server-->>213070643360896:-COMMAND COMPLETE command='SET' +server-->>213070643360896:-READY FOR QUERY type= +213070643360896->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360896->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360896->>server:+EXECUTE name='', nb_rows=1 +213070643360896->>server:+SYNC +server-->>213070643360896:-PARSE COMPLETE +server-->>213070643360896:-BIND COMPLETE +server-->>213070643360896:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360896:-COMMAND COMPLETE command='SET' +server-->>213070643360896:-READY FOR QUERY type= +213070643360896->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360896->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360896->>server:+DESCRIBE kind='P', name='' +213070643360896->>server:+EXECUTE name='', nb_rows=1 +213070643360896->>server:+SYNC +server-->>213070643360896:-PARSE COMPLETE +server-->>213070643360896:-BIND COMPLETE +server-->>213070643360896:-NO DATA +server-->>213070643360896:-EMPTY QUERY RESPONSE +server-->>213070643360896:-READY FOR QUERY type= +213070643360896->>server:+DISCONNECT +213070643360900->>server:+SSL REQUEST +server-->>213070643360900:-SSL BACKEND ANSWER: N +213070643360900->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360900:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='68a07783') +213070643360900->>server:+PASSWORD MESSAGE password=md5136c8b8ec47347f93827ec5d7023199c +server-->>213070643360900:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360900:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360900:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360900:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360900:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360900:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360900:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360900:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360900:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360900:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360900:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360900:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360900:-BACKEND KEY DATA pid=100, key=594556468 +server-->>213070643360900:-READY FOR QUERY type= +213070643360900->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360900->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360900->>server:+EXECUTE name='', nb_rows=1 +213070643360900->>server:+SYNC +server-->>213070643360900:-PARSE COMPLETE +server-->>213070643360900:-BIND COMPLETE +server-->>213070643360900:-COMMAND COMPLETE command='SET' +server-->>213070643360900:-READY FOR QUERY type= +213070643360900->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360900->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360900->>server:+EXECUTE name='', nb_rows=1 +213070643360900->>server:+SYNC +server-->>213070643360900:-PARSE COMPLETE +server-->>213070643360900:-BIND COMPLETE +server-->>213070643360900:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360900:-COMMAND COMPLETE command='SET' +server-->>213070643360900:-READY FOR QUERY type= +213070643360900->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360900->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360900->>server:+DESCRIBE kind='P', name='' +213070643360900->>server:+EXECUTE name='', nb_rows=1 +213070643360900->>server:+SYNC +server-->>213070643360900:-PARSE COMPLETE +server-->>213070643360900:-BIND COMPLETE +server-->>213070643360900:-NO DATA +server-->>213070643360900:-EMPTY QUERY RESPONSE +server-->>213070643360900:-READY FOR QUERY type= +213070643360900->>server:+PARSE name='', num_params=0, params_type=, query=SELECT pg_backend_pid() +213070643360900->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360900->>server:+DESCRIBE kind='P', name='' +213070643360900->>server:+EXECUTE name='', nb_rows=0 +213070643360900->>server:+SYNC +server-->>213070643360900:-PARSE COMPLETE +server-->>213070643360900:-BIND COMPLETE +server-->>213070643360900:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='pg_backend_pid' type=23 type_len=4 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643360900:-DATA ROW num_values=1 ---[Value 0001]--- length=3 value='100' +server-->>213070643360900:-COMMAND COMPLETE command='SELECT 1' +server-->>213070643360900:-READY FOR QUERY type= +213070643360900->>server:+PARSE name='', num_params=0, params_type=, query=SELECT VERSION() AS version +213070643360900->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360900->>server:+DESCRIBE kind='P', name='' +213070643360900->>server:+EXECUTE name='', nb_rows=0 +213070643360900->>server:+SYNC +server-->>213070643360900:-PARSE COMPLETE +server-->>213070643360900:-BIND COMPLETE +server-->>213070643360900:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='version' type=25 type_len=65535 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643360900:-DATA ROW num_values=1 ---[Value 0001]--- length=112 value='PostgreSQL 13.3 (Debian 13.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit' +server-->>213070643360900:-COMMAND COMPLETE command='SELECT 1' +server-->>213070643360900:-READY FOR QUERY type= +213070643360900->>server:+PARSE name='', num_params=0, params_type=, query= SELECT COUNT(*) FROM pg_type AS t0, pg_aggregate AS t1, pg_settings AS t2, pg_settings AS t3 +213070643360900->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360900->>server:+DESCRIBE kind='P', name='' +213070643360900->>server:+EXECUTE name='', nb_rows=0 +213070643360900->>server:+SYNC +213070643360904->>server:+SSL REQUEST +server-->>213070643360904:-SSL BACKEND ANSWER: N +213070643360904->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360904:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='a03ee692') +213070643360904->>server:+PASSWORD MESSAGE password=md5cfedb52ae0cafa87a4f1066df3ba6802 +server-->>213070643360904:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360904:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360904:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360904:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360904:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360904:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360904:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360904:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360904:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360904:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360904:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360904:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360904:-BACKEND KEY DATA pid=101, key=2854304053 +server-->>213070643360904:-READY FOR QUERY type= +213070643360904->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360904->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360904->>server:+EXECUTE name='', nb_rows=1 +213070643360904->>server:+SYNC +server-->>213070643360904:-PARSE COMPLETE +server-->>213070643360904:-BIND COMPLETE +server-->>213070643360904:-COMMAND COMPLETE command='SET' +server-->>213070643360904:-READY FOR QUERY type= +213070643360904->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360904->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360904->>server:+EXECUTE name='', nb_rows=1 +213070643360904->>server:+SYNC +server-->>213070643360904:-PARSE COMPLETE +server-->>213070643360904:-BIND COMPLETE +server-->>213070643360904:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360904:-COMMAND COMPLETE command='SET' +server-->>213070643360904:-READY FOR QUERY type= +213070643360904->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360904->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360904->>server:+DESCRIBE kind='P', name='' +213070643360904->>server:+EXECUTE name='', nb_rows=1 +213070643360904->>server:+SYNC +server-->>213070643360904:-PARSE COMPLETE +server-->>213070643360904:-BIND COMPLETE +server-->>213070643360904:-NO DATA +server-->>213070643360904:-EMPTY QUERY RESPONSE +server-->>213070643360904:-READY FOR QUERY type= +213070643360904->>server:+DISCONNECT +213070643360908->>server:+SSL REQUEST +server-->>213070643360908:-SSL BACKEND ANSWER: N +213070643360908->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360908:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='be3afb9d') +213070643360908->>server:+PASSWORD MESSAGE password=md57b5cfa30f89fc7733c814addcd548c03 +server-->>213070643360908:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360908:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360908:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360908:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360908:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360908:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360908:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360908:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360908:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360908:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360908:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360908:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360908:-BACKEND KEY DATA pid=102, key=3089396074 +server-->>213070643360908:-READY FOR QUERY type= +213070643360908->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360908->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360908->>server:+EXECUTE name='', nb_rows=1 +213070643360908->>server:+SYNC +server-->>213070643360908:-PARSE COMPLETE +server-->>213070643360908:-BIND COMPLETE +server-->>213070643360908:-COMMAND COMPLETE command='SET' +server-->>213070643360908:-READY FOR QUERY type= +213070643360908->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360908->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360908->>server:+EXECUTE name='', nb_rows=1 +213070643360908->>server:+SYNC +server-->>213070643360908:-PARSE COMPLETE +server-->>213070643360908:-BIND COMPLETE +server-->>213070643360908:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360908:-COMMAND COMPLETE command='SET' +server-->>213070643360908:-READY FOR QUERY type= +213070643360908->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360908->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360908->>server:+DESCRIBE kind='P', name='' +213070643360908->>server:+EXECUTE name='', nb_rows=1 +213070643360908->>server:+SYNC +server-->>213070643360908:-PARSE COMPLETE +server-->>213070643360908:-BIND COMPLETE +server-->>213070643360908:-NO DATA +server-->>213070643360908:-EMPTY QUERY RESPONSE +server-->>213070643360908:-READY FOR QUERY type= +213070643360908->>server:+PARSE name='', num_params=0, params_type=, query=SELECT VERSION() AS version +213070643360908->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360908->>server:+DESCRIBE kind='P', name='' +213070643360908->>server:+EXECUTE name='', nb_rows=0 +213070643360908->>server:+SYNC +server-->>213070643360908:-PARSE COMPLETE +server-->>213070643360908:-BIND COMPLETE +server-->>213070643360908:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='version' type=25 type_len=65535 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643360908:-DATA ROW num_values=1 ---[Value 0001]--- length=112 value='PostgreSQL 13.3 (Debian 13.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit' +server-->>213070643360908:-COMMAND COMPLETE command='SELECT 1' +server-->>213070643360908:-READY FOR QUERY type= +213070643360908->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360908->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360908->>server:+DESCRIBE kind='P', name='' +213070643360908->>server:+EXECUTE name='', nb_rows=1 +213070643360908->>server:+SYNC +server-->>213070643360908:-PARSE COMPLETE +server-->>213070643360908:-BIND COMPLETE +server-->>213070643360908:-NO DATA +server-->>213070643360908:-EMPTY QUERY RESPONSE +server-->>213070643360908:-READY FOR QUERY type= +213070643360908->>server:+PARSE name='', num_params=0, params_type=, query= SELECT pid as id, query as stmt, EXTRACT(seconds from query_start - NOW()) as elapsed_time FROM pg_stat_activity WHERE usename='docker' +213070643360908->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360908->>server:+DESCRIBE kind='P', name='' +213070643360908->>server:+EXECUTE name='', nb_rows=0 +213070643360908->>server:+SYNC +server-->>213070643360908:-PARSE COMPLETE +server-->>213070643360908:-BIND COMPLETE +server-->>213070643360908:-ROW DESCRIPTION: num_fields=3 ---[Field 01]--- name='id' type=23 type_len=4 type_mod=4294967295 relid=12250 attnum=3 format=0 ---[Field 02]--- name='stmt' type=25 type_len=65535 type_mod=4294967295 relid=12250 attnum=20 format=0 ---[Field 03]--- name='elapsed_time' type=701 type_len=8 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643360908:-DATA ROW num_values=3 ---[Value 0001]--- length=2 value='81' ---[Value 0002]--- length=0 value='' ---[Value 0003]--- length=-1 value=NULL +server-->>213070643360908:-DATA ROW num_values=3 ---[Value 0001]--- length=3 value='100' ---[Value 0002]--- length=148 value=' SELECT COUNT(*). FROM pg_type AS t0,. pg_aggregate AS t1,. pg_settings AS t2,. pg_settings AS t3.' ---[Value 0003]--- length=9 value='-1.155449' +server-->>213070643360908:-DATA ROW num_values=3 ---[Value 0001]--- length=3 value='102' ---[Value 0002]--- length=190 value=' SELECT pid as id,. query as stmt,. EXTRACT(seconds from query_start - NOW()) as elapsed_time. FROM pg_stat_activity. WHERE usename='docker'.' ---[Value 0003]--- length=8 value='0.002903' +server-->>213070643360908:-COMMAND COMPLETE command='SELECT 3' +server-->>213070643360908:-READY FOR QUERY type= +213070643360912->>server:+SSL REQUEST +server-->>213070643360912:-SSL BACKEND ANSWER: N +213070643360912->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360912:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='14444412') +213070643360912->>server:+PASSWORD MESSAGE password=md59cef18c88b7988d7ac2f215fc1569c62 +server-->>213070643360912:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360912:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360912:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360912:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360912:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360912:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360912:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360912:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360912:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360912:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360912:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360912:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360912:-BACKEND KEY DATA pid=103, key=1911102642 +server-->>213070643360912:-READY FOR QUERY type= +213070643360912->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360912->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360912->>server:+EXECUTE name='', nb_rows=1 +213070643360912->>server:+SYNC +server-->>213070643360912:-PARSE COMPLETE +server-->>213070643360912:-BIND COMPLETE +server-->>213070643360912:-COMMAND COMPLETE command='SET' +server-->>213070643360912:-READY FOR QUERY type= +213070643360912->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360912->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360912->>server:+EXECUTE name='', nb_rows=1 +213070643360912->>server:+SYNC +server-->>213070643360912:-PARSE COMPLETE +server-->>213070643360912:-BIND COMPLETE +server-->>213070643360912:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360912:-COMMAND COMPLETE command='SET' +server-->>213070643360912:-READY FOR QUERY type= +213070643360912->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360912->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360912->>server:+DESCRIBE kind='P', name='' +213070643360912->>server:+EXECUTE name='', nb_rows=1 +213070643360912->>server:+SYNC +server-->>213070643360912:-PARSE COMPLETE +server-->>213070643360912:-BIND COMPLETE +server-->>213070643360912:-NO DATA +server-->>213070643360912:-EMPTY QUERY RESPONSE +server-->>213070643360912:-READY FOR QUERY type= +213070643360912->>server:+DISCONNECT +213070643360916->>server:+SSL REQUEST +server-->>213070643360916:-SSL BACKEND ANSWER: N +213070643360916->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360916:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='9eb7546f') +213070643360916->>server:+PASSWORD MESSAGE password=md5c7655226306ab14fa17e44dba876a348 +server-->>213070643360916:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360916:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360916:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360916:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360916:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360916:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360916:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360916:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360916:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360916:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360916:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360916:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360916:-BACKEND KEY DATA pid=104, key=927987783 +server-->>213070643360916:-READY FOR QUERY type= +213070643360916->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360916->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360916->>server:+EXECUTE name='', nb_rows=1 +213070643360916->>server:+SYNC +server-->>213070643360916:-PARSE COMPLETE +server-->>213070643360916:-BIND COMPLETE +server-->>213070643360916:-COMMAND COMPLETE command='SET' +server-->>213070643360916:-READY FOR QUERY type= +213070643360916->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360916->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360916->>server:+EXECUTE name='', nb_rows=1 +213070643360916->>server:+SYNC +server-->>213070643360916:-PARSE COMPLETE +server-->>213070643360916:-BIND COMPLETE +server-->>213070643360916:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360916:-COMMAND COMPLETE command='SET' +server-->>213070643360916:-READY FOR QUERY type= +213070643360916->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360916->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360916->>server:+DESCRIBE kind='P', name='' +213070643360916->>server:+EXECUTE name='', nb_rows=1 +213070643360916->>server:+SYNC +server-->>213070643360916:-PARSE COMPLETE +server-->>213070643360916:-BIND COMPLETE +server-->>213070643360916:-NO DATA +server-->>213070643360916:-EMPTY QUERY RESPONSE +server-->>213070643360916:-READY FOR QUERY type= +213070643360916->>server:+PARSE name='', num_params=0, params_type=, query=select pg_terminate_backend(100) +213070643360916->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360916->>server:+DESCRIBE kind='P', name='' +213070643360916->>server:+EXECUTE name='', nb_rows=0 +213070643360916->>server:+SYNC +server-->>213070643360916:-PARSE COMPLETE +server-->>213070643360916:-BIND COMPLETE +server-->>213070643360916:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='pg_terminate_backend' type=16 type_len=1 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643360916:-DATA ROW num_values=1 ---[Value 0001]--- length=1 value='t' +server-->>213070643360916:-COMMAND COMPLETE command='SELECT 1' +server-->>213070643360916:-READY FOR QUERY type= +server-->>213070643360900:-PARSE COMPLETE +server-->>213070643360900:-BIND COMPLETE +server-->>213070643360900:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='count' type=20 type_len=8 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643360900:-ERROR RESPONSE File: 'postgres.c' Severity: 'FATAL' Message: 'terminating connection due to administrator command' Code: '57P01' Routine: 'ProcessInterrupts' Line: '3090' +213070643360908->>server:+DISCONNECT +213070643360916->>server:+DISCONNECT +213070643360920->>server:+SSL REQUEST +server-->>213070643360920:-SSL BACKEND ANSWER: N +213070643360920->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360920:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='1ad4dcf7') +213070643360920->>server:+PASSWORD MESSAGE password=md554de511c5219f67a8bbe92da445fa5a2 +server-->>213070643360920:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360920:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360920:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360920:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360920:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360920:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360920:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360920:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360920:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360920:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360920:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360920:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360920:-BACKEND KEY DATA pid=105, key=3630332440 +server-->>213070643360920:-READY FOR QUERY type= +213070643360920->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360920->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360920->>server:+EXECUTE name='', nb_rows=1 +213070643360920->>server:+SYNC +server-->>213070643360920:-PARSE COMPLETE +server-->>213070643360920:-BIND COMPLETE +server-->>213070643360920:-COMMAND COMPLETE command='SET' +server-->>213070643360920:-READY FOR QUERY type= +213070643360920->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360920->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360920->>server:+EXECUTE name='', nb_rows=1 +213070643360920->>server:+SYNC +server-->>213070643360920:-PARSE COMPLETE +server-->>213070643360920:-BIND COMPLETE +server-->>213070643360920:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360920:-COMMAND COMPLETE command='SET' +server-->>213070643360920:-READY FOR QUERY type= +213070643360920->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360920->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360920->>server:+DESCRIBE kind='P', name='' +213070643360920->>server:+EXECUTE name='', nb_rows=1 +213070643360920->>server:+SYNC +server-->>213070643360920:-PARSE COMPLETE +server-->>213070643360920:-BIND COMPLETE +server-->>213070643360920:-NO DATA +server-->>213070643360920:-EMPTY QUERY RESPONSE +server-->>213070643360920:-READY FOR QUERY type= +213070643360920->>server:+DISCONNECT +213070643360924->>server:+SSL REQUEST +server-->>213070643360924:-SSL BACKEND ANSWER: N +213070643360924->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360924:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='494c352f') +213070643360924->>server:+PASSWORD MESSAGE password=md5919fc9ed056904fa0d8e1dd00625a556 +server-->>213070643360924:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360924:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360924:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360924:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360924:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360924:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360924:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360924:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360924:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360924:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360924:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360924:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360924:-BACKEND KEY DATA pid=106, key=3364308023 +server-->>213070643360924:-READY FOR QUERY type= +213070643360924->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360924->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360924->>server:+EXECUTE name='', nb_rows=1 +213070643360924->>server:+SYNC +server-->>213070643360924:-PARSE COMPLETE +server-->>213070643360924:-BIND COMPLETE +server-->>213070643360924:-COMMAND COMPLETE command='SET' +server-->>213070643360924:-READY FOR QUERY type= +213070643360924->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360924->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360924->>server:+EXECUTE name='', nb_rows=1 +213070643360924->>server:+SYNC +server-->>213070643360924:-PARSE COMPLETE +server-->>213070643360924:-BIND COMPLETE +server-->>213070643360924:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360924:-COMMAND COMPLETE command='SET' +server-->>213070643360924:-READY FOR QUERY type= +213070643360924->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360924->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360924->>server:+DESCRIBE kind='P', name='' +213070643360924->>server:+EXECUTE name='', nb_rows=1 +213070643360924->>server:+SYNC +server-->>213070643360924:-PARSE COMPLETE +server-->>213070643360924:-BIND COMPLETE +server-->>213070643360924:-NO DATA +server-->>213070643360924:-EMPTY QUERY RESPONSE +server-->>213070643360924:-READY FOR QUERY type= +213070643360924->>server:+PARSE name='', num_params=0, params_type=, query=SELECT 1 +213070643360924->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360924->>server:+DESCRIBE kind='P', name='' +213070643360924->>server:+EXECUTE name='', nb_rows=0 +213070643360924->>server:+SYNC +server-->>213070643360924:-PARSE COMPLETE +server-->>213070643360924:-BIND COMPLETE +server-->>213070643360924:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='?column?' type=23 type_len=4 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643360924:-DATA ROW num_values=1 ---[Value 0001]--- length=1 value='1' +server-->>213070643360924:-COMMAND COMPLETE command='SELECT 1' +server-->>213070643360924:-READY FOR QUERY type= +213070643360924->>server:+DISCONNECT +213070643360928->>server:+SSL REQUEST +server-->>213070643360928:-SSL BACKEND ANSWER: N +213070643360928->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360928:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='4b2173db') +213070643360928->>server:+PASSWORD MESSAGE password=md53977c39c5c7cdef7f80e74b256a8ce25 +server-->>213070643360928:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360928:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360928:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360928:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360928:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360928:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360928:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360928:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360928:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360928:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360928:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360928:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360928:-BACKEND KEY DATA pid=107, key=1988416582 +server-->>213070643360928:-READY FOR QUERY type= +213070643360928->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360928->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360928->>server:+EXECUTE name='', nb_rows=1 +213070643360928->>server:+SYNC +server-->>213070643360928:-PARSE COMPLETE +server-->>213070643360928:-BIND COMPLETE +server-->>213070643360928:-COMMAND COMPLETE command='SET' +server-->>213070643360928:-READY FOR QUERY type= +213070643360928->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360928->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360928->>server:+EXECUTE name='', nb_rows=1 +213070643360928->>server:+SYNC +server-->>213070643360928:-PARSE COMPLETE +server-->>213070643360928:-BIND COMPLETE +server-->>213070643360928:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360928:-COMMAND COMPLETE command='SET' +server-->>213070643360928:-READY FOR QUERY type= +213070643360928->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360928->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360928->>server:+DESCRIBE kind='P', name='' +213070643360928->>server:+EXECUTE name='', nb_rows=1 +213070643360928->>server:+SYNC +server-->>213070643360928:-PARSE COMPLETE +server-->>213070643360928:-BIND COMPLETE +server-->>213070643360928:-NO DATA +server-->>213070643360928:-EMPTY QUERY RESPONSE +server-->>213070643360928:-READY FOR QUERY type= +213070643360928->>server:+DISCONNECT +213070643360932->>server:+SSL REQUEST +server-->>213070643360932:-SSL BACKEND ANSWER: N +213070643360932->>server:+STARTUP MESSAGE version: 3 database=trait_store extra_float_digits=2 TimeZone=GMT client_encoding=UTF8 user=docker DateStyle=ISO +server-->>213070643360932:-AUTHENTIFICATION REQUEST code=5 (MD5 salt='f6d0f51d') +213070643360932->>server:+PASSWORD MESSAGE password=md5b5b322fe9bcc7c242c6b44cc8a7898e8 +server-->>213070643360932:-AUTHENTIFICATION REQUEST code=0 (SUCCESS) +server-->>213070643360932:-PARAMETER STATUS name='application_name', value='' +server-->>213070643360932:-PARAMETER STATUS name='client_encoding', value='UTF8' +server-->>213070643360932:-PARAMETER STATUS name='DateStyle', value='ISO, MDY' +server-->>213070643360932:-PARAMETER STATUS name='integer_datetimes', value='on' +server-->>213070643360932:-PARAMETER STATUS name='IntervalStyle', value='postgres' +server-->>213070643360932:-PARAMETER STATUS name='is_superuser', value='on' +server-->>213070643360932:-PARAMETER STATUS name='server_encoding', value='UTF8' +server-->>213070643360932:-PARAMETER STATUS name='server_version', value='13.3 (Debian 13.3-1.pgdg100+1)' +server-->>213070643360932:-PARAMETER STATUS name='session_authorization', value='docker' +server-->>213070643360932:-PARAMETER STATUS name='standard_conforming_strings', value='on' +server-->>213070643360932:-PARAMETER STATUS name='TimeZone', value='GMT' +server-->>213070643360932:-BACKEND KEY DATA pid=108, key=997991029 +server-->>213070643360932:-READY FOR QUERY type= +213070643360932->>server:+PARSE name='', num_params=0, params_type=, query=SET extra_float_digits = 3 +213070643360932->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360932->>server:+EXECUTE name='', nb_rows=1 +213070643360932->>server:+SYNC +server-->>213070643360932:-PARSE COMPLETE +server-->>213070643360932:-BIND COMPLETE +server-->>213070643360932:-COMMAND COMPLETE command='SET' +server-->>213070643360932:-READY FOR QUERY type= +213070643360932->>server:+PARSE name='', num_params=0, params_type=, query=SET application_name = 'PostgreSQL JDBC Driver' +213070643360932->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360932->>server:+EXECUTE name='', nb_rows=1 +213070643360932->>server:+SYNC +server-->>213070643360932:-PARSE COMPLETE +server-->>213070643360932:-BIND COMPLETE +server-->>213070643360932:-PARAMETER STATUS name='application_name', value='PostgreSQL JDBC Driver' +server-->>213070643360932:-COMMAND COMPLETE command='SET' +server-->>213070643360932:-READY FOR QUERY type= +213070643360932->>server:+PARSE name='', num_params=0, params_type=, query= +213070643360932->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360932->>server:+DESCRIBE kind='P', name='' +213070643360932->>server:+EXECUTE name='', nb_rows=1 +213070643360932->>server:+SYNC +server-->>213070643360932:-PARSE COMPLETE +server-->>213070643360932:-BIND COMPLETE +server-->>213070643360932:-NO DATA +server-->>213070643360932:-EMPTY QUERY RESPONSE +server-->>213070643360932:-READY FOR QUERY type= +213070643360932->>server:+PARSE name='', num_params=0, params_type=, query=SELECT VERSION() AS version +213070643360932->>server:+BIND portal='', name='', num_formats=0, formats=, num_params=0, params= +213070643360932->>server:+DESCRIBE kind='P', name='' +213070643360932->>server:+EXECUTE name='', nb_rows=0 +213070643360932->>server:+SYNC +server-->>213070643360932:-PARSE COMPLETE +server-->>213070643360932:-BIND COMPLETE +server-->>213070643360932:-ROW DESCRIPTION: num_fields=1 ---[Field 01]--- name='version' type=25 type_len=65535 type_mod=4294967295 relid=0 attnum=0 format=0 +server-->>213070643360932:-DATA ROW num_values=1 ---[Value 0001]--- length=112 value='PostgreSQL 13.3 (Debian 13.3-1.pgdg100+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 8.3.0-6) 8.3.0, 64-bit' +server-->>213070643360932:-COMMAND COMPLETE command='SELECT 1' +server-->>213070643360932:-READY FOR QUERY type= +213070643360932->>server:+DISCONNECT +``` diff --git a/pg/message/message.go b/pg/message/message.go index caf8214d3..9fb6871ee 100644 --- a/pg/message/message.go +++ b/pg/message/message.go @@ -17,6 +17,7 @@ package message import ( "bytes" "encoding/binary" + "fmt" ) // Type is a byte indicating the type of a Postgres message. @@ -29,11 +30,11 @@ const ( // TypeReadyForQuery is a message used to indicate that the server is ready for another query. TypeReadyForQuery Type = 'Z' - // TypeCommandComplete is a message used to indicate that a query has completed. + // TypeCommandComplete is a Backend message used to indicate that a query has completed. TypeCommandComplete Type = 'C' - // TypeError is an error message. - TypeError Type = 'E' + // TypeClos is a message used to indicate that a query has completed. Frontend + TypeClose Type = 'C' // TypeRowDescription is a message indicating the column types of the result rows from a query. TypeRowDescription Type = 'T' @@ -52,6 +53,20 @@ const ( // TypeBackendKeyData contains a cancellation key for the client to use later. TypeBackendKeyData Type = 'K' + + TypeParse Type = 'P' + TypeParseComplete Type = '1' + + TypeBind Type = 'B' + TypeBindComplete Type = '2' + + TypeExecute Type = 'E' // Frontend + TypeError Type = 'E' // Backend + TypeSync Type = 'S' // Frontend + TypeParameterStatus Type = 'S' // Backend + TypeDescribe Type = 'D' // Frontend + TypeNoData Type = 'n' // backend + TypeEmptyQueryResponse Type = 'I' // backend ) // AuthenticationOK is a message indicating that authentication has completed. @@ -59,6 +74,22 @@ var AuthenticationOK = Message{ Type: TypeAuthentication, Data: []byte{0, 0, 0, 0}, } +var ParseOK = Message{ + Type: TypeParseComplete, + Data: []byte{}, +} +var BindComplete = Message{ + Type: TypeBindComplete, + Data: []byte{}, +} +var NoData = Message{ + Type: TypeNoData, + Data: []byte{}, +} +var EmptyQueryResponse = Message{ + Type: TypeEmptyQueryResponse, + Data: []byte{}, +} // Message is a Postgres message value. type Message struct { @@ -66,6 +97,49 @@ type Message struct { Data []byte } +//debug tools +func viewString(b []byte) string { + r := []rune(string(b)) + for i := range r { + if r[i] < 32 || r[i] > 126 { + r[i] = '.' + } + } + return string(r) +} +func min(a, b int) int { + if a < b { + return a + } + return b +} +func (m *Message) Dump(prefix string) { + n := len(m.Data) + rowcount := 0 + stop := (n / 8) * 8 + k := 0 + fmt.Printf("\n %s type: '%c'\n", prefix, m.Type) + for i := 0; i <= stop; i += 8 { + k++ + if i+8 < n { + rowcount = 8 + } else { + rowcount = min(k*8, n) % 8 + } + + fmt.Printf("pos %02d hex: ", i) + for j := 0; j < rowcount; j++ { + fmt.Printf("%02x ", m.Data[i+j]) + } + for j := rowcount; j < 8; j++ { + fmt.Printf(" ") + } + fmt.Printf(" '%s'\n", viewString(m.Data[i:(i+rowcount)])) + } +} + +//endTools + // TransactionStatus is the current transaction state. type TransactionStatus byte @@ -98,6 +172,14 @@ func (e *Encoder) i32(i int32) error { return err } +/* removed for linter now +func (e *Encoder) u32(i uint32) error { + binary.BigEndian.PutUint32(e.scratch[:], i) + _, err := e.buf.Write(e.scratch[:]) + return err +} +*/ + // ReadyForQuery encodes a "ready for query" message. func (e *Encoder) ReadyForQuery(status TransactionStatus) (Message, error) { e.buf.Reset() @@ -149,6 +231,9 @@ const ( // NoticeFieldHint is a suggestion of how to address the issue. NoticeFieldHint NoticeFieldType = 'H' + + // NoticeFieldHint the SQLSTATE code for the error (see Appendix A). Not localizable. Always present. + NoticeFieldCode NoticeFieldType = 'C' ) // NoticeField is a field in an error or notice. @@ -365,3 +450,95 @@ func (e *Encoder) BackendKeyData(pid, key int32) (Message, error) { Data: e.buf.Bytes(), }, nil } + +func (e *Encoder) ParameterStatus(param, value string) (Message, error) { + e.buf.Reset() + //param + NULL + value+ NULL + _, err := e.buf.WriteString(param) + if err != nil { + return Message{}, err + } + err = e.buf.WriteByte(0) + if err != nil { + return Message{}, err + } + _, err = e.buf.WriteString(value) + if err != nil { + return Message{}, err + } + err = e.buf.WriteByte(0) + if err != nil { + return Message{}, err + } + return Message{ + Type: TypeParameterStatus, + Data: e.buf.Bytes(), + }, nil +} + +type SimpleColumn struct { + Name string + Typeid int32 + Typelen int16 +} + +func (e *Encoder) EncodeColumn(name string, typeid int32, typelen int16) (Message, error) { + return e.EncodeColumns(SimpleColumn{ + Name: name, + Typeid: typeid, + Typelen: typelen, + }) +} +func (e *Encoder) EncodeColumns(cols ...SimpleColumn) (Message, error) { + + e.buf.Reset() + err := e.i16(int16(len(cols))) // number of columns in result + if err != nil { + return Message{}, nil + } + for _, col := range cols { + + _, err = e.buf.WriteString(col.Name) // column name + if err != nil { + return Message{}, err + } + err = e.buf.WriteByte(0) //null terminate + if err != nil { + return Message{}, err + } + + err = e.i32(0) //tabel id + if err != nil { + return Message{}, err + } + + err = e.i16(0) //field id(attnum) + if err != nil { + return Message{}, err + } + + err = e.i32(col.Typeid) //type_id + if err != nil { + return Message{}, err + } + + err = e.i16(col.Typelen) //type_len + if err != nil { + return Message{}, err + } + + err = e.i32(-1) //type_mod + if err != nil { + return Message{}, err + } + + err = e.i16(0) //format 0 text 1 binary + if err != nil { + return Message{}, err + } + } + return Message{ + Type: TypeRowDescription, + Data: e.buf.Bytes(), + }, nil +} diff --git a/pg/pgtest/handler.go b/pg/pgtest/handler.go index b146359d8..02b1361e2 100644 --- a/pg/pgtest/handler.go +++ b/pg/pgtest/handler.go @@ -30,6 +30,9 @@ type HandlerFunc func(context.Context, pg.QueryResultWriter, pg.Query) error func (h HandlerFunc) HandleQuery(ctx context.Context, w pg.QueryResultWriter, q pg.Query) error { return h(ctx, w, q) } +func (h HandlerFunc) HandleSchema(ctx context.Context, portal *pg.Portal) error { + return nil +} var _ pg.QueryHandler = HandlerFunc(nil) diff --git a/pg/protocol.go b/pg/protocol.go index 222a9055f..0fa52a5e9 100644 --- a/pg/protocol.go +++ b/pg/protocol.go @@ -25,12 +25,15 @@ import ( "io" "io/ioutil" "net" + "regexp" "strings" "sync" "time" "github.com/molecula/featurebase/v2/pg/message" + "github.com/molecula/featurebase/v2/sql" "github.com/pkg/errors" + "vitess.io/vitess/go/vt/sqlparser" ) // Protocol is a Postgres protocol version. @@ -48,6 +51,9 @@ const ( // ProtocolSupported is the main protocol version supported by this package. ProtocolSupported Protocol = ProtocolPostgres30 + + // PgServerVersion is the latest version of postgres that we claim to support. + PgServerVersion = "13.0.0" ) // Major returns the major revision of the protocol. @@ -233,6 +239,376 @@ func (s *Server) handleCancel(ctx context.Context, conn net.Conn, data []byte) e return nil } +func (s *Server) SendParameterStatus(w *message.WireWriter, param, value string, encoder *message.Encoder) error { + msg, err := encoder.ParameterStatus(param, value) + if err != nil { + return err + } + err = w.WriteMessage(msg) + if err != nil { + return errors.Wrap(err, "sending parameter status") + } + return nil +} + +type Result struct { +} +type PgType byte + +// Constants used to indicated query interception +// Only pgPassOn is allowed to be processed in Featurebase query handling +const ( + pgPassOn PgType = 'x' + pgBackendPid PgType = 'a' + pgVersion PgType = 'b' + pgCountType PgType = 'c' + pgQueryTime PgType = 'd' + pgTerminate PgType = 'e' + pgEmpty PgType = 'f' + pgSetApplication PgType = 'g' + pgSelect1 PgType = 'h' + pgSchema PgType = 'i' + pgBegin PgType = 'j' +) + +type Portal struct { + Name string + Writer *message.WireWriter + commands []message.Message + Encoder *message.Encoder + mapper *sql.Mapper + sql string + pgspecial PgType + pid int32 + queryStart time.Time + server *Server + cancelNotify <-chan struct{} +} + +func (p *Portal) Reset() { + p.Name = "" + p.sql = "" + p.pgspecial = pgPassOn + p.commands = p.commands[:0] +} + +func (p *Portal) Bind() { + p.Add(message.BindComplete) +} + +var lookPQL = regexp.MustCompile(`\[.*\].*\)\z`) + +func (p *Portal) Parse(data []byte) { + p.queryStart = time.Now() + queryStr := string(bytes.Trim(data, "\x00")) + foundPQL := lookPQL.FindStringSubmatch(queryStr) + if len(foundPQL) > 0 { + + p.sql = foundPQL[0] + p.Name = "PQL" + p.pgspecial = pgPassOn + p.Add(message.ParseOK) + return + } + if strings.Contains(queryStr, "EXTRACT") { + // had to add this hack because the vitis parser doesn't handle... + /* + SELECT pid as id, + query as stmt, + EXTRACT(seconds from query_start - NOW()) as elapsed_time + FROM pg_stat_activity + WHERE usename='docker'` + */ + p.pgspecial = pgQueryTime + p.Name = "SELECT" + p.sql = queryStr + p.Add(message.ParseOK) + return + } + + if len(queryStr) > 2 { + + query, err := p.mapper.MapSQL(queryStr) + if err != nil { + return + } + + if strings.Contains(strings.ToLower(query.SQL), "select 1") { + p.pgspecial = pgSelect1 + p.Name = "SELECT" + } else { + switch query.SQLType { + case sql.SQLTypeSet: + p.Name = "SET" + set := query.Statement.(*sqlparser.Set) + p.pgspecial = 0 + for _, item := range set.Exprs { + if item.Name.String() == "application_name" { + switch item.Expr.(type) { + case *sqlparser.SQLVal: + p.pgspecial = pgSetApplication + } + } + } + case sql.SQLTypeSelect: + p.Name = "SELECT" + p.pgspecial = pgPassOn + stmt := query.Statement.(*sqlparser.Select) + for _, item := range stmt.SelectExprs { + switch expr := item.(type) { + case *sqlparser.AliasedExpr: + switch colExpr := expr.Expr.(type) { + case *sqlparser.FuncExpr: + funcName := strings.ToLower(colExpr.Name.String()) + switch funcName { + case "pg_backend_pid": + //SELECT pg_backend_pid() + p.pgspecial = pgBackendPid + case "pg_terminate_backend": + //select pg_terminate_backend(100) + p.pgspecial = pgTerminate + case "version": + //SELECT VERSION() AS version + p.pgspecial = pgVersion + } + //need to return the pid from the cancelation object + //add row description object + //add data row for item + } + } + + } + for _, item := range stmt.From { + switch from := item.(type) { + case *sqlparser.AliasedTableExpr: + tableName := from.Expr.(sqlparser.TableName).ToViewName().Name.String() + switch tableName { + case "pg_type": + p.pgspecial = pgCountType + case "pg_stat_activity": + p.pgspecial = pgQueryTime + case "tables": + p.pgspecial = pgSchema + } + } + } + p.sql = queryStr + case sql.SQLTypeBegin: + // Ignore BEGIN + p.pgspecial = pgBegin + case sql.SQLTypeShow: + p.Name = "SHOW" + p.pgspecial = pgPassOn + p.sql = queryStr + } + } + } else { + p.pgspecial = pgEmpty + } + p.Add(message.ParseOK) +} +func (p *Portal) Describe() { + // Placeholder should we need to handle the Decribe request +} + +func (p *Portal) Execute() (shouldTerminate bool, queryReady bool, err error) { + queryReady = true + switch p.pgspecial { + case pgBackendPid: + rowDescription, e := p.Encoder.EncodeColumn("pg_backend_pid", int32(23), 4) + if e != nil { + err = e + return + } + p.Add(rowDescription) + pid := fmt.Sprintf("%v", p.pid) + dataRow, _ := p.Encoder.TextRow(pid) + p.Add(dataRow) + //needs data row with cancel token + case pgVersion: + rowDescription, e := p.Encoder.EncodeColumn("version", int32(25), -1) + if e != nil { + err = e + return + } + p.Add(rowDescription) + dataRow, _ := p.Encoder.TextRow("PostgresSQL 13.0 (molecula)") + p.Add(dataRow) + case pgSelect1: + rowDescription, e := p.Encoder.EncodeColumn("?column?", int32(23), 4) + if e != nil { + err = e + return + } + p.Add(rowDescription) + dataRow, _ := p.Encoder.TextRow("1") + p.Add(dataRow) + case pgCountType: + //need to block + <-p.server.lookerChannel + rowDescription, e := p.Encoder.EncodeColumn("count", int32(20), 8) + if err != nil { + err = e + return + } + p.Add(rowDescription) + errorResponse, _ := p.Encoder.Error( + message.NoticeField{ + Type: message.NoticeFieldSeverity, + Data: "FATAL", + }, + message.NoticeField{ + Type: message.NoticeFieldMessage, + Data: "terminating connection due to administrator command", + }, + message.NoticeField{ + Type: message.NoticeFieldCode, + Data: "57P01", + }, + ) + p.Add(errorResponse) + e = p.Sync() //send and Reset + + if e != nil { + err = e + return + } + return true, queryReady, nil + case pgQueryTime: + // need to return something so that the id can be queried + //need to return SELECT pid as id, query as stmt, EXTRACT(seconds from query_start - NOW()) as elapsed_time FROM pg_stat_activity + //seems like we need a map of pids to querys + e := p.server.dumpPortalsTo(p) + if e != nil { + err = e + return + } + + case pgTerminate: + //note just have 1 lock that blocks all who try to count the activities + //TODO (twg) lock this + close(p.server.lookerChannel) //release all the other blockers and allow them to terminate + p.server.lookerChannel = make(chan struct{}) //create a new one just in case + // i think it needs to return boolean true + rowDescription, e := p.Encoder.EncodeColumn("pg_terminate_backend", int32(16), 1) + if e != nil { + err = e + return + } + p.Add(rowDescription) + dataRow, _ := p.Encoder.TextRow("t") + p.Add(dataRow) + commandComplete, e := p.Encoder.CommandComplete("SELECT 1") + if e != nil { + err = e + return + } + p.Add(commandComplete) + e = p.Sync() + if e != nil { + err = e + return + } + return false, queryReady, nil + case pgEmpty: + p.Add(message.NoData) + p.Add(message.EmptyQueryResponse) + e := p.Sync() + if e != nil { + err = e + return + } + queryReady = true + return false, queryReady, nil + case pgSetApplication: + //needs to add/send status + msg, e := p.Encoder.ParameterStatus("application_name", "PostgreSQL JDBC Driver") + if e != nil { + err = e + return + } + p.Add(msg) + case pgSchema: + parts := []message.SimpleColumn{ + { + Name: "table_schema", + Typeid: int32(19), + Typelen: 64, + }, + { + Name: "table_name", + Typeid: int32(19), + Typelen: 64, + }, + } + rowDescription, e := p.Encoder.EncodeColumns(parts...) + if e != nil { + err = e + return + } + p.Add(rowDescription) + e = p.HandleSchema() + if e != nil { + err = e + return + } + + case pgPassOn: + query := SimpleQuery(p.sql) + e := p.server.handleQuery(p, query, p.cancelNotify) + if e != nil { + err = e + return + } + return + + case pgBegin: + p.Name = "BEGIN" + } + + //maybe add in the number of items in select clause + if len(p.Name) > 0 { //only send command complete for those that have names + message, _ := p.Encoder.CommandComplete(p.Name) + p.Add(message) + } + return +} + +// handleStandard handles a connection in the standard postgres wire protocol. +func (p *Portal) Sync() error { + for _, m := range p.commands { + err := p.Writer.WriteMessage(m) + if err != nil { + return err + } + } + p.Writer.Flush() + p.Reset() + return nil +} +func (p *Portal) Add(m message.Message) { + cp := message.Message{Type: m.Type, Data: make([]byte, len(m.Data))} + copy(cp.Data, m.Data) + p.commands = append(p.commands, cp) +} + +func (p *Portal) DumpComands() { + + for _, m := range p.commands { + m.Dump("DUMPING:") + } +} +func (p *Portal) HandleSchema() error { + return p.server.QueryHandler.HandleSchema(context.Background(), p) +} + +func (p *Portal) WriteMessage(m message.Message) error { + p.Add(m) + return nil +} +func (p *Portal) Flush() error { + return nil +} // handleStandard handles a connection in the standard postgres wire protocol. // The client is responsible for closing the connection when this finishes. @@ -255,7 +631,6 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co if err != nil { return errors.Wrap(err, "parsing parameters") } - if user, ok := params["user"]; ok { // Log the connection. s.Logger.Debugf("new postgres connection from user %q at %v", user, conn.RemoteAddr()) @@ -265,7 +640,6 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co } // Set up message input and output. - // Set up a reader that will preempt the connection when the context is canceled. ir := idleReader{ conn: conn, @@ -322,8 +696,56 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co if err != nil { return errors.Wrap(err, "sending authentication confirmation") } + err = s.SendParameterStatus(w, "application_name", "", &encoder) + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } + err = s.SendParameterStatus(w, "client_encoding", "UTF8", &encoder) + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } + err = s.SendParameterStatus(w, "DateStyle", "ISO, MDY", &encoder) + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } + err = s.SendParameterStatus(w, "integer_datetimes", "on", &encoder) + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } + err = s.SendParameterStatus(w, "IntervalStyle", "postgres", &encoder) + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } + err = s.SendParameterStatus(w, "is_superuser", "on", &encoder) + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } + err = s.SendParameterStatus(w, "server_encoding", "UTF8", &encoder) + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } + err = s.SendParameterStatus(w, "server_version", PgServerVersion, &encoder) + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } + /* + -PARAMETER STATUS name='TimeZone', value='GMT' + */ + err = s.SendParameterStatus(w, "session_authorization", "docker", &encoder) //TODO(twg) figure out valid values here + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } + err = s.SendParameterStatus(w, "standard_conforming_strings", "on", &encoder) //TODO(twg) figure out valid values here + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } + err = s.SendParameterStatus(w, "TimeZone", "GMT", &encoder) //TODO(twg) figure out valid values here + if err != nil { + return errors.Wrap(err, "sending parameter status server version") + } var cancelNotify <-chan struct{} + var pid int32 if s.CancellationManager != nil { notify, cancel, token, err := s.CancellationManager.Token() if err != nil { @@ -332,6 +754,7 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co defer cancel() msg, err := encoder.BackendKeyData(token.PID, token.Key) + pid = token.PID if err != nil { return errors.Wrap(err, "encoding cancellation key data") } @@ -343,11 +766,23 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co } var queryReady bool + portal := &Portal{ + Writer: w, + Encoder: &encoder, + commands: make([]message.Message, 0), + mapper: sql.NewMapper(), + pid: pid, + server: s, + cancelNotify: cancelNotify, + } + s.addPortal(portal) + defer s.removePortal(portal) + //mapper.Logger = logger for { if !queryReady { // Indicate that we are ready for a query. - // TODO: provide a valid transaction state. - msg, err := encoder.ReadyForQuery(message.TransactionStatusActive) + portal.sql = "" + msg, err := encoder.ReadyForQuery(message.TransactionStatusIdle) if err != nil { return errors.Wrap(err, "sending query ready status") } @@ -373,6 +808,7 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co // However, it seems that no clients completely follow the spec, so we shouldn't rely on anything that isn't entirely straightforward. s.Logger.Debugf("postgres client sent additional data without waiting for completion") } + queryReady = true } // Read the next packet. @@ -406,12 +842,27 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co // We are done. return w.Flush() - case message.TypeSimpleQuery: - // Execute a simple query. - + case message.TypeParse: + portal.Parse(msg.Data) + case message.TypeBind: + portal.Bind() + case message.TypeExecute: + term, qr, err := portal.Execute() + if err != nil { + return err + } + if term { + return w.Flush() + } + queryReady = qr + case message.TypeSync: + err := portal.Sync() + if err != nil { + return err + } + queryReady = false + case message.TypeSimpleQuery: queryReady = false - - // Parse the query message (a null-terminated string). query := SimpleQuery(strings.TrimSuffix(string(msg.Data), "\x00")) // Execute the query. @@ -419,7 +870,10 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co if err != nil { return err } - + case message.TypeDescribe: + portal.Describe() + case message.TypeClose: + return w.Flush() default: // The message is not supported yet. // Send an error. @@ -452,6 +906,70 @@ func (s *Server) handleStandard(ctx context.Context, proto Protocol, conn net.Co } } } +func (s *Server) addPortal(p *Portal) { + s.mu.Lock() + defer s.mu.Unlock() + s.portals = append(s.portals, p) +} +func (s *Server) removePortal(p *Portal) { + s.mu.Lock() + defer s.mu.Unlock() + for i, portal := range s.portals { + if portal.pid == p.pid { + //remove i + s.portals = append(s.portals[:i], s.portals[i+1:]...) + return + } + + } + +} +func (s *Server) dumpPortalsTo(p *Portal) error { + s.mu.Lock() + defer s.mu.Unlock() + //need to add the descrition for the 3 fields + // <-:-ROW DESCRIPTION: num_fields=3 + //---[Field 01]--- name='id' type=23 type_len=4 type_mod=4294967295 relid=12250 attnum=3 format=0 + //---[Field 02]--- name='stmt' type=25 type_len=65535 type_mod=4294967295 relid=12250 attnum=20 format=0 - + //--[Field 03]--- name='elapsed_time' type=701 type_len=8 type_mod=4294967295 relid=0 attnum=0 format=0 + parts := []message.SimpleColumn{ + { + Name: "id", + Typeid: int32(23), + Typelen: 4, + }, + { + Name: "stmt", + Typeid: int32(25), + Typelen: -1, + }, + { + Name: "elapsed_time", + Typeid: int32(701), + Typelen: 8, + }, + } + rowDescription, err := p.Encoder.EncodeColumns(parts...) + if err != nil { + return err + } + p.Add(rowDescription) + + for _, portal := range s.portals { + dataRow, err := p.Encoder.TextRow( + fmt.Sprintf("%v", portal.pid), + portal.sql, + fmt.Sprintf("%v", time.Since(portal.queryStart).Seconds())) + if err != nil { + return err + } + //if sql == "" need to put in a null record + //need to add the dararow + //also need to figure out null types + p.Add(dataRow) + } + return nil +} // handleQuery processes a single query on a connection. func (s *Server) handleQuery(w message.Writer, query Query, cancelNotify <-chan struct{}) error { @@ -497,7 +1015,6 @@ func (s *Server) handleQuery(w message.Writer, query Query, cancelNotify <-chan te: s.TypeEngine, tag: "SELECT", } - // Dispatch the query handler. qerr := s.QueryHandler.HandleQuery(ctx, qwriter, query) if qerr != nil { diff --git a/pg/query.go b/pg/query.go index cc81d490f..7aa231670 100644 --- a/pg/query.go +++ b/pg/query.go @@ -60,6 +60,7 @@ type QueryResultWriter interface { type QueryHandler interface { // HandleQuery executes a query and writes the results back. HandleQuery(context.Context, QueryResultWriter, Query) error + HandleSchema(context.Context, *Portal) error } // queryResultWriter implements QueryResultWrtiter over postgres wire protocol. diff --git a/pg/server.go b/pg/server.go index 071024385..28aa6ca24 100644 --- a/pg/server.go +++ b/pg/server.go @@ -59,6 +59,9 @@ type Server struct { // CancellationManager is the cancellation manager to use. // If this is not set, no cancellations will be applied. CancellationManager CancellationManager + lookerChannel chan struct{} + mu sync.Mutex + portals []*Portal } // ServeConn serves a single connection. @@ -79,6 +82,8 @@ func (s *Server) Serve(ctx context.Context, l net.Listener) (err error) { err = cerr } }(ctx) + // TODO (twg) added for looker + s.lookerChannel = make(chan struct{}) // Wait for the listener to be closed and all connections to shut down. var wg sync.WaitGroup diff --git a/planner.go b/planner.go index ce89deebe..196bfa817 100644 --- a/planner.go +++ b/planner.go @@ -645,6 +645,11 @@ func (rs *StmtRows) Columns() []*StmtColumn { return rs.node.Columns() } + /* +func (rs *StmtRows) Row() int64 { + return rs.node.Row()[0].(int64) +} + */ func (rs *StmtRows) Next() bool { if rs.err != nil { return false diff --git a/server.go b/server.go index 93d9947a0..2e75045d4 100644 --- a/server.go +++ b/server.go @@ -39,6 +39,7 @@ import ( "github.com/molecula/featurebase/v2/stats" "github.com/molecula/featurebase/v2/storage" "github.com/molecula/featurebase/v2/topology" + "github.com/molecula/featurebase/v2/vprint" "github.com/pkg/errors" "golang.org/x/sync/errgroup" @@ -1354,6 +1355,7 @@ func (s *Server) PlanSQL(ctx context.Context, q string) (*Stmt, error) { if err != nil { return nil, err } + vprint.VV("PLanning SQL: (%v)", q) return NewPlanner(s.executor).PlanStatement(ctx, st) } diff --git a/server/config.go b/server/config.go index b96a5be1f..dc6ae08ae 100644 --- a/server/config.go +++ b/server/config.go @@ -200,6 +200,9 @@ type Config struct { // Setting this to 0 disables the limit. // This mostly exists because other DBs seem to have it. ConnectionLimit uint16 `toml:"max-connections"` + // SqlVersion is which type of sqlhandling to be applied. + // The constant SqlV2 can be used to try the new experimental Molecula SQL handling + SqlVersion uint16 `toml:"sql-version"` } `toml:"postgres"` // Storage.Backend determines which Tx implementation the holder/Index will diff --git a/server/pg.go b/server/pg.go index 0f03e7dfb..8b7d6478f 100644 --- a/server/pg.go +++ b/server/pg.go @@ -25,9 +25,11 @@ import ( "strings" "time" - "github.com/molecula/featurebase/v2" + pilosa "github.com/molecula/featurebase/v2" "github.com/molecula/featurebase/v2/logger" "github.com/molecula/featurebase/v2/pg" + + //"github.com/molecula/featurebase/v2/pg" "github.com/molecula/featurebase/v2/pql" pb "github.com/molecula/featurebase/v2/proto" @@ -43,14 +45,20 @@ type PostgresServer struct { s pg.Server stop context.CancelFunc } +type SqlVersion uint16 + +const ( + SqlV1 SqlVersion = 0 + SqlV2 SqlVersion = 2 +) // NewPostgresServer creates a postgres server. -func NewPostgresServer(api *pilosa.API, logger logger.Logger, tls *tls.Config) *PostgresServer { +func NewPostgresServer(api *pilosa.API, logger logger.Logger, tls *tls.Config, sqlVersion SqlVersion) *PostgresServer { return &PostgresServer{ api: api, logger: logger, s: pg.Server{ - QueryHandler: NewPostgresHandler(api, logger), + QueryHandler: NewPostgresHandler(api, logger, sqlVersion), TypeEngine: pg.PrimitiveTypeEngine{}, StartupTimeout: 5 * time.Second, ReadTimeout: 10 * time.Second, @@ -66,11 +74,12 @@ func NewPostgresServer(api *pilosa.API, logger logger.Logger, tls *tls.Config) * } // NewPostgresHandler creates a postgres query handler wrapping the pilosa API. -func NewPostgresHandler(api *pilosa.API, logger logger.Logger) pg.QueryHandler { - return &queryDecodeHandler{ - child: &pilosaQueryHandler{ - api: api, - logger: logger, +func NewPostgresHandler(api *pilosa.API, logger logger.Logger, sqlVersion SqlVersion) pg.QueryHandler { + return &QueryDecodeHandler{ + Child: &PilosaQueryHandler{ + Api: api, + logger: logger, + sqlVersion: sqlVersion, }, } } @@ -107,6 +116,10 @@ func (s *PostgresServer) Close() error { return s.eg.Wait() } +func (s *PostgresServer) GetAPI() *pilosa.API { + return s.api +} + type pgPQLQuery struct { index string query string @@ -135,9 +148,10 @@ func pgDecodePQL(str string) (q pg.Query, err error) { }, nil } -type pilosaQueryHandler struct { - api *pilosa.API - logger logger.Logger +type PilosaQueryHandler struct { + Api *pilosa.API + logger logger.Logger + sqlVersion SqlVersion } func pgWriteRow(w pg.QueryResultWriter, row *pilosa.Row) error { @@ -322,6 +336,78 @@ func pgWriteGroupCount(w pg.QueryResultWriter, counts *pilosa.GroupCounts) error return nil } +func pgWriteStmtRows(w pg.QueryResultWriter, rows *pilosa.StmtRows) error { + //TODO(twg) writeHeader + //TODO(twg) writeColumns + first := true + var data []string + var err error + for rows.Next() { + if first { + columns := rows.Columns() + //TODO (twg) types:=rows.Types() + headers := make([]pg.ColumnInfo, len(columns)) + for i, column := range columns { + headers[i] = pg.ColumnInfo{ + Name: column.Name, + Type: pg.TypeCharoid, //TODO(twg) types[i] + } + } + err := w.WriteHeader(headers...) + if err != nil { + return err + } + + data = make([]string, len(headers)) + first = false + } + result := make([]interface{}, len(rows.Columns())) + // Create list of scan destination pointers. + dsts := make([]interface{}, len(result)) + for i := range result { + dsts[i] = &result[i] + } + + if err := rows.Scan(dsts...); err != nil { + return err + } + //TODO(twg) conversion should be happening in Scan as described in https://pkg.go.dev/database/sql + // .... + // Scan also converts between string and numeric types, as long as no information + // would be lost. While Scan stringifies all numbers scanned from numeric database columns into *string, + // scans into numeric types are checked for overflow. For example, a float64 with value 300 or a string + // with value "300" can scan into a uint16, but not into a uint8, though float64(255) or "255" can scan + // into a uint8. One exception is that scans of some float64 numbers to strings may lose information when stringifying. + // In general, scan floating point columns into *float64. + // ... + for i, col := range dsts { + var v string + switch col := col.(type) { + case nil: + v = "null" + // + //v = strconv.FormatUint(col.Uint64Val, 10) + case *interface{}: + v = fmt.Sprintf("%v", *col) + default: + return errors.Errorf("unable to process value of type %T", col) + } + + data[i] = v + } + + err = w.WriteRowText(data...) + if err != nil { + return err + } + + } + if err := rows.Err(); err != nil { + return err + } + return nil +} + func pgWriteRowser(w pg.QueryResultWriter, result pb.ToRowser) error { var data []string return result.ToRows(func(row *pb.RowResponse) error { @@ -395,6 +481,8 @@ func pgWriteResult(w pg.QueryResultWriter, result interface{}) error { return pgWriteGroupCount(w, result) case pb.ToRowser: // we should avoid protobuf where we can... return pgWriteRowser(w, result) + case *pilosa.StmtRows: // we should avoid protobuf where we can... + return pgWriteStmtRows(w, result) case uint64: err := w.WriteHeader(pg.ColumnInfo{ Name: "count", @@ -449,10 +537,10 @@ func pgWriteResult(w pg.QueryResultWriter, result interface{}) error { } } -func (pqh *pilosaQueryHandler) HandleQuery(ctx context.Context, w pg.QueryResultWriter, q pg.Query) error { +func (pqh *PilosaQueryHandler) HandleQuery(ctx context.Context, w pg.QueryResultWriter, q pg.Query) error { switch q := q.(type) { case pgPQLQuery: - resp, err := pqh.api.Query(ctx, &pilosa.QueryRequest{ + resp, err := pqh.Api.Query(ctx, &pilosa.QueryRequest{ Index: q.index, Query: q.query, }) @@ -465,22 +553,36 @@ func (pqh *pilosaQueryHandler) HandleQuery(ctx context.Context, w pg.QueryResult return errors.Wrap(pgWriteResult(w, resp.Results[0]), "writing query result") case pg.SimpleQuery: - resp, err := execSQL(ctx, pqh.api, pqh.logger, string(q)) - if err != nil { - return errors.Wrap(err, "executing query") + if pqh.sqlVersion == SqlV2 { + stmt, err := pqh.Api.Plan(ctx, string(q)) + if err != nil { + return err + } + resp, err := stmt.QueryContext(ctx) + if err != nil { + return err + } + return errors.Wrap(pgWriteResult(w, resp), "writing sql2 query result") + //version 2.0 + } else { + //version 1.0 + resp, err := execSQL(ctx, pqh.Api, pqh.logger, string(q)) + if err != nil { + return errors.Wrap(err, "executing query") + } + return errors.Wrap(pgWriteResult(w, resp), "writing query result") } - return errors.Wrap(pgWriteResult(w, resp), "writing query result") default: return errors.Errorf("query type %T not yet supported (query: %s)", q, q) } } -type queryDecodeHandler struct { - child pg.QueryHandler +type QueryDecodeHandler struct { + Child pg.QueryHandler } -func (qdh *queryDecodeHandler) HandleQuery(ctx context.Context, w pg.QueryResultWriter, q pg.Query) error { +func (qdh *QueryDecodeHandler) HandleQuery(ctx context.Context, w pg.QueryResultWriter, q pg.Query) error { switch qv := q.(type) { case pg.SimpleQuery: if strings.HasPrefix(string(qv), "[") { @@ -492,5 +594,24 @@ func (qdh *queryDecodeHandler) HandleQuery(ctx context.Context, w pg.QueryResult } } - return qdh.child.HandleQuery(ctx, w, q) + return qdh.Child.HandleQuery(ctx, w, q) +} + +func (pqh *PilosaQueryHandler) HandleSchema(ctx context.Context, portal *pg.Portal) error { + schema, err := pqh.Api.Schema(context.Background(), false) + if err != nil { + return err + } + for _, ii := range schema { + dataRow, err := portal.Encoder.TextRow("featurebase", ii.Name) + if err != nil { + return err + } + portal.Add(dataRow) + } + return nil +} + +func (qdh *QueryDecodeHandler) HandleSchema(ctx context.Context, portal *pg.Portal) error { + return qdh.Child.HandleSchema(ctx, portal) } diff --git a/server/pg_test.go b/server/pg_test.go index 012986afc..bd8a88521 100644 --- a/server/pg_test.go +++ b/server/pg_test.go @@ -21,7 +21,7 @@ import ( "testing" "time" - "github.com/molecula/featurebase/v2" + pilosa "github.com/molecula/featurebase/v2" "github.com/molecula/featurebase/v2/logger" "github.com/molecula/featurebase/v2/pg" "github.com/molecula/featurebase/v2/pg/pgtest" @@ -33,7 +33,7 @@ func TestPostgresHandler(t *testing.T) { m := test.RunCommand(t) defer m.Close() - pgh := server.NewPostgresHandler(m.API, logger.NewLogfLogger(t)) + pgh := server.NewPostgresHandler(m.API, logger.NewLogfLogger(t), server.SqlV1) m.MustCreateIndex(t, "i", pilosa.IndexOptions{TrackExistence: true}) m.MustCreateField(t, "i", "set") diff --git a/server/server.go b/server/server.go index 5a8478513..8d227ade7 100644 --- a/server/server.go +++ b/server/server.go @@ -40,7 +40,7 @@ import ( "golang.org/x/sync/errgroup" - "github.com/molecula/featurebase/v2" + pilosa "github.com/molecula/featurebase/v2" "github.com/molecula/featurebase/v2/boltdb" "github.com/molecula/featurebase/v2/encoding/proto" petcd "github.com/molecula/featurebase/v2/etcd" @@ -265,7 +265,7 @@ func (m *Command) Start() (err error) { } tlsConf = conf } - m.pgserver = NewPostgresServer(m.API, m.logger, tlsConf) + m.pgserver = NewPostgresServer(m.API, m.logger, tlsConf, SqlVersion(m.Config.Postgres.SqlVersion)) m.pgserver.s.StartupTimeout = time.Duration(m.Config.Postgres.StartupTimeout) m.pgserver.s.ReadTimeout = time.Duration(m.Config.Postgres.ReadTimeout) m.pgserver.s.WriteTimeout = time.Duration(m.Config.Postgres.WriteTimeout) diff --git a/sql/mapper.go b/sql/mapper.go index 3ff500d8f..80ce64b6c 100644 --- a/sql/mapper.go +++ b/sql/mapper.go @@ -25,6 +25,8 @@ import ( const ( SQLTypeSelect = "select" SQLTypeShow = "show" + SQLTypeSet = "set" + SQLTypeBegin = "begin" SQLTypeEmpty = "" ) @@ -101,6 +103,10 @@ func (m *Mapper) MapSQL(sql string) (*MappedSQL, error) { } case *sqlparser.Show: sqlType = SQLTypeShow + case *sqlparser.Set: + sqlType = SQLTypeSet + case *sqlparser.Begin: + sqlType = SQLTypeBegin } return &MappedSQL{