【问题标题】:DBeaver export SQL file as INSERT statements with aliased columns namesDBeaver 将 SQL 文件导出为带有别名列名称的 INSERT 语句
【发布时间】:2019-07-15 21:32:35
【问题描述】:

我有这个 SQL 查询:

SELECT
    id as address_uuid,
    parent_addresses_id as parent_address_uuid,
    CONCAT_WS(', ',
    address_street1,
    address_street2,
    parsed_city,
    parsed_state,
    parsed_postal) as address,
    parcel_master_units as units,
    fiber_type as tenancy_type,
    created_date as created_at,
    modified_date as updated_at
FROM 
    addresses
WHERE 
    parsed_city = 'Minneapolis'
AND 
    deleted != 1

任何人都知道如何将其导出为 INSERT 语句的 SQL 文件,其中的列与我的别名匹配,如下所示:

INSERT INTO addresses (address_uuid,parent_address_uuid,address,units,tenancy_type,created_at,updated_at) VALUES (...)

而不是它当前正在导出的内容:

INSERT INTO addresses (id,parent_addresses_id,address,parcel_master_units,fiber_type,created_date,modified_date) VALUES (...)

或者另一个可以处理这个的 GUI?我正在尝试迁移大量地址数据,如果我能让 INSERT 语句为新表提供正确的列名,这将很容易。

【问题讨论】:

  • 删除别名或将其更改为所需的值,因为您的 GUI 正在从查询中导出值。因此,例如,不要将“id as address_uuid”改为“id”。
  • 我需要 INSERT 语句的列名来匹配别名。
  • 更改选择的别名。导出的插入语句将包含该名称。
  • 改成什么?我从上面的查询中导出,它有别名列。在 INSERT 语句中实际保留别名的唯一一个是 CONCAT_WS () 作为地址列。其他的则恢复为原来的列名。

标签: sql postgresql export resultset dbeaver


【解决方案1】:

您可以在 DBeaver 中尝试这种基于 GUI 的方法。

右击表格->导出数据。这将打开数据传输向导。从选项中选择数据库。检查选项,如果你很好,然后点击“下一步”。这将为您提供选择目标容器(架构)的选项。选择您想要的目标。

接下来,在 Source 旁边,您应该看到空白作为 Target。单击“新建”(左下角)以创建新表。单击源表名称旁边的下拉箭头 ( > ),这应该会显示列列表。然后,您可以根据要求选择列并重命名它们。此外,如果您选择列的映射,您会发现更多选项来控制数据类型。

希望这对您的问题有所帮助。

【讨论】:

    【解决方案2】:

    这个 hacky 解决方案奏效了:

    SELECT
        CONCAT(id) as address_uuid,
        CONCAT(parent_addresses_id) as parent_address_uuid,
        CONCAT_WS(', ',
        address_street1,
        address_street2,
        parsed_city,
        parsed_state,
        parsed_postal) as address,
        CONCAT(parcel_master_units) as units,
        CONCAT(fiber_type) as tenancy_type,
        CONCAT(created_date) as created_at,
        CONCAT(modified_date) as updated_at
    FROM 
        addresses
    WHERE 
        parsed_city = 'Minneapolis'
    AND deleted != 1
    

    不确定为什么别名没有应用于导出的 INSERT 语句,所以如果有人知道解决这个问题的诀窍,我很想知道!

    【讨论】:

      【解决方案3】:

      更改当前查询:

      SELECT
          id as address_uuid,
          parent_addresses_id as parent_address_uuid,
          CONCAT_WS(', ',
          address_street1,
          address_street2,
          parsed_city,
          parsed_state,
          parsed_postal) as address,
          parcel_master_units as units,
          fiber_type as tenancy_type,
          created_date as created_at,
          modified_date as updated_at ...
      

      要包含所需的列名,既然您说“恢复为原始名称”,只需删除别名:

      SELECT
          id,
          parent_addresses_id,
          CONCAT_WS(', ',
          address_street1,
          address_street2,
          parsed_city,
          parsed_state,
          parsed_postal) as address,
          parcel_master_units, 
          fiber_type,
          created_date,
          modified_date  ...
      

      【讨论】:

      • 你误会了。尽管有别名,它们已经恢复到原始列名。我希望他们别名。 DBeaver 不会在导出时维护别名。
      • 是的,我误会了;对不起。我刚刚下载了 DBeaveer 6.1.2,我认为它可以交互地做你想做的事,不知道作为脚本。在 sql 编辑器窗口中执行您的 SQL。然后在结果窗口中选择条目网格并右键单击。那里有一个导出选项,似乎保留了查询中的别名。再次不知道这是否可以作为脚本/宏使用。祝你好运。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多