我开始构建应用程序的用户身份验证部分,并使用 PostgreSQL 作为数据库。我在 PG 中设置了一个表,代码如下。这是我用来设置USERS表的代码。当我INSERTS在psql控制台中执行此操作时,一切正常。但是,当我在使用pgnpm 包并通过客户端实例查询数据库的 NodeJS 应用程序中执行此操作时,无法正常工作。
DROP EXTENSION IF EXISTS pgcrypto;
DROP TYPE IF EXISTS genderEnum;
DROP TYPE IF EXISTS roleEnum;
-----------------------------------------------
CREATE OR REPLACE FUNCTION trigger_set_timestamp()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-----------------------------------------------
DROP EXTENSION IF EXISTS pgcrypto;
CREATE EXTENSION pgcrypto;
-----------------------------------------------
CREATE TYPE genderEnum AS ENUM ('male', 'female', 'other');
CREATE TYPE roleEnum AS ENUM ('banned', 'suspended', 'member', 'admin', 'developer');
----------------------------------------------- …Run Code Online (Sandbox Code Playgroud) 我试图在rails中运行以下原始查询,只是为了看到它失败:
query = 'SELECT * FROM users WHERE id IN ($1);'
results = ActiveRecord::Base.connection.exec_query(query, "My query", [ [1,2] ]);
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我得到的错误从这开始:
Could not log "sql.active_record" event. NoMethodError: undefined method `binary?' for 1:Fixnum
Run Code Online (Sandbox Code Playgroud)
显然,我在[1, 2]某种程度上滥用了绑定参数,但我自己找不到合适的例子.
PS这是最小的失败示例,派生自更高级的查询,无法转换为ActiveRecord调用链.换句话说 - 在构建查询时我不能依赖Arel.
PPS我正在使用rails 4.0.1和postgresql 9.3
所以我开始使用Postgres JSON数据类型,现在你可以用它做很多有趣的事情.在我的一个Rails应用程序中,它还没有Rails 4(已经添加了对Postgres JSON的支持),我添加了一个这样的JSON列:
create_table :foo do |t|
t.column :bar, :json
end
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何为列设置默认值.我试着像所有的变化{},'{}','{}'::json,'[]'::json等,但我要么得到一个错误的迁移运行,或者它根本不起作用,这意味着迁移运行时,但是,当我创建一个新的Foo,bar是nil.
我正在使用活动记录来获取我的故事,然后生成CSV,这是在rails cast中完成的标准方式.但我有很多行,需要几分钟.我想如果我能让posgresql做csv渲染,那么我可以节省一些时间.
这是我现在所拥有的:
query = "COPY stories TO STDOUT WITH CSV HEADER;"
results = ActiveRecord::Base.connection.execute(query);
Run Code Online (Sandbox Code Playgroud)
但是此查询的结果为空:
=> #<PG::Result:0x00000006ea0488 @connection=#<PG::Connection:0x00000006c62fb8 @socket_io=nil, @notice_receiver=nil, @notice_processor=nil>>
2.0.0-p247 :053 > result.count
=> 0
Run Code Online (Sandbox Code Playgroud)
更好的了解方式:
2.0.0-p247 :059 > result.to_json
=> "[]"
Run Code Online (Sandbox Code Playgroud)
我怀疑我的控制器看起来像这样:
format.csv { send_data raw_results }
Run Code Online (Sandbox Code Playgroud)
这适用于普通查询,我只是无法弄清楚将CSV结果返回到rails的SQL语法.
UPDATE
CSV输出从120000毫秒下降到290毫秒
我的模特:
def self.to_csv(story_ids)
csv = []
conn = ActiveRecord::Base.connection.raw_connection
conn.copy_data("COPY (SELECT * FROM stories WHERE stories.id IN (#{story_ids.join(',')})) TO STDOUT WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *, ESCAPE E'\\\\');") do
while row = conn.get_copy_data
csv.push(row)
end …Run Code Online (Sandbox Code Playgroud) 我最近尝试将我的轨道3.2*应用程序升级到rails 4.2.*.但是,我在安装'pg'宝石时被拦住了.当我用Google搜索时,解决方案主要与OSX相关.但我正在使用ubuntu 14.04.需要针对以下问题提出任何建议.
我postgresql 9.3.5在我的机器上安装了版本.
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
/usr/local/rvm/rubies/ruby-2.1.2/bin/ruby extconf.rb
checking for pg_config... yes
Using config values from /usr/bin/pg_config
checking for libpq-fe.h... no
Can't find the 'libpq-fe.h header
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=. …Run Code Online (Sandbox Code Playgroud) 我在osx 10.6.7尝试在新的rails 3.0.7应用程序上运行bundle install,并且在尝试构建pg gem时它仍然失败.它一直告诉我,我需要开发人员工具.但据我所知,我已经安装了开发人员工具.
这是xcodebuild -version的输出
Xcode 3.2.6
Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0
BuildVersion: 10M2518
Run Code Online (Sandbox Code Playgroud)
这是失败的pg gem构建的输出
/Users/bm/.rvm/rubies/ruby-1.9.2-head/bin/ruby extconf.rb --with-pg-config=/Library/PostgreSQL/8.4/bin/pg_config
Using config values from /Library/PostgreSQL/8.4/bin/pg_config
checking for libpq-fe.h... *** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers. Check the mkmf.log file for more
details. You may need configuration options.
Provided configuration options:
--with-opt-dir
--without-opt-dir
--with-opt-include
--without-opt-include=${opt-dir}/include
--with-opt-lib
--without-opt-lib=${opt-dir}/lib
--with-make-prog
--without-make-prog
--srcdir=.
--curdir
--ruby=/Users/bm/.rvm/rubies/ruby-1.9.2-head/bin/ruby
--with-pg
--without-pg
--with-pg-dir
--without-pg-dir
--with-pg-include
--without-pg-include=${pg-dir}/include
--with-pg-lib …Run Code Online (Sandbox Code Playgroud) 我的rails迁移使用空格和表列的位置更新架构,这是一个令人沮丧的问题.
因此,大多数情况下,当我运行bundle exec rake db:migrate它时,将执行以下方案之一.当我将它合并到我们的主分支中并且其他开发人员解决这个问题时,他们的rails迁移会恢复标签和位置排序.
我们注意到,如果我是模式的最后一个提交者,那么团队中的所有三个开发人员在运行迁移时都会遇到相同的问题.
我刚刚更新postgres to v9.2.4了与其他开发者相同的内容.还有什么我可以尝试的想法?
下面是git diffs来演示正在发生的事情.
重新排序模式的示例:
create_table "accounts", :force => true do |t|
t.integer "organisation_id"
- t.boolean "active", :default => false
t.text "notes"
+ t.boolean "active", :default => false
end
Run Code Online (Sandbox Code Playgroud)
向标志添加标签的示例:
create_table "comments", :force => true do |t|
- t.integer "commentable_id", :default => 0
- t.string "commentable_type", :default => ""
+ t.integer "commentable_id", :default => 0
+ t.string "commentable_type", :default => ""
- t.datetime "created_at", :null => false
- …Run Code Online (Sandbox Code Playgroud) ruby-on-rails pg rails-postgresql ruby-on-rails-3.2 postgresql-9.2
当我运行:rake db:setup
我得到:
fe_sendauth: no password supplied
Couldn't create database for {"adapter"=>"postfresql", "encoding"=>"unicode",
"host"=>"localhost", "pool"=>5, "username"=>"my_user", "password"=>nil,
"database"=>"my_db_test"}
-- enable_extension("plpgqsl")
rake aborted
Tasks: TOP => db:schema:load
Run Code Online (Sandbox Code Playgroud)
我的database.yml:
connection: &connection
adapter: postgresql
encoding: unicode
host: localhost
pool: 5
username: my_user
password:
development:
<<: *connection
database: my_db_development
test: &test
<<: *connection
database: my_db_test
Run Code Online (Sandbox Code Playgroud)
已经在这个问题中更改了我的pg_hba.conf:尝试为ror应用程序设置postgres,收到错误 - fe_sendauth:没有提供密码 但它根本没有帮助.
我正在尝试使用脚本运行应用程序,npm run serve:dev
但Error: Please install pg package manually在尝试运行时出现错误npm run serve:dev
我已经试过了 npm install -g pg','npm install -g pg-hstore
错误:
kshitij-mag@0.1.0 serve:dev /home/qroach/kshitij-mag nodemon --ignore './src/' --exec babel-node --presets babel-preset-env ./server/bin/www
[nodemon] 1.18.10 [nodemon] 随时重启,输入rs [nodemon] watch: 。[nodemon] 启动 babel-node --presets babel-preset-env ./server/bin/www /home/qroach/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:81 throw new Error(请安装${moduleName} 包手动);^
错误:请在 ConnectionManager._loadDialectModule (/home/qroach/node_modules/sequelize/lib/dialects/abstract/connection-manager.js:81:15) 在新的 ConnectionManager (/home/qroach/node_modules/sequelize/ lib/dialects/postgres/connection-manager.js:18:24) 在新的 PostgresDialect (/home/qroach/node_modules/sequelize/lib/dialects/postgres/index.js:14:30) 在新的 Sequelize (/home/ qroach/node_modules/sequelize/lib/sequelize.js:241:20)在对象。(/home/qroach/kshitij-mag/server/db/models/index.js:16:15) at Module._compile (internal/modules/cjs/loader.js:799:30) at loader (/usr/lib) /node_modules/babel-cli/node_modules/babel-register/lib/node.js:144:5) at Object.require.extensions.(anonymous function) [as .js] (/usr/lib/node_modules/babel-cli /node_modules/babel-register/lib/node.js:154:7) …
使用 rvm 在 ubuntu 22.04 上安装 ruby 时出现问题,因为它会给出以下错误

Error running '__rvm_make -j8',
please read /usr/share/rvm/log/1655413907_ruby-2.5.0/make.log
There has been an error while running make. Halting the installation.
Run Code Online (Sandbox Code Playgroud)
如果我尝试安装 ruby 2.7.0、2.7.1,也会出现同样的错误。2.7.2 及更高版本。
我在这里找到了使用以下步骤的建议
rvm pkg 安装 openssl
rvm 删除 xxx
rvm install xxx -C --with-openssl-dir=$HOME/.rvm/usr
这使得安装成功,但一些库(如 pg、rails 或 puma)无法与以这种方式安装的 ruby 版本一起使用。例如,在捆绑安装后,如果运行命令“rails db:migrate”,它将给您带来来自 pg gem 的另一个错误 - Segmentation failure
/usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record.rb:113: [BUG] Segmentation fault at 0x00007f03df83e140
ruby 2.5.0p0 (2017-12-25 revision 61468) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0011 p:0009 s:0055 e:000053 METHOD /usr/share/rvm/gems/ruby-2.5.0/gems/listen-3.1.5/lib/listen/record/entry.rb:53 …Run Code Online (Sandbox Code Playgroud)