小编Gre*_*reg的帖子

Postgres:是set_config().current_setting()应用程序变量的私有/健壮堆栈?

在我的应用程序中,我有触发器需要访问用户ID等内容.我正在存储这些信息

set_config('PRIVATE.'|'user_id', '221', false)
Run Code Online (Sandbox Code Playgroud)

然后,当我正在进行修改数据库的操作时,触发器可能会:

user_id = current_setting('PRIVATE.user_id');
Run Code Online (Sandbox Code Playgroud)

它看起来很棒.我的数据库操作主要来自python,psycopg2,一旦我得到连接,我将把set_config()作为我的第一个操作,然后继续我的数据库业务.这种做法是好的还是数据从一个会话泄漏到另一个会话?我在plpython中使用SD和GD变量做了这种事情,但是这种语言对于我试图做的事情来说太沉重了所以我不得不转向plpgsql.

python postgresql psycopg2 postgresql-9.3

5
推荐指数
1
解决办法
1910
查看次数

plv8存储过程与jsonb类型

这可能为时过早,postgres 9.4仍处于测试阶段.我一直在试验jsonb类型.我没有运气将jsonb类型传递给plv8函数,它以类型字符串形式出现.我想知道我做错了吗?

create or replace function jt ( o json ) returns integer language plv8 immutable
AS $function$
        plv8.elog(INFO, 'type is ', typeof o);
        plv8.elog(INFO, 'argument is ', o);
        plv8.elog(INFO, 'member is ', o['member']);
$function$;

create or replace function jt ( o jsonb ) returns integer language plv8 immutable
AS $function$
        plv8.elog(INFO, 'type is ', typeof o);
        plv8.elog(INFO, 'argument is ', o);
        plv8.elog(INFO, 'member is ', o['member']);
$function$;
Run Code Online (Sandbox Code Playgroud)

然后,当我使用json运行时:

psql=# select jt('{"member":"test"}'::json);
INFO:  type is  object
INFO:  argument is  [object …
Run Code Online (Sandbox Code Playgroud)

postgresql plv8 postgresql-9.4

4
推荐指数
1
解决办法
956
查看次数

bash heredoc 可以将其结果直接放入变量中吗?

我有一些这样的代码:

CMD=$(cat <<EOC
docker run 
   -p $MY_IP:$LOCAL_PORT:$LOCAL_PORT -p $MY_IP:$PEER_PORT:$PEER_PORT 
   -v $CERT_DIR:/cert 
   $ETCD_IMAGE 
   --name $MACHINE.$DOMAIN 
   --peer-cert-file=/cert/server-cert.pem
   --peer-key-file=/cert/server-key.pem --peer-ca-file=/cert/ca.pem 
   --peer-addr=$MY_IP:$PEER_PORT 
   --peers=$OIPPC
EOC
)
Run Code Online (Sandbox Code Playgroud)

有没有办法让here doc在不干预进程(cat)的情况下直接将结果分配给bash中的变量?这段代码有效,只是感觉工作量太大了。

bash

4
推荐指数
1
解决办法
2506
查看次数

我如何用etcd进行原子更新

我试图了解在etcd上的“原子”更新是什么。

当我认为“原子”时,我认为有一个“之前”和“之后”(没有“期间”,并且如果更新失败,则仍然是“之前”)。

这是一个例子:

curl -s -XPUT http://localhost:2379/v2/keys/message -d value='Hidee Ho'
Run Code Online (Sandbox Code Playgroud)

因此,在这一点上,任何人都可以访问该消息并获取当前值:

curl -s http://localhost:2379/v2/keys/message
{"action":"get","node":{"key":"/message","value":"Hidee Ho","modifiedIndex":4748,"createdIndex":4748}}
Run Code Online (Sandbox Code Playgroud)

稍后,我可以修改该值,如下所示:

curl -s -XPUT http://localhost:2379/v2/keys/message -d value='Mr Hanky'
Run Code Online (Sandbox Code Playgroud)

结果可以像以前一样获取。更改之前,值“ Hidee Ho”回来,更改之后,值“ Mr Hanky”回来。所以,我的问题是我可以保证其中一个或另一个结果吗?也就是说,我想确认一个或另一个将被返回(而不是结果之间nil值)。

我并不特别在意时间。如果我进行Hanky先生更新,并且随后的值获取程序继续在短时间内获得Hidee Ho,那就可以了。

我很困惑,因为协议中有一个Atomic CompareAndSwap函数。据我所知,它不是原子的,而是“仅当值是我所说的时才进行更新”。就我而言,我并不在乎过去的价值。我只想知道它已更改,除了“ before”或“ after”值之外,没有其他读者会看到。

coreos raft etcd

3
推荐指数
1
解决办法
1992
查看次数