在创建视图时如何在Liquibase中指定列名?

时间:2013-11-25 14:21:37

标签: java database junit liquibase

我有一个数据库视图,它从两个具有相同名称的不同表中选择两列。

例如,为视图生成DDL将生成以下内容:

create view MYSCHEMA.VPRODUCTS ("Name", "AlternameName"...) AS
A.Name,
B.Name,
from  PRODUCTSA A
left join PRODUCTSB B
...

当我运行命令生成Liquibase更改集时,标记中的SQL仅包含两列的select语句,并且不区分唯一列名称(即“Name”,“AlternameName”)。< / p>

<createView viewName="VPRODUCTS ">SELECT  &#13;
A.Name&#13;
,B.Name&#13;
from PRODUCTSA A&#13;
left join PRODUCTSB B&#13;
...

因此,每当我尝试执行更改集时,Liquibase都会抱怨具有相同名称的列的重复条目。

我可以通过在标记中添加SQL“AS”语句来解决这个问题,但我更愿意,如果有更好的方法可以做到这一点。

<createView viewName="VPRODUCTS ">SELECT  &#13;
A.Name&#13;
,B.Name AS AlternateName &#13;
from PRODUCTSA A&#13;
left join PRODUCTSB B&#13;
...

是否有一个属性或标记允许我在创建视图时指定列名,或者在DDL中提供原始SQL?

2 个答案:

答案 0 :(得分:1)

没有别的办法。 Liquibase只是将嵌套的SELECT语句传递给create view语句,因此select中需要的任何内容都需要成为查询的一部分。除了预先挂起的“CREATE VIEW X”

之外,没有内置的视图语句预处理

如果您想提供原始SQL,您始终可以使用该标记。

答案 1 :(得分:1)

另一种方法是使用子选择,如下所示:

cassandra-cli

或者沿同一思路使用create column family quux with column_type = 'Super' and comparator = 'BytesType' and subcomparator = 'BytesType' and default_validation_class = 'BytesType' and key_validation_class = 'BytesType' and read_repair_chance = 0.1 and dclocal_read_repair_chance = 0.0 and gc_grace = 86400 and min_compaction_threshold = 4 and max_compaction_threshold = 32 and compaction_strategy = 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy' and caching = 'KEYS_ONLY' and cells_per_row_to_cache = '0' and default_time_to_live = 0 and speculative_retry = '99.0PERCENTILE' and compression_options = {'sstable_compression' : 'org.apache.cassandra.io.compress.SnappyCompressor'}; 块。