docs: explain missing preference header
This commit is contained in:
committed by
Steve Chavez
parent
20f1fdd35c
commit
ddd7d98652
@@ -12,7 +12,7 @@ The following preferences are supported.
|
|||||||
- ``Prefer: return``. See :ref:`prefer_return`.
|
- ``Prefer: return``. See :ref:`prefer_return`.
|
||||||
- ``Prefer: count``. See :ref:`prefer_count`.
|
- ``Prefer: count``. See :ref:`prefer_count`.
|
||||||
- ``Prefer: resolution``. See :ref:`prefer_resolution`.
|
- ``Prefer: resolution``. See :ref:`prefer_resolution`.
|
||||||
- ``Prefer: missing``. See :ref:`bulk_insert_default`.
|
- ``Prefer: missing``. See :ref:`prefer_missing`.
|
||||||
- ``Prefer: max-affected``, See :ref:`prefer_max_affected`.
|
- ``Prefer: max-affected``, See :ref:`prefer_max_affected`.
|
||||||
- ``Prefer: tx``. See :ref:`prefer_tx`.
|
- ``Prefer: tx``. See :ref:`prefer_tx`.
|
||||||
|
|
||||||
@@ -196,6 +196,47 @@ The ``tx`` preference can be set to specify if the :ref:`transaction <transactio
|
|||||||
{"id": 35, "name": "Project X"}
|
{"id": 35, "name": "Project X"}
|
||||||
|
|
||||||
|
|
||||||
|
.. _prefer_missing:
|
||||||
|
|
||||||
|
Missing
|
||||||
|
=======
|
||||||
|
|
||||||
|
When doing ``POST`` and ``PATCH`` requests, any missing columns in the payload will be inserted as ``null`` value by default. To use the ``DEFAULT`` column value instead, use the ``Prefer: missing=default`` header.
|
||||||
|
|
||||||
|
Having:
|
||||||
|
|
||||||
|
.. code-block:: postgres
|
||||||
|
|
||||||
|
create table foo (
|
||||||
|
id bigint generated by default as identity primary key
|
||||||
|
, bar text
|
||||||
|
, baz int default 100
|
||||||
|
);
|
||||||
|
|
||||||
|
A request:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
curl "http://localhost:3000/foo?columns=id,bar,baz" \
|
||||||
|
-H "Content-Type: application/json" \
|
||||||
|
-H "Prefer: missing=default, return=representation" \
|
||||||
|
-d @- << EOF
|
||||||
|
[
|
||||||
|
{ "bar": "val1" },
|
||||||
|
{ "bar": "val2", "baz": 15 }
|
||||||
|
]
|
||||||
|
EOF
|
||||||
|
|
||||||
|
Will result in:
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
[
|
||||||
|
{ "id": 1, "bar": "val1", "baz": 100 },
|
||||||
|
{ "id": 2, "bar": "val2", "baz": 15 }
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
.. _prefer_max_affected:
|
.. _prefer_max_affected:
|
||||||
|
|
||||||
Max Affected
|
Max Affected
|
||||||
|
|||||||
@@ -539,45 +539,6 @@ To bulk insert JSON post an array of objects having all-matching keys
|
|||||||
]
|
]
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
.. _bulk_insert_default:
|
|
||||||
|
|
||||||
Bulk Insert with Default Values
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Any missing columns in the payload will be inserted as ``null`` values. To use the ``DEFAULT`` column value instead, use the ``Prefer: missing=default`` header.
|
|
||||||
|
|
||||||
Having:
|
|
||||||
|
|
||||||
.. code-block:: postgres
|
|
||||||
|
|
||||||
create table foo (
|
|
||||||
id bigint generated by default as identity primary key
|
|
||||||
, bar text
|
|
||||||
, baz int default 100
|
|
||||||
);
|
|
||||||
|
|
||||||
A request:
|
|
||||||
|
|
||||||
.. code-block:: bash
|
|
||||||
|
|
||||||
curl "http://localhost:3000/foo?columns=id,bar,baz" \
|
|
||||||
-H "Content-Type: application/json" \
|
|
||||||
-H "Prefer: missing=default, return=representation" \
|
|
||||||
-d @- << EOF
|
|
||||||
[
|
|
||||||
{ "bar": "val1" },
|
|
||||||
{ "bar": "val2", "baz": 15 }
|
|
||||||
]
|
|
||||||
EOF
|
|
||||||
|
|
||||||
Will result in:
|
|
||||||
|
|
||||||
.. code-block:: json
|
|
||||||
|
|
||||||
[
|
|
||||||
{ "id": 1, "bar": "val1", "baz": 100 },
|
|
||||||
{ "id": 2, "bar": "val2", "baz": 15 }
|
|
||||||
]
|
|
||||||
|
|
||||||
.. _specify_columns:
|
.. _specify_columns:
|
||||||
|
|
||||||
@@ -651,7 +612,7 @@ You can make an upsert with :code:`POST` and the :code:`Prefer: resolution=merge
|
|||||||
By default, upsert operates based on the primary key columns, so you must specify all of them.
|
By default, upsert operates based on the primary key columns, so you must specify all of them.
|
||||||
You can also choose to ignore the duplicates with :code:`Prefer: resolution=ignore-duplicates`.
|
You can also choose to ignore the duplicates with :code:`Prefer: resolution=ignore-duplicates`.
|
||||||
Upsert works best when the primary key is natural (e.g. ``sku``).
|
Upsert works best when the primary key is natural (e.g. ``sku``).
|
||||||
However, it can work with surrogate primary keys (e.g. ``id serial primary key``), if you also do a :ref:`bulk_insert_default`:
|
However, it can work with surrogate primary keys (e.g. ``id serial primary key``), if you also do a :ref:`bulk_insert` with :ref:`prefer_missing`:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user