postgresql - 使用第一列创建表,然后从另一个表中复制所有列
问题描述
有没有办法做标题所说的而不必使用这样的东西
Insert into TableB
(Col1, Col2 ,Col3)
Select Col1, Col2 ,Col3 from TableA
TableA 有超过 40 列,所以这很乏味。
TableB 将以手动创建的一列结束,并且是第一列,然后将从 TableA 复制所有其他列名和数据结构。
为了澄清,在此操作之后将不需要 TableA。最终目标是在 TableA 的开头获得一个新列。我认为这样做的唯一方法是创建一个新表,其中包含新列和来自 tabelA 的数据,但是任何可以完成任务的解决方案都可以。
解决方案
你可以通过给新列一个别名来做到这一点,然后通配符其余的。
insert into TableB
select
(some expression) as newColumn, *
from TableA
您也可以通过这种方式创建表。
create table TableB as
select
(some expression) as newColumn, *
from TableA
TableB 将以手动创建的一列结束,并且是第一列,然后将从 TableA 复制所有其他列名和数据结构。
由于我们设置触发器的方式,我需要在表中插入一列,但它必须位于表的开头,而不是结尾。那是最终的目标。
应避免重复数据。请考虑一个视图。它看起来像一个表格,但它不会复制任何内容。它非常适合保持与旧查询或坏查询的兼容性。
create view tableB as
select
(some expression) as newColumnName, *
from tableA
或者“重新排序”表:创建新表,删除旧表,然后重命名新表。有关更多信息,请参阅此答案。
create table TableB as
select
(some expression) as newColumn, *
from TableA;
drop table tableA;
alter table tableB rename to tableA;
同时,应该修复任何依赖列顺序的查询。
推荐阅读
- python - 如何防止用户名包含@/./+/-/_.?
- angular - angular 5 为 i18n 动态更改语言环境
- android - 当我将旧项目更新为新项目时,gradle 启动失败
- ios - 在 iPad 和 iPhone 之间连接蓝牙
- c# - 如何在没有 Moq 的情况下在 C# 中实例化 FormFile 的实例?
- pyspark - Spark Dataframe 在 count() 上返回不一致的值
- tensorflow - Loss、accuracy、validation loss、Validation accuracy 有什么区别?
- qt - 通过 QSoftFilterProxyModel 的项目数
- python - Python kivy md 导航栏位置?
- javascript - 无法为未定义的变量赋值