我想知道在续集中创建基于postgres现有表转储的迁移的最佳方法.我意识到我必须自己编写down方法来删除表/函数/序列,但有没有办法告诉续集上传以加载现有的sql脚本并执行脚本中的所有内容?
编辑:以防万一不清楚,这是使用ruby Sequel SQL库/ gem
最近,我开始深入研究Ruby MVC,以便找到最好,最快,最小的框架来构建我的应用程序.由于对Rails不满意,我决定尝试Padrino.我也是第一次尝试使用Outside-in TDD获取完整的应用程序,因此能够为所有组件编写测试至关重要.不幸的是,我无法在Padrino中制作模型,所以我想知道它是否只是测试版软件的原因,或者只是我的错误.
我首先使用Cucumber和RSpec创建我的项目进行测试,然后为我的ORM创建Sequel.
$ padrino g project test -d sequel -t cucumber -c sass -b
Run Code Online (Sandbox Code Playgroud)
接下来,我创建一些模型和迁移:
$ padrino g model user
# ./db/migrate/001_create_users.rb
Sequel.migration do
change do
create_table :users do
primary_key :id
String :name
String :password
end
end
end
Run Code Online (Sandbox Code Playgroud)
接下来,当然是规范.例如,只是简单的事情:
# ./spec/models/user_spec.rb
require 'spec_helper'
describe User do
it 'can be created' do
user = User.create
end
end
Run Code Online (Sandbox Code Playgroud)
现在,迁移并运行规范:
$ padrino rake sq:migrate:up
$ rspec spec
F
Failures:
1) User can be created
Failure/Error: user = User.create
Sequel::DatabaseError: …Run Code Online (Sandbox Code Playgroud) 如何获取数据集列的数据类型.或者更一般:如何获取数据集的架构?
想象一下我有以下情况:
require 'sequel'
DB = Sequel.sqlite()
DB.create_table(:data){
nvarchar :key
timestamp :timestamp
Date :date
}
sel = DB[:data].select(:key, :timestamp)
Run Code Online (Sandbox Code Playgroud)
现在我想知道,timestamp我选择的列中的数据类型.
我想得到类似的东西Sequel::Dataset#columntype(column).
我做了这样的解决方案:
module Sequel
class Dataset
def schema()
schema = []
self.db.schema(self).each{|colid, coldef|
next unless self.columns.include?(colid)
schema << [colid, coldef]
}
schema
end
def columntype(colname)
self.schema.each{|colid, coldef|
next unless colid == colname
return coldef[:type]
}
raise ArgumentError, "#{colname} not part of #{self.inspect}"
end
end
end
p sel.schema #-> [[:key, {:allow_null=>true, :default=>nil, :primary_key=>false,....
p sel.columntype(:timestamp) #-> :datetime …Run Code Online (Sandbox Code Playgroud) 我试图使用Sequel.connect(database_name)连接到sqlite数据库它返回以下错误:
DEBUG OmlSqlSource: Connecting Sequel
/.rvm/rubies/ruby-1.9.3-p374/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': LoadError: cannot load such file -- sequel/adapters/ (Sequel::AdapterNotFound)
Run Code Online (Sandbox Code Playgroud) 我在为以下场景构建正确的模型、关联和查询时遇到问题,然后使用 Sequel 和 Ruby 将结果作为 JSON 返回。
数据库结构___
您可以创建书籍列表。每个图书馆都有书。由以下定义:
db.create_table(:books) do
primary_key :id
String :name
String :author
DateTime :created
end
db.create_table(:libraries) do
primary_key :id
String :name
String :city
String :state
DateTime :created
end
db.create_table(:libraries_books) do
Integer :library_id
Integer :book_id
primary_key [:library_id, :book_id]
end
class Library < Sequel::Model(:libraries)
many_to_many :libraries_books, :left_key=>:library_id, :right_key=>:book_id, :join_table=>:libraries_books
one_to_many :libraries_books, :key=>:library_id
end
class LibraryBook < Sequel::Model(:libraries_books)
many_to_one :libraries
many_to_one :books
end
Run Code Online (Sandbox Code Playgroud)
我正在尝试确定访问给定图书馆所有书名的正确方法。我最初尝试遵循 Sequel Associations 指南,但无法弄清楚如何使用带有关联的 LibraryBook 来获取图书馆的所有书籍并加入 Book 模型以获取正确的列。
在使用了所描述的一些方法之后,我尝试创建自己的查询:
LibraryBook.select(:books.*)
.join_table(:inner, :libraries, :id => :library_id) …Run Code Online (Sandbox Code Playgroud) 我需要从旧版 SQL Server 数据库中提取数据并将其转换为 JSON。我已经编写了 SQL 查询(对于旧版本的报告,我正在替换)可以准确地提取我需要的内容。
将 ActiveRecord 对象转换为 JSON(和 CSV)当然很容易,但我看不出有什么好方法可以做我需要做的事情,因为所有涉及原始 SQL 的 ActiveRecord 方法似乎都旨在返回 ActiveRecord 对象,并且这些数据在逻辑上不一定对应于一个类,我不需要将它保存在任何额外的地方。我只想执行 SQL 查询并返回 JSON 和 CSV 并完成它。
我意识到我无法运行教程(http://sequel.jeremyevans.net/)两次.
第一次,它按照我们的预期运行.但第二次,它引发了一个错误
SQLite3::SQLException: table `items` already exists (Sequel::DatabaseError)
Run Code Online (Sandbox Code Playgroud)
我理解错误,但我不知道如何解决它.
如何在不丢失其包含的数据的情况下打开数据库,并且仍然能够运行教程?
我如何才能避免update在进行验证时进行验证create?例如:
我希望有一个image现场有presence validation上create.但是想要避免它edit并且在没有变化的情况下假设先前的值.
注意:我正在使用Padrino.
我坚持这一点。无法在文档中的任何地方找到如何声明诸如 inet 和 jsonb 或 json 之类的空间数据类型。
红宝石 2.4.1,续集 4.47
带有require 'sequel'.
声明如
DB.create_table :requests do
primary_key :id
foreign_key :client_id, :clients
foreign_key :service_id, :services
DateTime :created_at, null: false
DateTime :answered_at, null: false
JsonBType :request, null: false
end
Run Code Online (Sandbox Code Playgroud) 使用Sequel,是否可以运行 PostgreSQL“斜线”命令,例如\d,\dn或\copy table...?
我尝试使用
DB.run(‘\dn’)
Run Code Online (Sandbox Code Playgroud)
但是我遇到了语法错误,因为,大概是 Sequel 正在尝试解析 SQL,或者 Postgres 无法理解 SQL,因为这些是由psql应用程序处理的命令。
ruby ×10
sequel ×10
postgresql ×3
activerecord ×1
associations ×1
dataset ×1
json ×1
migration ×1
padrino ×1
psql ×1
rspec ×1
sql ×1
sqlite ×1