h&\Nm      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                                                                                                Safe-Inferred  Safe-Inferred n postgrestjspath expression, e.g. .property, .property[0] or ."property-dash" postgrest*full jspath, e.g. .property[0].attr.detailNone 8:   postgrestTells the minimum PostgreSQL version required by this version of PostgREST  None 0Proxy Uri validator Safe-Inferred   postgrestTest whether a proxy uri is malformed or not. A valid proxy uri should be an absolute uri without query and user info, only http(s) schemes are valid, port number range is 1-65535.For example  !http://postgrest.com/openapi.json 'https://postgrest.com:8080/openapi.json ! !None #" postgrest9Enumeration of currently supported response content types, postgrest.Convert from ContentType to a full HTTP Header- postgrestConvert from ContentType to a ByteString representing the mime type. postgrestConvert from ByteString to ContentType. Warning: discards MIME parameters "#$%&'()*+,-. "#$%&'()*+,-.None 8:3 postgrestRepresents a pg identifier with a prepended schema name "schema.table". When qiSchema is "", the schema is defined by the pg search_path. 012345678 3456210780Manages PostgREST configuration type and parser.None #$>?j postgrestDump the configk postgrestReads and parses the config and overrides its parameters from env vars, files or db settings.m postgrest1Read environment variables that start with PGRST_; !?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklm;IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghi?DEFGH@ABCj km!lNone 8:Pq postgrestA map of all procs, all of which can be overloaded(one entry will have more than one ProcDescription). | It uses a HashMap for a faster lookup.qrstuvwxyz{|}~xyz{|}~rstuvwq None 8: None 8:T postgrest%Junction table on an M2M relationship postgrest The relationship cardinality |  9https://en.wikipedia.org/wiki/Cardinality_(data_modeling) TODO: missing one-to-one postgrestone-to-many cardinality postgrestmany-to-one cardinality postgrestmany-to-many cardinality postgrest Relationship between two tables.The order of the relColumns and relForeignColumns should be maintained to get the join conditions right.TODO merge relColumns and relForeignColumns to a tuple or Data.Bimap PostgREST schema cacheNone  #$%8:>?   None #$" postgrestLog to stderr with local time postgrestAs this IO action uses ' internally, it will only return once  has been set using 0. This is currently used to syncronize workers. PostgREST error HTTP responsesNone #$  "PostgREST authorization functions.None #$6 postgrestReceives the JWT secret and audience (from config) and a JWT and returns a map of JWT claims. postgrest7Whether a response from jwtClaims contains a role claimNone X postgrestCustom guc header, it's obtained by parsing the json in a: `SET LOCAL "response.headers" = '[{"Set-Cookie": ".."}]' postgrestAdd headers not already included to allow the user to override them instead of duplicating themLogic regarding the `Content-Range` headers and limitoffset querystring arguments.None   Track client preferences to be employed when processing requests Safe-Inferred (k postgrest,Whether to commit or roll back transactions. postgrest!Commit transaction - the default. postgrestRollback transaction after sending the response - does not persist changes, e.g. for running tests. postgrest0How to determine the count of (expected) results postgrestExact count (slower). postgrestPostgreSQL query planner rows count guess. Done by using EXPLAIN {query}. postgrestUse the query planner rows if the count is superior to max-rows, otherwise get the exact count. postgrest,How to pass parameters to stored procedures. postgrestPass all parameters as a single json object to a stored procedure. postgrest>Pass an array of json objects as params to a stored procedure. postgrestHow to return the mutated data.From /https://tools.ietf.org/html/rfc7240#section-4.2 postgrest:Return the body plus the Location header(in case of POST). postgrestReturn the Location header(in case of POST). This needs a SELECT privilege on the pk. postgrest%Return nothing from the mutated data. postgrestHow to handle duplicate values. postgrest6Header to indicate that a preference has been applied.toAppliedHeader MergeDuplicates4("Preference-Applied","resolution=merge-duplicates") postgrest*Preferences recognized by the application. postgrest?Parse HTTP headers based on RFC7240[1] to identify preferences.One header with comma-separated values can be used to set multiple preferences:pPrint $ fromHeaders [("Prefer", "resolution=ignore-duplicates, count=exact")] Preferences. { preferResolution = Just IgnoreDuplicates$ , preferRepresentation = Nothing , preferParameters = Nothing# , preferCount = Just ExactCount! , preferTransaction = Nothing }"Multiple headers can also be used:pPrint $ fromHeaders [("Prefer", "resolution=ignore-duplicates"), ("Prefer", "count=exact")] Preferences. { preferResolution = Just IgnoreDuplicates$ , preferRepresentation = Nothing , preferParameters = Nothing# , preferCount = Just ExactCount! , preferTransaction = Nothing }>If a preference is set more than once, only the first is used:preferTransaction $ fromHeaders [("Prefer", "tx=commit, tx=rollback")] Just Commit.This is also the case across multiple headers::{" preferResolution . fromHeaders $0 [ ("Prefer", "resolution=ignore-duplicates")/ , ("Prefer", "resolution=merge-duplicates") ]:}Just IgnoreDuplicates:Preferences not recognized by the application are ignored:=preferResolution $ fromHeaders [("Prefer", "resolution=foo")]NothingPreferences can be separated by arbitrary amounts of space, lower-case header is also recognized:pPrint $ fromHeaders [("prefer", "count=exact, tx=commit ,return=minimal")] Preferences { preferResolution = Nothing& , preferRepresentation = Just None , preferParameters = Nothing# , preferCount = Just ExactCount% , preferTransaction = Just Commit }None #. postgrestThree-valued logic values postgrestRepresents a list value in a filter, e.g. id=in.(val1,val2,val3) postgrest;Represents a single value in a filter, e.g. id=eq.singleval postgrestBoolean logic expression tree e.g. "and(name.eq.N,or(id.eq.1,id.eq.2))" is:And / name.eq.N Or / id.eq.1 id.eq.2 postgrestRepresents the key(->key'`) or index(->1`::int`), the index is Text because we reuse our escaping functons and let pg do the casting with '1'::int postgrestRepresents the single arrow -> or double arrow ->> operators postgrest&Json path operations as specified in https://www.postgresql.org/docs/current/static/functions-json.html postgrestPath of the embedded levels, e.g "clients.projects.name=eq.." gives Path ["clients", "projects"] postgrestDisambiguates an embedding operation when there's multiple relationships between two tables. Can be the name of a foreign key constraint, column name or the junction in an m2m relationship. postgrest3The select value in `/tbl?select=alias:field::cast` postgrest/Call with key params: func(a := val1, b:= val2) postgrest:Call with positional params(only one supported): func(val) postgrest+A table alias is used in case of self joins postgrestOnly used for Many to Many joins. Parent and Child joins use explicit joins.,Helper functions for PostgREST.QueryBuilder.None 2z postgrest;A part of a SQL query that cannot be executed independently postgrestThese CTEs convert a json object into a json array, this way we can use json_populate_recordset for all json payloads Otherwise we'd have to use json_populate_record for json objects and json_populate_recordset for json arrays We do this in SQL to avoid processing the JSON in application code TODO: At this stage there shouldn't be a Maybe since ApiRequest should ensure that an INSERT/UPDATE has a bodyPostgREST parser combinatorsNone 3"PostgREST functions to translate HTTP request to a domain type called ApiRequest.None #$%= postgrestDescribes what the user wants to do. This data type is a translation of the raw elements of an HTTP request into domain specific language. There is no guarantee that the intent is sensible, it is up to a later stage of processing to determine if it is an action we are able to perform. postgrestSimilar but not identical to HTTP verb, e.g. Create/Invoke both POST postgrest'Requested range of rows within response postgrest*Requested range of rows from the top level postgrest5The target, be it calling a proc or accessing a table postgrest1Data sent by client and used for mutation actions postgrest)If client wants created items echoed back postgrest,How to pass parameters to a stored procedure postgrest'Whether the client wants a result count postgrestWhether the client wants to UPSERT or ignore records on PK conflict postgrest?Whether the clients wants to commit or rollback the transaction postgrest%Filters on the result ("id", "eq.10") postgrest6&and and &or parameters used for complex boolean logic postgrest,&select parameter used to shape the response postgrest=&on_conflict parameter used to upsert on specific unique keys postgrest1parsed colums from &columns parameter and payload postgrest &order parameters for each level postgrest?Alphabetized (canonical) request query string for response URLs postgrestJSON Web Token postgrestHTTP request headers postgrestRequest Cookies postgrestRaw request path postgrestRaw request method postgrestThe request profile for enabling use of multiple schemas. Follows the spec in hhttps:/ www.w3.orgTRdx-prof-connegttps:/ www.w3.orgTRdx-prof-conneg. postgrest3The request schema. Can vary depending on iProfile. postgrest%The target db object of a user action postgrest,Types of things a user wants to do to tablesviewsprocs postgrest#Cached attributes of a JSON payload postgrestThis is the raw ByteString that comes from the request body. We cache this instead of an Aeson Value because it was detected that for large payloads the encoding had high memory usage, see  0https://github.com/PostgREST/postgrest/pull/1005 for more details postgrestKeys of the object or if it's an array these keys are guaranteed to be the same across all its objects postgrest9Examines HTTP request and translates it into user intent."#$%&'()*+"#$%&'()*+"PostgREST database request builderNone #$%? postgrestBuilds the ReadRequest tree on a number of stages. | Adds filters, order, limits on its respective nodes. | Adds joins conditions obtained from resource embedding. PostgREST single SQL statements.None @Sets CORS policy. Also the PostgreSQL GUCs, role, search_path and pre-request function.None #$C postgrestRuns local(transaction scoped) GUCs for every request, plus the pre-request function postgrestLog in apache format. Only requests that have a status greater than minStatus are logged. | There's no way to filter logs in the apache format on wai-extra:  https://hackage.haskell.org/package/wai-extra-3.0.29.2/docs/Network-Wai-Middleware-RequestLogger.html#t:OutputFormat.6 | So here we copy wai-logger apacheLogStr function:  https://github.com/kazu-yamamoto/logger/blob/a4f51b909a099c51af7a3f75cf16e19a06f9e257/wai-logger/Network/Wai/Logger/Apache.hs#L45 | TODO: Add the ability to filter apache logs on wai-extra and remove this function. postgrest0CORS policy to be used in by Wai Cors middleware postgrestSet a transaction to eventually roll back if requested and set respective headers on the response.+PostgREST SQL queries generating functions.None #F postgrestSQL query meant for COUNTing the root node of the Tree. It only takes WHERE into account and doesn't include LIMIT/OFFSET because it would reduce the COUNT. SELECT 1 is done instead of SELECT * to prevent doing expensive operations(like functions based on the columns) inside the FROM target. If the request contains INNER JOINs, then the COUNT of the root node will change. For this case, we use a WHERE EXISTS instead of an INNER JOIN on the count query. See  https://github.com/PostgREST/postgrest/issues/2009#issuecomment-977473031 Only for the nodes that have an INNER JOIN linked to the root level.None HN postgrestUser friendly version number such as '1.1.1'. Pre-release versions are tagged as such, e.g., '1.1.1.1 (pre-release)'. If a git hash is available, it's added to the version, e.g., '1.1.1 (abcdef0)'. postgrestVersion number used in docs. Uses only the two first components of the version. Example: 'v1.1'Generates the OpenAPI outputNone #$%HNone #$Lz postgrestThe purpose of this worker is to obtain a healthy connection to pg and an up-to-date schema cache(DbStructure). This method is meant to be called multiple times by the same thread, but does nothing if the previous invocation has not terminated. In all cases this method does not halt the calling thread, the work is preformed in a separate thread.Background thread that does the following : 1. Tries to connect to pg server and will keep trying until success. 2. Checks if the pg version is supported and if it's not it kills the main program. 3. Obtains the dbStructure. If this fails, it goes back to 1. postgrestStarts a dedicated pg connection to LISTEN for notifications. When a NOTIFY  db-channel - with an empty payload - is done, it refills the schema cache. It uses the connectionWorker in case the LISTEN connection dies. postgrest3Re-reads the config plus config options from the dbNone M/ postgrest7Run the PostgREST application with user defined socket. postgrest2Set signal handlers, only for systems with signalsPostgREST main applicationNone #$M postgrestPostgREST applicationNone #$%NA postgrestCommand line interface options postgrest6Read command line interface options. Also prints help.  !"#$%&''()*+,-./0123456789::;<=>?@ABCDEFGHIJKLMNOPQRRSTUVWXYZ[\]^_`abcdefgghijklmnopqrstuvwxyz{|}~                                                                                                                                                       postgrest-9.0.0-inplacePostgREST.Config.JSPathPostgREST.Config.PgVersionPostgREST.Config.DatabasePostgREST.Config.ProxyPostgREST.ContentType!PostgREST.DbStructure.IdentifiersPostgREST.ConfigPostgREST.DbStructure.ProcPostgREST.DbStructure.Table"PostgREST.DbStructure.RelationshipPostgREST.DbStructurePostgREST.AppStatePostgREST.ErrorPostgREST.AuthPostgREST.GucHeaderPostgREST.RangeQueryPostgREST.Request.PreferencesPostgREST.Request.TypesPostgREST.Query.SqlFragmentPostgREST.Request.ParsersPostgREST.Request.ApiRequest"PostgREST.Request.DbRequestBuilderPostgREST.Query.StatementsPostgREST.MiddlewarePostgREST.Query.QueryBuilderPostgREST.VersionPostgREST.OpenAPIPostgREST.WorkersPostgREST.Unix PostgREST.App PostgREST.CLIPaths_postgrest JSPathExpJSPKeyJSPIdxJSPath dumpJSPath pRoleClaimKey PgVersionpgvNumpgvNameminimumPgVersion pgVersion96 pgVersion100 pgVersion109 pgVersion110 pgVersion112 pgVersion114 pgVersion121 pgVersion130 pgVersion140$fOrdPgVersion $fEqPgVersion$fGenericPgVersion$fToJSONPgVersionqueryPgVersionqueryDbSettingsProxy proxyScheme proxyHost proxyPort proxyPathisMalformedProxyUritoURI ContentTypeCTApplicationJSONCTSingularJSON CTTextCSV CTTextPlain CTOpenAPI CTUrlEncoded CTOctetStreamCTAnyCTOthertoHeadertoMimedecodeContentType$fEqContentType FieldName TableNameSchemaQualifiedIdentifierqiSchemaqiNamedumpQitoQi$fHashableQualifiedIdentifier$fEqQualifiedIdentifier$fOrdQualifiedIdentifier$fGenericQualifiedIdentifier$fToJSONQualifiedIdentifier$fToJSONKeyQualifiedIdentifier Environment OpenAPIMode OAFollowPriv OAIgnorePriv OADisabledLogLevelLogCritLogErrorLogWarnLogInfo AppConfigconfigAppSettingsconfigDbAnonRoleconfigDbChannelconfigDbChannelEnabledconfigDbExtraSearchPathconfigDbMaxRowsconfigDbPoolSizeconfigDbPoolTimeoutconfigDbPreRequestconfigDbPreparedStatementsconfigDbRootSpecconfigDbSchemasconfigDbConfigconfigDbTxAllowOverrideconfigDbTxRollbackAll configDbUriconfigDbUseLegacyGucsconfigFilePath configJWKSconfigJwtAudienceconfigJwtRoleClaimKeyconfigJwtSecretconfigJwtSecretIsBase64configLogLevelconfigOpenApiModeconfigOpenApiServerProxyUriconfigRawMediaTypesconfigServerHostconfigServerPortconfigServerUnixSocketconfigServerUnixSocketModetoText readAppConfig parseSecretreadPGRSTEnvironment$fJustIfMaybeaMaybe$fJustIfMaybeaa$fEqOpenAPIModeProcsMap ProcParamppNameppTypeppReqppVarProcDescriptionpdSchemapdName pdDescriptionpdParams pdReturnType pdVolatility pdHasVariadicProcVolatilityVolatileStable ImmutableRetTypeSingleSetOfPgTypeScalar CompositeprocReturnsScalarprocReturnsSingle procTableName$fOrdProcDescription$fEqProcDescription$fGenericProcDescription$fToJSONProcDescription $fEqProcParam$fOrdProcParam$fGenericProcParam$fToJSONProcParam$fEqProcVolatility$fOrdProcVolatility$fGenericProcVolatility$fToJSONProcVolatility $fEqRetType $fOrdRetType$fGenericRetType$fToJSONRetType $fEqPgType $fOrdPgType$fGenericPgType$fToJSONPgTypeColumncolTablecolNamecolDescription colNullablecolType colMaxLen colDefaultcolEnumTable tableSchema tableNametableDescriptiontableInsertabletableUpdatabletableDeletabletableQi $fEqTable $fEqColumn$fGenericPrimaryKey$fToJSONPrimaryKey $fOrdColumn$fGenericColumn$fToJSONColumn $fShowTable $fOrdTable$fGenericTable $fToJSONTable PrimaryKeypkTablepkNameJunctionjunTablejunConstraint1 junColumns1junConstraint2 junColumns2 CardinalityO2MM2OM2M RelationshiprelTable relColumnsrelForeignTablerelForeignColumnsrelCardinalityisSelfReference$fEqRelationship$fGenericRelationship$fToJSONRelationship$fEqCardinality$fGenericCardinality$fToJSONCardinality $fEqJunction$fGenericJunction$fToJSONJunction DbStructuredbTables dbColumnsdbRelationships dbPrimaryKeysdbProcs tableCols tablePKColsqueryDbStructureaccessibleProcsschemaDescriptionaccessibleTables$fGenericDbStructure$fToJSONDbStructureAppStateinit initWithPoolgetPool releasePool getPgVersion putPgVersiongetDbStructureputDbStructure getJsonDbS putJsonDbS getIsWorkerOn putIsWorkerOngetRetryNextInputRetryNextIn getConfig putConfiggetTime logWithZTimegetMainThreadId waitListenersignalListenerErrorGucHeadersErrorGucStatusErrorBinaryFieldErrorConnectionLostErrorPutMatchingPkErrorPutRangeNotAllowedErrorJwtTokenMissingJwtTokenInvalidSingularityErrorNotFoundApiRequestErrorPgErrPgErrorActionInappropriate InvalidRange InvalidBodyParseRequestError NoRelBetweenAmbiguousRelBetween AmbiguousRpcNoRpcInvalidFiltersUnacceptableSchemaContentTypeErrorUnsupportedVerb errorPayloaderrorResponseFor checkIsFatalsingularityError$fToJSONCommandError$fToJSONQueryError$fToJSONUsageError$fToJSONApiRequestError$fPgrstErrorApiRequestError$fToJSONPgError$fPgrstErrorPgError $fToJSONError$fPgrstErrorError JWTClaims jwtClaims containsRole GucHeaderunwrapGucHeaderaddHeadersIfNotIncluded$fFromJSONGucHeader NonnegRange rangeParserangeRequested restrictRange rangeLimit rangeOffsetrangeGeqallRangerangeStatusHeader contentRangeHPreferTransactionCommitRollback PreferCount ExactCount PlannedCountEstimatedCountPreferParameters SingleObjectMultipleObjectsPreferRepresentationFull HeadersOnlyNonePreferResolutionMergeDuplicatesIgnoreDuplicatesToAppliedHeadertoAppliedHeader PreferencespreferResolutionpreferRepresentationpreferParameters preferCountpreferTransaction fromHeaders!$fToAppliedHeaderPreferResolution$fToHeaderValuePreferResolution#$fToHeaderValuePreferRepresentation$fToHeaderValuePreferParameters$fToHeaderValuePreferCount"$fToAppliedHeaderPreferTransaction $fToHeaderValuePreferTransaction$fEqPreferTransaction$fEqPreferCount$fEqPreferParameters$fEqPreferRepresentation TrileanValTriTrueTriFalseTriNull TriUnknownListVal SingleVal OperationOpInIsFtsOpExprFilter$sel:field:Filter$sel:opExpr:Filter LogicOperatorAndOr LogicTreeExprStmnt JsonOperandJKeyJIdx$sel:jVal:JKey JsonOperationJArrowJ2Arrow$sel:jOp:JArrowJsonPath EmbedPathJoinTypeJTInnerJTLeft EmbedParamEPHint EPJoinTypeHintAliasField SelectItem CallParams KeyParams OnePosParam CallQuery FunctionCall$sel:funCQi:FunctionCall$sel:funCParams:FunctionCall$sel:funCArgs:FunctionCall$sel:funCScalar:FunctionCall"$sel:funCMultipleCall:FunctionCall$sel:funCReturning:FunctionCall MutateQueryInsertUpdateDelete$sel:in_:Insert$sel:insCols:Insert$sel:insBody:Insert$sel:onConflict:Insert$sel:where_:Insert$sel:returning:Insert$sel:updCols:Insert$sel:updBody:Insert OrderNullsOrderNullsFirstOrderNullsLastOrderDirectionOrderAsc OrderDesc OrderTerm$sel:otTerm:OrderTerm$sel:otDirection:OrderTerm$sel:otNullOrder:OrderTerm JoinCondition ReadQuerySelect$sel:select:Select$sel:from:Select$sel:fromAlias:Select$sel:implicitJoins:Select$sel:where_:Select$sel:joinConditions:Select$sel:order:Select$sel:range_:SelectDepthNodeNameReadNode CallRequest MutateRequest ReadRequest fstFieldNames $fEqReadQuery $fEqLogicTree $fEqFilter $fEqOpExpr $fEqOperation$fEqTrileanVal$fEqLogicOperator $fEqOrderTerm$fEqJsonOperation$fEqJsonOperand $fEqJoinType$fEqOrderNulls$fEqOrderDirection$fEqJoinCondition SqlFragment noLocationF sourceCTEName operators ftsOperatorsnormalizedBodysingleParameter selectBody pgFmtIdentasCsvFasJsonF asJsonSingleF asBinaryF locationFfromQi pgFmtColumnpgFmtSelectItempgFmtOrderTermpgFmtJoinConditionpgFmtLogicTreecountF returningF limitOffsetFresponseHeadersFresponseStatusFunknownEncoderintercalateSnippetpRequestSelectpRequestOnConflictpRequestFilter pRequestOrder pRequestRangepRequestLogicTreepRequestColumns pTreePath pSingleValpOrder pOrderTerm pLogicTreepLogicSingleVal pLogicPathpColumns ApiRequestiActioniRangeiTopLevelRangeiTargetiPayloadiPreferRepresentationiPreferParameters iPreferCountiPreferResolutioniPreferTransactioniFiltersiLogiciSelect iOnConflictiColumnsiOrder iCanonicalQSiJWTiHeadersiCookiesiPathiMethodiProfileiSchemaiAcceptContentTypeTarget TargetIdent TargetProcTargetDefaultSpec TargetUnknowntProc tpIsRootSpec tdsSchemaAction ActionCreate ActionRead ActionUpdate ActionDeleteActionSingleUpsert ActionInvoke ActionInfo ActionInspectisHead InvokeMethodInvHeadInvGetInvPostPayload ProcessedJSONRawJSONRawPaypayRawpayKeysuserApiRequest$fToJSONRpcParamValue $fEqAction$fEqInvokeMethod readRequest mutateRequest callRequestcreateWriteStatementcreateReadStatementcallProcStatementcreateExplainStatement runPgLocals pgrstFormatpgrstMiddlewaredefaultCorsPolicy corsPolicyoptionalRollbackreadRequestToQuerymutateRequestToQueryrequestToCallProcQueryreadRequestToCountQuery limitedQuery prettyVersion docsVersionencodeconnectionWorkerlistener reReadConfig$fEqConnectionStatusrunAppWithSocketinstallSignalHandlers SocketRunnerSignalHandlerInstallerrun postgrestCommandCmdRun CmdDumpConfig CmdDumpSchemaCLI cliCommandcliPathmainreadCLIShowHelpversiongetDataFileName getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirbaseGHC.MVartakeMVar stateListener(Ranged-sets-0.4.0-Dds7eMziq1b5nFDZIrfiy6Data.Ranged.RangesRange