2015-01-28 8 views
8

पर एक ही टेबल को धक्का देना मुझे heroku pg:push कमांड से अवगत है जो हरोकू तक एक संपूर्ण डेटाबेस को धक्का देता है।हरोकू

अब जब मैं अपना उत्पाद लॉन्च कर रहा हूं, तो मैं केवल एक विशिष्ट तालिका को धक्का दे पाऊंगा जिसमें मौजूदा टेबल (जैसे उपयोगकर्ता) को ओवरराइट किए बिना स्थानीय रूप से एकत्र की गई जानकारी शामिल हो।

क्या कोई ऐसा आदेश है जो मुझे केवल विशिष्ट टेबल को उसकेोकू में धक्का देने में सक्षम बनाता है?

+0

'प्रयास करें Heroku db: धक्का --tables , ' मुझे परिणाम पता ..Let। –

+0

उम्म [यह सुविधा] (https://blog.heroku.com/archives/2009/3/18/push_and_pull_databases_to_and_from_heroku) को बहिष्कृत कर दिया गया है। मुझे [यहां] (https://blog.heroku.com/archives/2010/4/21/supporting_big_data_part_1) से आदेश मिला। –

+1

हाँ, दुख की बात है कि, उल्लेख करने के बारे में था। 'Pg: push' के लिए एक समान विकल्प मौजूद नहीं है। – Aventuris

उत्तर

10

मेरा सुझाव है कि pg_dump और psql आदेशों का उपयोग करके सीधे पोस्टग्रेएसक्यूएल डंप/पुनर्स्थापना क्षमताओं का उपयोग करना है।

pg_dump आप अपने स्थानीय डेटाबेस से एक विशिष्ट तालिका डंप,

$ pg_dump --data-only --table=products sourcedb > products.sql 

तो कॉन्फ़िगरेशन

$ heroku config | grep HEROKU_POSTGRESQL 

# example 
# postgres://user3123:[email protected]:6212/db982398 

से Heroku PostgreSQL कनेक्शन स्ट्रिंग हड़पने और दूरदराज के डेटाबेस में तालिका बहाल कर सकते हैं का उपयोग कर के साथ

Heroku से प्राप्त जानकारी प्राप्त की।

$ psql -h ec2-117-21-174-214.compute-1.amazonaws.com -p 6212 -U user3123 db982398 < products.sql 

आप -p, -h और -U मानकों, साथ ही डेटाबेस नाम को अनुकूलित करने की आवश्यकता होगी। पासवर्ड psql द्वारा संकेत दिया जाएगा।

आप डंप फ़िल्टर करने और तालिका को पुनर्स्थापित करने के लिए pg_restore का भी उपयोग कर सकते हैं, लेकिन मैं व्यक्तिगत रूप से psql पसंद करता हूं।

ध्यान दें कि हेरोकू बड़े डेटा के लिए Importing and Exporting जैसे कई दस्तावेज़ों में पोस्टग्रेएसक्यूएल उपकरण के उपयोग की सिफारिश कर रहा है, या जब भी प्रदान किए गए सीएलआई कमांड इस प्रश्न में किसी जैसे विशिष्ट मामलों को कवर नहीं करते हैं।

+0

पूरी प्रतिक्रिया की सराहना करें! सक्षम होने पर बक्षीस का पुरस्कार होगा। – Aventuris

+0

क्या db982398 CHawk

-1

यदि मैं सही ढंग से समझता हूं, तो आपको अपने स्थानीय रूप से बनाए गए डेटा को अपने रेल उत्पादन एप में धक्का देने के साथ केवल एक डेटाबेस तालिका की आवश्यकता होती है। शायद यह एक सरल दृष्टिकोण है, लेकिन आप अपनी तालिका के लिए माइग्रेशन बना सकते हैं और फिर db/seeds.rb का उपयोग करके पॉप्युलेट कर सकते हैं।

आप seeds.rb फ़ाइल आबादी और Heroku करने के लिए अपने रेपो धक्का दिया करने के बाद:

heroku run rake db:migrate 
heroku run rake db:seed 

इसके अलावा, अगर अपने स्थानीय तालिका डेटा की एक टन है और आप रेल 4 का उपयोग कर रहे हैं, बाहर की जाँच बीज डंप मणि: https://github.com/rroblak/seed_dump। यह आपके मौजूदा डीबी डेटा ले जाएगा और इसे बीज प्रारूप में मैप करेगा।

+0

तैनात ऐप पर तालिका पहले से मौजूद है। मुझे लगता है कि मैं केवल एक ही टेबल बीज कर सकता हूं लेकिन अपलोड करने के लिए हर दूसरी टेबल के लिए ऐसा करना बहुत समय लेना होगा। – Aventuris

0

मैंने स्क्रिप्ट लिखी जो उसकेोकू से डीबी यूआरएल निकालती है। फिर यह उत्पादन से एकल तालिकाओं को डंप करता है और उन्हें विकास/लोकलहोस्ट पर पुनर्स्थापित करता है। इस तरह यह चलाएँ:

rake production_to_development:run\['users;news;third_table',my-sushi-app\] 

कोड:

namespace :production_to_development do 
    task :run, [:tables, :app] => [:environment] do |t, args| 
    tables = args["tables"].split(';') 
    database_url = nil 
    Bundler.with_clean_env { database_url = `heroku config:get DATABASE_URL --app=#{args["app"]}` } 

    require 'addressable/uri' 
    uri = Addressable::URI.parse(database_url) 
    remote_database = uri.path[1,uri.path.length-2] # there is \n at the end of the path! 

    tables.each do |table| 
     backup_file = "tmp/#{table}.backup" 
     #bin_dir = "/Applications/Postgres.app/Contents/Versions/latest/bin" 
     bin_dir = "" 

     dump_command = "PGPASSWORD=#{uri.password} #{bin_dir}/pg_dump --file \"#{backup_file}\" --host \"#{uri.host}\" --port \"#{uri.port}\" --username \"#{uri.user}\" --no-password --verbose --format=c --blobs --table \"public.#{table}\" \"#{remote_database}\"" 
     `#{dump_command}` 
     `psql -U 'root' -d my_table -c 'drop table if exists #{table}'` 
     `pg_restore -d my_table --no-owner #{backup_file}` 
    end 

    end 
end 
संबंधित मुद्दे