mam następujące typy zagnieżdżone zdefiniowane w PostgreSQL:Konwersja json do zagnieżdżony typu postgres kompozytowego
CREATE TYPE address AS (
name text,
street text,
zip text,
city text,
country text
);
CREATE TYPE customer AS (
customer_number text,
created timestamp WITH TIME ZONE,
default_billing_address address,
default_shipping_address address
);
I będzie teraz chciał zapełnić to typy w procedurze przechowywanej, który dostaje json jako parametr wejściowy. Działa to dla pól na najwyższym poziomie, wyjście pokazuje mi wewnętrzny format typu postgres kompozytowe:
# select json_populate_record(null::customer, '{"customer_number":"12345678"}'::json)::customer;
json_populate_record
----------------------
(12345678,,,)
(1 row)
Jednak postgres nie obsługuje zagnieżdżone struktury json:
# select json_populate_record(null::customer, '{"customer_number":"12345678","default_shipping_address":{"name":"","street":"","zip":"12345","city":"Berlin","country":"DE"}}'::json)::customer;
ERROR: malformed record literal: "{"name":"","street":"","zip":"12345","city":"Berlin","country":"DE"}"
DETAIL: Missing left parenthesis.
Co działa znowu jest, jeżeli nieruchomość jest zagnieżdżona w formacie wewnętrznym postgres' jak tutaj:
# select json_populate_record(null::customer, '{"customer_number":"12345678","default_shipping_address":"(\"\",\"\",12345,Berlin,DE)"}'::json)::customer;
json_populate_record
--------------------------------------------
(12345678,,,"("""","""",12345,Berlin,DE)")
(1 row)
czy istnieje jakiś sposób, aby uzyskać postgres przekonwertować z zagnieżdżonej struktury json do odpowiedniego typu kompozytowego ?
Podczas gdy prawdopodobnie nie chcę polegać na plpython dla tego problemu, ta odpowiedź pokazuje, że istnieje ogólne rozwiązanie i że postgres miałby wszystkie informacje potrzebne do jego wdrożenia. –