max*_*axm 5 postgresql json database-migration hstore
我已经阅读了文档,似乎没有可识别的方法来执行ALTER TABLE ... ALTER COLUMN ... USING语句直接将json类型列转换为hstore类型.没有可用的功能(我知道)来执行演员表.
我的下一个最佳选择是创建一个新类型的hstore列,使用一些外部工具将我的JSON数据复制到该新列,删除旧json列并将新hstore列重命名为旧列的名称.
有没有更好的办法?
到目前为止我所拥有的是:
$ CREATE TABLE blah (unstructured_data JSON);
$ ALTER TABLE blah ALTER COLUMN unstructured_data
TYPE hstore USING CAST(unstructured_data AS hstore);
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)ERROR: cannot cast type json to hstore
poz*_*ozs 10
不幸的是,PostgreSQL不允许在USING子句中使用所有类型的表达式ALTER TABLE ... SET DATA TYPE ...(f.ex.子查询是不允许的).
但是,您可以编写一个函数来克服这个问题,您只需要决定如何处理高级类型(在对象的值中),如数组和对象.这是一个示例,它只是将它们转换为字符串:
CREATE OR REPLACE FUNCTION my_json_to_hstore(json)
RETURNS hstore
IMMUTABLE
STRICT
LANGUAGE sql
AS $func$
SELECT hstore(array_agg(key), array_agg(value))
FROM json_each_text($1)
$func$;
Run Code Online (Sandbox Code Playgroud)
之后,您可以在您的使用中使用此功能ALTER TABLE,例如:
ALTER TABLE blah
ALTER COLUMN unstructured_data
SET DATA TYPE hstore USING my_json_to_hstore(unstructured_data);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3273 次 |
| 最近记录: |