Skip to main content
Question

Help... ROLLBACK 7976: Add column with default subquery is not supported for unsegmented projection

  • March 11, 2021
  • 3 replies
  • 15 views

kfruchtman
Forum|alt.badge.img+2

I have done the same as on this post:
https://forum.vertica.com/discussion/241554/how-to-add-a-new-column-to-a-table-efficiently
and when I alter the micky table on my db and giving this command:
ALTER TABLE mickey
ADD months_worked INTEGER DEFAULT(SELECT months_worked FROM helper WHERE id=mickey.id);

This is what I get:
ROLLBACK 7976: Add column with default subquery is not supported for unsegmented projections
DETAIL: Projection "spins_DBD_15_rep_test_ittai_3" is unsegmented and is either super projection or specified in the projection list

how can I workaround that?
I am working on Vertica 9.3 version.
Please help me!
Keren

3 replies

SruthiA
Forum|alt.badge.img+1
  • Participating Frequently
  • March 11, 2021

Can you share us with the export objects of the table mickey?


Jim_Knicely
Forum|alt.badge.img+2
  • Participating Frequently
  • March 11, 2021

@kfruchtman - This is a bug. I opened a Jira to get it fixed and will update this thread with the hotfix when it is avaiable.

Note that you can use SET USING...

Example:

dbadmin=> CREATE TABLE mickey (id INT);
CREATE TABLE

dbadmin=> CREATE PROJECTION mickey_rep AS SELECT * FROM mickey UNSEGMENTED ALL NODES;
CREATE PROJECTION

dbadmin=> INSERT INTO mickey SELECT 1;
 OUTPUT
--------
      1
(1 row)

dbadmin=> CREATE TABLE helper (id INT, months_worked INT);
CREATE TABLE

dbadmin=> INSERT INTO helper SELECT 1, 12;
 OUTPUT
--------
      1
(1 row)

dbadmin=> ALTER TABLE mickey ADD months_worked INTEGER DEFAULT(SELECT months_worked FROM helper WHERE id=mickey.id);
ROLLBACK 7976:  Add column with default subquery is not supported for unsegmented projections
DETAIL:  Projection "mickey_rep" is unsegmented and is either super projection or specified in the projection list

dbadmin=> ALTER TABLE mickey ADD months_worked INTEGER SET USING (SELECT months_worked FROM helper WHERE id=mickey.id);
ALTER TABLE

dbadmin=> SELECT refresh_columns('mickey', 'months_worked');
      refresh_columns
---------------------------
 refresh_columns completed
(1 row)

dbadmin=> SELECT * FROM mickey;
 id | months_worked
----+---------------
  1 |            12
(1 row)

Although not ideal, you can also just have segemented projections (for now) on the anchor table mickey...


kfruchtman
Forum|alt.badge.img+2
  • Author
  • Participating Frequently
  • March 11, 2021

That is a superb workaround!
Can I ask you another question? is there a way to automate this whole procedure? lets say table micky was updated from an outside source without the new column populated and everyday I need to update the helper table and then update the micky with the new value for the new column.Is it possible somehow?
many thanks
Keren