2016-12-05 2 views
0

Je remplis une base de données Postgres à l'aide de la gemme Sequel. Cependant, les données sont extraites d'un autre DB et contient déjà un ID. Je ne tire qu'une très petite partie de ces identifiants, et ils sont complètement aléatoires, donc ils sont très irrecevables.Comment insérer des données avec un ID spécifique dans Postgres à l'aide de Sequel

Est-il possible d'insérer des éléments dans ma base de données et de fournir l'ID spécifique à utiliser comme clé primaire, ou est-ce une mauvaise idée? J'ai essayé de fournir l'ID manuellement et j'ai obtenu "id est une clé primaire restreinte".

+0

Bienvenue chez SO. Veuillez lire "[ask]" et "[mcve]". Cela aiderait les autres à l'avenir si vous fournissez plus de détails sur ce que vous faites et comment vous le faites. Le code minimal qui illustre le problème est utile; Le code, comme une image, vaut 10 000 mots. –

Répondre

0

Vous ne pouvez pas insérer l'ID, car la base de données et la suite souhaitent définir la valeur d'index primaire sous la forme d'un nombre séquentiel.

Vous pouvez supprimer le :id du hachage en utilisant la méthode de hachage delete:

foo = {id: 1, bar: 2} 
foo.delete(:id) # => 1 
foo # => {:bar=>2} 

puis utilisez insert.

Si vous absolument devez réutiliser ces ID, vous pouvez trier vos données par les ID primaires, puis une boucle sur les enregistrements, l'insertion d'enregistrements fictifs pour les lacunes, puis les données réelles, permettant à la DBM d'utiliser la prochaine nombre séquentiel encore. Mais cela va vraiment à l'encontre de la façon dont nous utilisons une base de données.

+0

Assez juste - J'ai décidé de stocker l'ID existant comme «originalID», qui fonctionne. Je vous remercie! – Max

+0

Je ne recommanderais pas d'utiliser les noms camelCase pour les champs. Stick avec snake_case, qui fonctionnera bien une fois que vous utilisez les modèles de Sequel. (Vous devriez le faire car ils sont extrêmement puissants.) –