steve-chavez
f995799e8f
refactor: remove fkey from allPrimaryKeys query
...
The query had the unnecessary 'f' in `c.contype in ('p', 'u', 'f')`
Also comment and clarify the query by using explicit JOINs
2022-04-18 15:48:03 -05:00
steve-chavez
44e2b2fbb4
refactor: DRY allTables/accessibleTables query
2022-04-18 15:48:03 -05:00
steve-chavez
2eaf81334e
nix: local history for nix-shell
2022-04-18 15:48:03 -05:00
steve-chavez
c399b1f5f8
nix: log all statements in temp db
2022-04-18 15:48:03 -05:00
steve-chavez
f3f9030c48
disallow limit/offset on views
2022-03-26 15:29:13 +01:00
steve-chavez
73dc2692b1
refactor: add findTable function
2022-03-26 15:29:13 +01:00
steve-chavez
87ffe39746
fix: ignore max-rows on POST/PATCH/PUT/DELETE
2022-03-26 15:29:13 +01:00
steve-chavez
331e88ea39
feat: add limited delete
2022-03-26 15:29:13 +01:00
steve-chavez
f4becf99ad
feat: add limited update
2022-03-26 15:29:13 +01:00
Steve Chavez and GitHub
a3c1d9977f
Correct live/ready checks to consider special host values ( #2182 )
2022-03-11 15:16:45 +01:00
steve-chavez
dcf7ade5bc
bump version to 9.0.0.20220211
2022-02-11 14:47:33 -05:00
Steve Chavez and GitHub
9021c96baa
fix: Keep working when EMFILE is reached ( #2158 )
...
Done by upgrading to warp 3.3.19
2022-02-09 17:27:29 -05:00
Steve Chavez and GitHub
c7cadcd776
Fix embedded filter silently getting ignored ( #2133 )
...
When the embedded resource is not included in the request
2022-01-24 17:52:27 -05:00
Steve Chavez and GitHub
65f27653dc
cov: empty coverage overlay ( #2119 )
...
The overlay depended on the version number, which caused errors when upgrading.
Also update cabal description.
2022-01-07 13:06:03 -05:00
steve-chavez
a134d8a493
pre-release: Bump to 9.0.0.20220107
...
Previous pre-release had a wrong date
2022-01-07 11:06:03 -05:00
steve-chavez
3ded567f6d
pre-release: Bump to 9.0.0.20210107
2022-01-07 11:01:59 -05:00
steve-chavez and Wolfgang Walther
51ee072f84
fix: clarify error for failed schema cache load
2022-01-07 09:31:30 +01:00
steve-chavez and Wolfgang Walther
aa82d2e277
Consider schema cache state on the ready check
...
* empty schema cache when it fails loading so the ready check can pick
its new state
2022-01-07 09:31:30 +01:00
steve-chavez
4a9ca9bdae
Add live endpoint to admin server
...
* refactor io tests
* add network package to windows
2022-01-04 20:12:52 -05:00
steve-chavez
65a3ae08f0
Change admin health endpoint to ready
2022-01-04 20:12:52 -05:00
steve-chavez
bba6e96fd3
Connect to main app socket on health check
2022-01-04 20:12:52 -05:00
Steve Chavez and GitHub
ac3655df1d
feat: minimal health check ( #2092 )
2021-12-23 08:00:10 -05:00
Steve Chavez and GitHub
c86e254a24
fix: is not working with upper/mixed case values ( #2081 )
2021-12-14 19:13:38 -05:00
Steve Chavez and GitHub
c9f017c632
Bump to v9 ( #2045 )
...
* Reorganize the CHANGELOG
* Add missing change for dropping support for embedding hints used with '.'
* Move the pg 14 compatibility entry to Added
2021-11-26 14:10:57 -05:00
steve-chavez
132ecd8d74
Correct count query when doing inner joins
2021-11-26 10:39:19 -05:00
steve-chavez
1b48531369
remove the db-embed-default-join config
2021-11-23 12:32:51 -05:00
steve-chavez
bf58a3600a
refactor: remove pgFmtLit
2021-11-18 17:01:58 -05:00
steve-chavez
bae5afbad6
feat: allow unknown on the is operator
...
Also make the IS values strict at the Parser level since IS cannot be
parametrized.
2021-11-18 17:01:58 -05:00
3b83f536ca
Correct inner join to use proper aliases ( #1978 )
...
"_" was used for all the internal json_agg aliases. Now an alias
with "_" plus a local table name is used.
Co-authored-by: Cole Arendt <cole.arendt@outlook.com >
2021-10-18 17:34:31 -05:00
steve-chavez
ee56dd5db1
feat: filter top-level resource with embed filter
...
This is enabled by adding `!inner` to the embedded resource
/projects?select=*,clients!inner(*)&clients.id=eq.12
This behaviour can be enabled by default with the config option
db-embed-default-join='inner'
Which saves the need for specifying `!inner` on every request.
If this is enabled, the previous behavior can be restored
per request by specifying `!left` on the embedded resource.
/projects?select=*,clients!left(*)&clients.id=eq.12`
Tested on M20/02M/M2M relationships, views, RPC.
2021-10-04 13:46:32 -05:00
steve-chavez
bf91187e63
Drop support for embed hints used as '.'
...
Hints used like `select=projects.client_id(*)` were already
deprecated.
'!' should be used from now on `select=projects!client_id(*)`
2021-10-04 13:46:32 -05:00
steve-chavez
885ff60138
pre-release: Bump to v9.0.0-a1
2021-09-14 15:51:32 -05:00
steve-chavez
72a28a145d
feat: Allow backslash escaping inside double quotes
...
Examples:
- ?col=in.("Double\"Quote")
- ?col=in.("Back\\slash")
Backslashed chars get passed as is
- ?col=in.("\a\b\c") = ?col=in.(abc)
2021-09-13 19:06:30 -05:00
steve-chavez
4a594d5e95
fix: using " and \ as values on the in filter
...
Properly escape the array literal built at the QueryBuilder
stage.
2021-09-13 19:06:30 -05:00
steve-chavez
d4c6abbaec
feat: RPC POST for function w/single unnamed param
...
For POST on RPC, allows:
* passing a json object without using `Prefer: params=single-object`
The function must be defined with a single unnamed json param and
`Content-Type: application/json` must be specified.
* uploading binary to a function
The function must be defined with a single unnamed bytea param and
`Content-Type: application/octet-stream` must be specified.
* uploading raw text to a function
The function must be defined with a single unnamed text param and
`Content-Type: text/plain` must be specified.
BREAKING CHANGE If there's a function "my_func" having a single
unnamed json param and other overloaded pairs(with any number of
params), PostgREST won't be able to resolve a POST request to
"my_func". For solving this, you can name the unnamed json param.
my_func(json) -> my_func(prm json)
2021-08-30 18:17:59 -05:00
steve-chavez
caaa34b5de
refactor: add CallQuery type
...
Shortens requestToCallProcQuery, which should generate SQL in a more
direct way.
2021-08-30 18:17:59 -05:00
steve-chavez
c9a60373f6
refactor: PgArg to ProcParam
...
Clarify the difference between arguments and parameters.
Parameters are part of the function definition, arguments are the values
passed to the function.
Also clarify the findProc function comments and error message.
2021-08-30 18:17:59 -05:00
steve-chavez
0bc7c034cf
Bump to version v8.0.0
2021-07-25 23:12:51 -05:00
steve-chavez
cbe0e5254e
Reorganize the CHANGELOG
...
* Removed some entries that were fixes for the nigthly versions, not
stable versions.
* Reference the actual issue number(not the PR number) on some entries
* Remove duplicate entries
* Clarify some entries
* Grouped CLI entries
2021-07-25 23:12:51 -05:00
steve-chavez
0961a587c0
Correct openapi ignore-privs table comments
2021-07-06 11:19:54 -05:00
steve-chavez
f3a184af01
Correct openapi ignore mode to filter schemas
...
Also rename openapi-mode options
* follow-acl -> follow-privileges
* ignore-acl -> ignore-privileges
2021-06-27 22:48:49 -05:00
Steve Chavez and GitHub
41d119b19f
feat: add openapi-mode config ( #1881 )
...
* openapi-mode="follow-acl"(default): follows access control for the
JWT role.
* openapi-mode="ignore-acl": ignores access control for the JWT role.
* openapi-mode="disabled": disables OpenAPI output, the root endpoint
replies with 404 Not Found.
2021-06-25 19:20:04 -05:00
steve-chavez
1759c1c75b
Update CirrusCI encrypted var
2021-06-22 20:10:43 -05:00
Steve Chavez and GitHub
2944cf94c7
feat: Add time to startup/worker logs ( #1872 )
...
BREAKING CHANGE
Sends startup/worker logs to stderr to differentiate them from
access logs, which go to stdout
2021-06-19 15:55:18 -05:00
steve-chavez
d99909c403
feat: request.spec GUC for db-root-spec
...
The request.spec GUC contains the schema cache structure in json.
It's only available when the root endpoint(/) is requested and when
db-root-spec is not empty.
Also correct db-root-spec to accept a schema.
2021-05-30 16:48:08 -05:00
steve-chavez
f169661ce6
refactor: move DbStructure.PgVersion to Config
...
Now that PgVersion is not part of DbStructure, Config is a more apt
module for it.
Also rename getDbStructure to queryDbStructure. AppState also had a
getDbStructure function for a record field.
2021-05-30 16:48:08 -05:00
steve-chavez
823348a72a
refactor: configDbPreRequest to QualifiedIdentifier
2021-05-30 16:48:08 -05:00
steve-chavez
5c75f0dcc2
Update BACKERS.md
...
Correct wrong link
2021-05-16 14:32:51 -05:00
steve-chavez
601c802f23
Update BACKERS.md
2021-05-16 14:23:10 -05:00
steve-chavez
082c91c855
refactor: remove pgVersion from DbStructure
...
Also use a dedicated MVar for listener
2021-04-30 10:06:07 -05:00
steve-chavez
0f6a13191c
refactor: remove colFK from Column
2021-04-30 10:06:07 -05:00
steve-chavez
6e0ef95320
Add GNUHost as a sponsor
2021-04-23 14:29:33 -05:00
steve-chavez
082da78f4c
fix: disregard internal junction when embedding
...
Added test cases for a lone internal junction and an internal junction
exposed homonym
2021-04-21 10:28:20 -05:00
steve-chavez
21d280497b
refactor: Relation to Relationship
...
Also remove the unused UnknownRelationship error.
2021-04-21 10:28:20 -05:00
Steve Chavez and GitHub
698bfe6e7b
refactor: make Junction non-recursive ( #1818 )
...
Also Cardinality now includes a Junction or ConstraintName
2021-04-16 13:12:58 -05:00
steve-chavez
9c79a4174c
Add Contributor Covenant Code of Conduct v2
2021-04-06 22:22:13 -05:00
steve-chavez
71f6061d30
Add Supabase as a sponsor
2021-03-25 20:42:43 -05:00
steve-chavez
d3a8b5f6e1
Change db-load-guc-config to db-config
...
Make clear that in-db config is being read
2021-03-05 19:03:15 -05:00
steve-chavez
498e77215a
Reread in-db config when recoverying connection
...
* Separate reading files from whole config re-read
* Only reload external file on SIGUSR2/NOTIFY
2021-03-05 19:03:15 -05:00
steve-chavez
6750a5c44d
Restrict db settings to current db and global
...
Global settings are overriden by database specific settings if they
share common ones.
2021-03-05 19:03:15 -05:00
steve-chavez
e4516ab606
Correct db settings to use "_" instead of "-"
...
GUC settings with dashes cannot be shown with show or current_setting.
https://www.postgresql.org/message-id/flat/20210209144059.GA21360%40depesz.com
2021-03-05 19:03:15 -05:00
steve-chavez
b50b67491d
Update CYBERTEC logo and BACKERS
2021-02-25 20:03:38 -05:00
Steve Chavez and GitHub
c93e8f9e0c
Correct hardcoded postgrest_test_authenticator ( #1743 )
...
Also remove panic from Config and correct io test not running
2021-01-25 18:38:46 -05:00
steve-chavez
6557f1f9c0
correct NOTIFY config reload dying on error
2021-01-22 15:56:08 -05:00
steve-chavez
17af56adb1
refactor: config validation inside readAppConfig
...
Remove Either from configJwtRoleClaimKey/configServerUnixSocketMode
and remove whenLefts.
2021-01-22 15:56:08 -05:00
steve-chavez
4344cc9202
refactor: use optString and move overrideFrom
2021-01-22 15:56:08 -05:00
steve-chavez
125ea8f6d9
feat: allow reloading config with NOTIFY
...
Enables reloading the config by doing:
NOTIFY pgrst, 'reload config'
Adds an alias for reloading the schema cache:
NOTIFY pgrst, 'reload schema'
2021-01-19 13:49:40 -05:00
steve-chavez
9c005fc683
feat: get configuration parameters from the db
...
Allows configuring postgrest from the db by setting config parameters
on the connection role. For example:
ALTER ROLE postgrest_test_authenticator
SET pgrst.jwt-secret = "REALLYREALLYREALLYREALLYVERYSAFE"
The above wWill set the `jwt-secret` config option accordingly.
SUPERUSER privileges are required for ALTERing role settings,
so this might not work on some cloud-managed databases.
This feature is enabled by default, for disabling it you can add the
following to the config file:
db-load-guc-config = false
2021-01-19 13:49:40 -05:00
steve-chavez
674615041a
Correct --dump-schema swallowing error
...
When there's no connection to pg, the following error happens
when running --dump-schema:
postgrest: user error (Pattern match failure in do expression at
main/Main.hs:361:5-14)
Now it shows a regular "could not connect to server.." error.
2021-01-19 13:49:40 -05:00
steve-chavez
15039553db
Correct openapi preparing statements by default
2021-01-19 13:49:40 -05:00
Steve Chavez and GitHub
ebd474a7e6
fix: retry connection on failed schema cache load ( #1685 )
...
Retry the connection when the
"Failed to load the schema cache" error happens.
Also die if the schema cache query has a syntax error.
2020-12-09 14:20:00 -05:00
steve-chavez
11d62a8010
Prepared statement for set_config
2020-12-07 20:09:18 -05:00
steve-chavez
7069bb3c01
refactor: Change SET LOCAL gucs to set_config
2020-12-07 20:09:18 -05:00
steve-chavez
9adec12a67
cirrusci: add build timeout
2020-11-23 19:00:50 -05:00
steve-chavez
787973f323
Add db-prepared-statements config
2020-11-23 19:00:50 -05:00
steve-chavez
4bd5e6bd82
perf: enable prepared statements for GET
...
- Parametrize filters
- Parametrize LIMIT/OFFSET
- Parametrize JSON path(select=col->$1)
- Single parameter for IN(use ANY)
- Also enable prepared statement for the EXPLAIN
used on the estimated count.
2020-11-23 19:00:50 -05:00
steve-chavez
8e58b56d5c
refactor: Use hasql-dynamic on RPC/POST/PUT/PATCH
...
Change callProc/createWriteStatement to H.Snippet.
Parametrize the inputs on the same SQLFragments by taking advantage
of hasql-dynamic-statements. It's not necessary to parametrize
every input, inlining with pgFmtLit can still be used for queries
that can't be parametrized(like SET LOCALs).
Also adds hasql-dynamic-statements to Nix and stack.
2020-11-23 19:00:50 -05:00
steve-chavez
65968b5320
circleci: fix nightly release
...
Also delete unused variable in release/default.nix
2020-11-13 14:12:28 -05:00
steve-chavez
ed8bf8272f
Update BACKERS.md
2020-11-13 14:01:58 -05:00
steve-chavez
3830887577
ci: add nightly version to cabal file
2020-11-10 22:47:58 -05:00
steve-chavez
b6d8d89b32
ci: add git sha with hours/minutes to nightly
2020-11-10 22:47:58 -05:00
steve-chavez
814da058ec
cirrusci: add nightly release
2020-11-10 22:47:58 -05:00
steve-chavez
5d140f6fa0
circleci: add nightly release
...
For github and dockerhub
2020-11-10 22:47:58 -05:00
steve-chavez
51b43f5605
nix: change release scripts to use a version arg
2020-11-10 22:47:58 -05:00
steve-chavez
8fd9a9ab5d
travisci: add nightly release
2020-11-10 22:47:58 -05:00
steve-chavez
5f3b581562
appveyor: add nightly release
2020-11-10 22:47:58 -05:00
steve-chavez
139f9b987a
nix: fix postgrest-release-dockerhubdescription
2020-11-10 22:47:58 -05:00
steve-chavez
63849f1275
circleci: make release job a machine
...
setup_remote_docker is somehow not working and gives:
docker: command not found
2020-11-10 22:47:58 -05:00
steve-chavez
9f8d1af2cd
nix: add postgrest-docker-login wrapper func
2020-11-10 22:47:58 -05:00
steve-chavez
8618ffa5fc
perf: shortcut for proc with no variadic arg
...
Also refactor how rpc params are converted to json
2020-10-29 18:53:24 -05:00
steve-chavez
2798ced9b9
Fix charset=utf-8 appending to binary output
2020-10-29 18:53:24 -05:00
steve-chavez
a6696f3ba1
refactor: add Hasql arrayColumn decoder
2020-10-29 18:53:24 -05:00
steve-chavez
04eaeec7fc
refactor: reorder PgVersion(95/96)Spec tests
...
* move json ops tests to JsonOperatorSpec
* move phfts operator tests to QuerySpec and RpcSpec
* add custom spec for pre-request header guc tests
2020-10-29 18:53:24 -05:00
steve-chavez
d1d0c6772a
perf: change Text queries to ByteString
...
Improves performance by not utf8 encoding the whole query with
encodeUtf8. Only certain parts.
It's also a gradual step needed to use the Snippet type
from hasql-dynamic-statements.
2020-10-17 15:01:06 -05:00
steve-chavez
7e3e19acbb
refactor: untangle addFiltersOrdersRanges
...
Remove convoluted function composition
2020-10-17 15:01:06 -05:00
steve-chavez
ccad9eb9bc
Change default log-level, from info to error
2020-10-06 14:21:46 -05:00
steve-chavez
d9a608d9b0
Add warn log level
2020-10-06 14:21:46 -05:00
steve-chavez
f6b6abe734
Add error log level
2020-10-06 14:21:46 -05:00
steve-chavez
e9efcc70a5
Add log-level config
2020-10-06 14:21:46 -05:00
Steve Chavez and GitHub
189847927e
Schema cache reload with zero downtime ( #1559 )
...
* Improve error messages and comments
* Reorder Main.hs functions
2020-07-16 13:39:25 -05:00