我在PostgreSQL 8.4中有一个存储过程,它根据作为参数传入的整数值调用另一个存储过程.调用那些存储过程,使它们返回一个整数列的关系.我遇到的问题是外部存储过程总是返回具有正确行数但具有所有id的NULL的关系.
这是存储过程简化为最简单的形式:
CREATE OR REPLACE FUNCTION spa(count integer)
RETURNS TABLE (id integer) AS $$
BEGIN
RETURN QUERY SELECT generate_series(1, count);
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION spb(count integer)
RETURNS TABLE (id integer) AS $$
BEGIN
RETURN QUERY SELECT generate_series(1, count);
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION conditional_relation_return(objectType integer, count integer)
RETURNS TABLE (id integer) AS $$
BEGIN
IF objectType = 1 THEN
RETURN QUERY SELECT id FROM spa(count);
ELSIF objectType = 2 OR objectType = …Run Code Online (Sandbox Code Playgroud) 我对postgresql 9.2系统有一个查询,它的正常形式大约需要20秒,但在使用CTE时只需要大约120ms.
为简洁起见,我简化了两个查询.
这是正常形式(大约需要20秒):
SELECT *
FROM tableA
WHERE (columna = 1 OR columnb = 2) AND
atype = 35 AND
aid IN (1, 2, 3)
ORDER BY modified_at DESC
LIMIT 25;
Run Code Online (Sandbox Code Playgroud)
以下是此查询的说明:http://explain.depesz.com/s/2v8
CTE表格(约120ms):
WITH raw AS (
SELECT *
FROM tableA
WHERE (columna = 1 OR columnb = 2) AND
atype = 35 AND
aid IN (1, 2, 3)
)
SELECT *
FROM raw
ORDER BY modified_at DESC
LIMIT 25;
Run Code Online (Sandbox Code Playgroud)
以下是CTE的解释:http://explain.depesz.com/s/uxy
只需ORDER …
使用Vim,我正在尝试将在可视模式下选择的文本管道传输到UNIX命令,并将输出附加到当前文件的末尾.例如,假设我们有一个SQL命令,例如:
SELECT * FROM mytable;
Run Code Online (Sandbox Code Playgroud)
我想做类似以下的事情:
<ESC>
V " select text
:'<,'>!mysql -uuser -ppass mydb
Run Code Online (Sandbox Code Playgroud)
但是,我希望将输出附加到文件的末尾,而不是让输出覆盖当前选定的文本.你可能会看到它的发展方向.我正在使用Vim作为一个简单的SQL编辑器.这样,我不必让Vim进行编辑,调整,测试SQL代码.
我遇到了一个模式和一个导致死锁问题的upsert存储过程.我有一个大概的想法,为什么这会导致死锁以及如何解决它.我可以重现它,但我没有清楚地了解导致它的步骤顺序.如果有人能够清楚地解释为什么会造成僵局,那将会很棒.
这是架构和存储过程.此代码正在PostgreSQL 9.2.2上执行.
CREATE TABLE counters (
count_type INTEGER NOT NULL,
count_id INTEGER NOT NULL,
count INTEGER NOT NULL
);
CREATE TABLE primary_relation (
id INTEGER PRIMARY KEY,
a_counter INTEGER NOT NULL DEFAULT 0
);
INSERT INTO primary_relation
SELECT i FROM generate_series(1,5) AS i;
CREATE OR REPLACE FUNCTION increment_count(ctype integer, cid integer, i integer) RETURNS VOID
AS $$
BEGIN
LOOP
UPDATE counters
SET count = count + i
WHERE count_type = ctype AND count_id = cid;
IF FOUND THEN
RETURN; …Run Code Online (Sandbox Code Playgroud) 我有一个简单的awk one衬里,当给定的模式匹配时,将下一行折叠到当前行上.这里是:
awk '/two/ { printf $1; next; } 1' test.txt
Run Code Online (Sandbox Code Playgroud)
通过以下输入:
one
two
three
four
five
six
one
two
three
four
Run Code Online (Sandbox Code Playgroud)
你得到:
one
twothree
four
five
six
one
twothree
four
Run Code Online (Sandbox Code Playgroud)
请注意,"三"是折叠的"两个",这是我想要发生的.我找到了这个解决方案(不记得在哪里),并且认为尾随的"1"似乎是导致所需效果的缺失部分.如果你拿出来,你得到:
awk '/two/ { printf $1; next; }' test.txt
twotwo
Run Code Online (Sandbox Code Playgroud)
作为结果.所以我的问题是,尾随的'1'做了什么,它在哪里记录?
谢谢!
我很好奇为什么当主键不存在时,两个使用主键的并发语句会导致 MySQL 死锁DELETE。INSERT该示例旨在以最简单的形式说明该问题。
这是设置。
> SELECT @@GLOBAL.tx_isolation, @@tx_isolation;
+-------------------------+------------------+
| @@GLOBAL.tx_isolation | @@tx_isolation |
|-------------------------+------------------|
| REPEATABLE-READ | REPEATABLE-READ |
+-------------------------+------------------+
1 row in set
Time: 0.002s
> select version();
+-------------+
| version() |
|-------------|
| 5.7.12 |
+-------------+
1 row in set
Time: 0.002s
create table lock_test ( id int(11) not null, primary key (`id`) );
Run Code Online (Sandbox Code Playgroud)
下面,1>代表一个mysql终端,2>代表另一个终端。
1> begin;
1> delete from lock_test where id = 1;
2> begin; …Run Code Online (Sandbox Code Playgroud) 这可能是一个新手红宝石问题.我有几个库和应用程序需要部署到几个不同的主机.所有应用程序和库将共享这些主机的一些常用设置 - 例如主机名,数据库服务器/用户/通道等.
我的目标是做一些事情:
cap host1 stage deploy
cap host2 stage deploy
cap host1 prod deploy
# ...
Run Code Online (Sandbox Code Playgroud)
我的问题是如何在所有deploy.rb文件中包含这些常用设置?更具体地说,我想创建一个我可以包含的rb文件,它包含一些常用设置和几个主机特定的任务定义:
set :use_sudo, false
# set some other options
task :host1 do
role :app, "host1.example.com"
role :web, "host1.example.com"
role :db, "host1.example.com", :primary => true
set :rodb_host, "dbhost"
set :rodb_user, "user"
set :rodb_pass, "pass"
set :rodb_name, "db"
end
task :host2 do
#...
end
deploy.task :carsala do
transaction do
setup
update_code
symlink
end
end
Run Code Online (Sandbox Code Playgroud)
然后在我的所有deploy.rb文件中"包含"此文件,我在其中定义stage,prod等,并根据需要覆盖任何"常见"配置参数.任何建议,将不胜感激.我尝试了一些不同的东西,但是我从所有这些中获得了错误.
编辑:我试过了
require 'my_module'
Run Code Online (Sandbox Code Playgroud)
但我得到错误抱怨未定义的任务对象.
我需要能够在clojure中使用多个SQL语句加载和执行文件。例如,假设我有一个包含以下语句的文件:
ALTER TABLE bla...;
ALTER TABLE foo...;
UPDATE bla SET ...;
UPDATE foo SET ...;
ALTER TABLE bla DROP...;
ALTER TABLE foo DROP...;
Run Code Online (Sandbox Code Playgroud)
您就知道了-一个包含许多以分号终止的语句的文件。
我目前在尝试使用时遇到以下错误do-commands:
PSQLException org.postgresql.util.PSQLException: Too many update results were returned.
Run Code Online (Sandbox Code Playgroud) 我正在尝试了解如何在scala中利用monad来解决简单的问题,以增强我的熟悉度。一个简单的问题是使用函数随机数生成器估算PI。我将在下面的代码中包含一个基于流的简单方法。
我正在寻求帮助,以将其转换为单子方法。例如,是否有惯用的方法以安全的方式将此代码转换为使用状态(和其他monad)?
trait RNG {
def nextInt: (Int, RNG)
def nextDouble: (Double, RNG)
}
case class Point(x: Double, y: Double) {
val isInCircle = (x * x + y * y) < 1.0
}
object RNG {
def nonNegativeInt(rng: RNG): (Int, RNG) = {
val (ni, rng2) = rng.nextInt
if (ni > 0) (ni, rng2)
else if (ni == Int.MinValue) (0, rng2)
else (ni + Int.MaxValue, rng2)
}
def double(rng: RNG): (Double, RNG) = {
val (ni, rng2) = nonNegativeInt(rng) …Run Code Online (Sandbox Code Playgroud) postgresql ×4
sql ×3
awk ×1
capistrano ×1
clojure ×1
concurrency ×1
database ×1
deployment ×1
editor ×1
innodb ×1
jdbc ×1
monads ×1
mysql ×1
plpgsql ×1
ruby ×1
scala ×1
scala-cats ×1
text ×1
unix ×1
vi ×1
vim ×1