2016-11-12 4 views

Répondre

1

Je pense que le message d'erreur est un peu confus dans ce cas. Il n'est pas autorisé de mettre à jour la valeur de la clé de distribution elle-même, cependant, il est autorisé à mettre à jour/supprimer des lignes en prouvant la valeur de la clé de distribution. Voir l'exemple ci-dessous:

CREATE TABLE test_table (key int, value text); 

-- distribute the table 
SELECT create_distributed_table('test_table', 'key'); 

-- insert a row 
INSERT INTO test_table VALUES (1, 'some test'); 

-- get the inserted row 
SELECT * FROM test_table WHERE key = 1; 

-- now, update the row 
UPDATE test_table SET value = 'some another text' WHERE key = 1; 

-- get the updated row 
SELECT * FROM test_table WHERE key = 1; 

-- now delete the row 
DELETE FROM test_table WHERE key = 1; 

-- see that the row is delete 
SELECT * FROM test_table WHERE key = 1; 

Maintenant, permettez-moi de donner un exemple de ce qui n'est pas autorisé. Il n'est pas autorisé de mettre à jour la valeur de la clé de distribution, étant donné que la ligne est déjà placée sur un fragment basé sur cette valeur et la mise à jour de la valeur peut se retrouver avec la ligne ne se trouvant plus dans cette partition.

-- insert the row again 
INSERT INTO test_table VALUES (1, 'some test'); 

-- now, try to update the distribution key value 
UPDATE test_table SET key = 2 WHERE key = 1; 
ERROR: modifying the partition value of rows is not allowed 

Espérons que cela aide.

+0

ça marche pour moi. Merci beaucoup – Chan