小编Sar*_*hAk的帖子

Postgres是否支持嵌套或自治事务?

我有一种情况,我必须提交一部分代码作为自己的事务.
我创建了一个表subtransaction_tbl:

CREATE TABLE subtransaction_tbl
(
  entryval integer
)
Run Code Online (Sandbox Code Playgroud)

和语言plpython3u中的函数:

CREATE FUNCTION subtransaction_nested_test_t() RETURNS void
AS $$
plpy.execute("INSERT INTO subtransaction_tbl VALUES (1)")
with plpy.subtransaction():
    plpy.execute("INSERT INTO subtransaction_tbl VALUES (2)")
$$ LANGUAGE plpython3u;
Run Code Online (Sandbox Code Playgroud)

第一种情况:

BEGIN TRANSACTION;
INSERT INTO subtransaction_tbl VALUES (4);
select  subtransaction_nested_test_t();
COMMIT TRANSACTION;
Run Code Online (Sandbox Code Playgroud)

表中的条目是正确的:1,2,4

第二种情况:

BEGIN TRANSACTION;
INSERT INTO subtransaction_tbl VALUES (4);
select  subtransaction_nested_test_t();
ROLLBACK TRANSACTION;
Run Code Online (Sandbox Code Playgroud)

表中的值未填充

我预计12应该添加到表中,subtransaction_tbl但令我惊讶的是没有插入任何值.我想象一个新的子事务由函数打开,它不应该依赖于父事务.如果我是对的,请告诉我.

Postgres有自动交易吗?或者我是否必须修改我的plpython3u函数?

sql postgresql transactions python-3.x

17
推荐指数
2
解决办法
2万
查看次数

FilenameFilter的java 8 lambda表达式

我将通过java 8中的lambda表达式

当我改变线程的代码它工作正常

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("run");
    }
}).start();
Run Code Online (Sandbox Code Playgroud)

转换为lambda表达式为

new Thread(
    () -> System.out.println("Hello from thread")
).start();
Run Code Online (Sandbox Code Playgroud)

但我无法转换FilenameFilter表达式

File file = new File("/home/text/xyz.txt");
file.list(new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
        name.endsWith(".txt");
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

并且未成功转换为此

file.list(new FilenameFilter () {
    (File a1, String a2) -> { 
        return false;
    }
});
Run Code Online (Sandbox Code Playgroud)

它像日食一样给出错误

此行有多个标记
- 语法错误,插入";" 完成Statement
- 语法错误,插入"}"完成Block
- 语法错误,插入"AssignmentOperator Expression"完成赋值

java lambda java-8

15
推荐指数
3
解决办法
3万
查看次数

在POSTGRES中可以使用Oracle Cast和MULTISET

我一直在研究从oracle数据库数据库生成xml的查询

其中"列"是一种类型

CREATE OR REPLACE TYPE "column" AS OBJECT
                  ("coulmnname" VARCHAR2 (30), "datatype" VARCHAR2 (30))
Run Code Online (Sandbox Code Playgroud)

和col_list_t是类型

CREATE OR REPLACE TYPE col_list_t AS TABLE OF "column"
Run Code Online (Sandbox Code Playgroud)

  SELECT CAST (
                      MULTISET (
                           SELECT "column" (B.COLUMN_NAME, B.DATA_TYPE)
                             FROM all_tab_columns b, all_tables c ,all_tables a
                            WHERE     b.TABLE_NAME = a.TABLE_NAME
                                  AND b.table_name = c.TABLE_NAME
                                  AND B.OWNER = C.OWNER
                                  AND c.OWNER = USER)AS col_list_t)  from dual 
Run Code Online (Sandbox Code Playgroud)

问题是这必须转换成postgres,因为CAST和MULTISET在postgres中是不可用的,所以有什么方法可以在postgres语法中做到这一点

oracle postgresql casting multiset

6
推荐指数
1
解决办法
1932
查看次数

“ DD-MON-RR”日期格式模式无法按预期工作

我插入的查询格式为

to_date('25-JUN-13','DD-MON-RR')
Run Code Online (Sandbox Code Playgroud)

oracle中工作正常,输出为25-JUN-13
postgresql中 ,与相同0001-06-25 BC

这是一个从oracle数据库到postgresql迁移项目。任何与oracle相同的解决方案。

如果我使用的是DD-MM-YY格式,则同样无法正常工作,那么结果会有很大不同。

在PostgreSQL中运行此查询->

select to_char(to_date('25-JUN-53','DD-MON-YY'),'YYYY') as YEAR 

ANSWER IS --> 2053 
Run Code Online (Sandbox Code Playgroud)

从查询中检索与oracle中相同的结果时

select to_char(to_date('25-JUN-53','DD-MON-RR'),'YYYY') as YEAR from dual

ASSWER IS --> 1953
Run Code Online (Sandbox Code Playgroud)

当我迁移项目时,Postgresql中应该具有相同的功能,以便最终结果应该相同。

oracle postgresql datetime types postgresql-9.1

2
推荐指数
1
解决办法
2万
查看次数

在java中比较if(null == object)或if(object == null)是否正确?

我正在一个项目中工作,如下所示

if(null == object)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)

是这样的

if(object == null){
// do something 
}
Run Code Online (Sandbox Code Playgroud)

举一些例子,以便两者相同或不同.

java

2
推荐指数
2
解决办法
132
查看次数

Postgres中的NOCYCLE

我有一个带有NOCYCLE子句的Oracle查询,我必须将其翻译成Postgres:

SELECT FG_ID,CONNECT_BY_ROOT FG_ID as Parent_ID  
FROM FG t
START WITH t.Parent_filter_group_id is null 
CONNECT BY NOCYCLE PRIOR t.FILTER_GROUP_ID = t.PARENT_FILTER_GROUP_ID 
Run Code Online (Sandbox Code Playgroud)

我已经在postgres中的connect_by_root等效问题和答案的帮助下转换了这个

with recursive fg_tree as (
select FG_ID,
       FG_ID as fg
from  FG
where Parent_filter_group_id is null 

union all 
select c.FG_ID,
p.fg
from FG c join fg_tree p on p.FG_ID = PARENT_FILTER_GROUP_ID
)
select * from fg_tree
order by FG_ID
Run Code Online (Sandbox Code Playgroud)

但是在这里没有子句,NOCYCLE如果父亲也是其中一个孩子,那么这个查询将返回错误.

sql oracle postgresql connect-by

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