小编dfo*_*rce的帖子

从PostgreSQL中的子查询更新或插入(多行和多列)

我想在postgres做这样的事情:

  • UPDATE table1 SET (col1, col2) = (SELECT col2, col3 FROM othertable WHERE othertable.col1 = 123);

  • INSERT INTO table1 (col1, col2) VALUES (SELECT col1, col2 FROM othertable)

但是,即使使用文档中提到的postgres 9.0,也不可能获得第1点(http://www.postgresql.org/docs/9.0/static/sql-update.html)

点2似乎也不起作用.我收到以下错误:子查询必须只返回一列.

希望有人为我找到解决方法.否则查询将花费时间:(.

仅供参考:我正在尝试从多个表中选择不同的列并将它们存储到临时表中,以便其他应用程序可以轻松获取准备好的数据.

sql postgresql sql-update

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

为什么 Log4j2 JsonLayout + KeyValuePair 打印空的 logEvent 消息

TL;DR 如果我在 log4j2.xml 配置中使用带有嵌套 KeyValuePair 的 JsonLayout,则生成的日志消息为空。任何想法为什么?

很长的故事

我将 Tomcat 8.5.43 与以下与日志相关的 JAR 一起使用:

  • jackson-annotations-2.9.7.jar
  • 杰克逊核心2.9.7.jar
  • 杰克逊-数据绑定-2.9.7.jar
  • slf4j-api-1.7.25.jar
  • jcl-over-slf4j-1.7.25.jar
  • log4j-api-2.12.0.jar
  • log4j-core-2.12.0.jar
  • log4j-jul-2.12.0.jar
  • log4j-slf4j-impl-2.12.0.jar
  • tomcat-extras-juli-8.5.2.jar(作为 /bin 中的 tomcat-juli.jar)
  • tomcat-extras-juli-adapters-8.5.2.jar
  • log4j-web-2.12.0.jar(在 webapp 中)

和 log4j2.xml 配置:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
  <Appenders>
  <Console name="consoleappender" target="SYSTEM_OUT">
    <JsonLayout compact="true" eventEol="true" stacktraceAsString="true" locationInfo="true">
      <KeyValuePair key="foo" value="bar"/>
    </JsonLayout>
  </Console>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="consoleappender" />
    </Root>
  </Loggers>
</Configuration>
Run Code Online (Sandbox Code Playgroud)

在 setenv.sh 中,我将类路径设置为:

CLASSPATH="$JAVA_HOME/lib/tools.jar\
:$CATALINA_HOME/lib/log4j-api.jar\
:$CATALINA_HOME/lib/log4j-core.jar\
:$CATALINA_HOME/lib/log4j-jul.jar\
:$CATALINA_HOME/lib/jackson-annotations.jar\
:$CATALINA_HOME/lib/jackson-core.jar\
:$CATALINA_HOME/lib/jackson-databind.jar"
Run Code Online (Sandbox Code Playgroud)

并使用额外的 JVM 参数运行 Tomcat:

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager
-Dlog4j.configurationFile=file:log4j2.xml"
Run Code Online (Sandbox Code Playgroud)

所以每个 Tomcat、JULI、Apache …

logging tomcat slf4j log4j2 tomcat-juli

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

仅来自Zend_DB Select语句(子查询)的COUNT(*)

我试图围绕现有的Zend_Db select语句包装count(*)查询,但我能得到的是:

SELECT `t`.*, COUNT(*) AS `TotalRecords` FROM (SELECT ....) AS `t`
Run Code Online (Sandbox Code Playgroud)

但是我喜欢摆脱t.*因为我只需要计数(*).

到目前为止这是我的代码:

$db = Zend_Registry::get('db');
$select = $dbmodel->getSomething(); //zend select object
$outterSelect = new Zend_Db_Select($db);
$outterSelect->from($select)->columns(array('TotalRecords' => new Zend_Db_Expr('COUNT(*)')));
echo $outterSelect->__toString();
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

php mysql sql zend-framework zend-db

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