Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Datagrip中通过PostgreSQL查询导出附加CSV文件?_Postgresql_Csv_Groovy_Datagrip - Fatal编程技术网

如何在Datagrip中通过PostgreSQL查询导出附加CSV文件?

如何在Datagrip中通过PostgreSQL查询导出附加CSV文件?,postgresql,csv,groovy,datagrip,Postgresql,Csv,Groovy,Datagrip,我想使用Datagrip将PostgreSQL的查询结果附加到现有的CSV文件()中。 “执行到文件”可以很好地将查询结果导出为CSV文件。但很明显,这只会创建一个新文件,其中只包含查询结果。 我曾考虑将现有模板加载到datagrip中的groovy脚本中,然后将其内容添加到创建的文件的顶部,但在如何实现这一点上我没有取得任何进展 我找到了(也许?)如何加载文件,但我不知道如何实际使用它,并将其放在文件的顶部,以便将查询结果添加到文件的下方 fh = new File("C:/1.cs

我想使用Datagrip将PostgreSQL的查询结果附加到现有的CSV文件()中。 “执行到文件”可以很好地将查询结果导出为CSV文件。但很明显,这只会创建一个新文件,其中只包含查询结果。 我曾考虑将现有模板加载到datagrip中的groovy脚本中,然后将其内容添加到创建的文件的顶部,但在如何实现这一点上我没有取得任何进展

我找到了(也许?)如何加载文件,但我不知道如何实际使用它,并将其放在文件的顶部,以便将查询结果添加到文件的下方

fh = new File("C:/1.csv")
def csv_content = fh.getText('utf-8')
这就是我在加载文件时所得到的一切,我不知道如何继续使用它

或者,我考虑手动将模板的信息添加到脚本中,这样它就不必加载另一个文件,只需获取该信息,然后添加查询结果。如果你能告诉我如何直接添加这样的行,我也会很有帮助

Datagrip中包含的groovy脚本文件如下所示:

/*
 * Available context bindings:
 *   COLUMNS     List<DataColumn>
 *   ROWS        Iterable<DataRow>
 *   OUT         { append() }
 *   FORMATTER   { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
 *   TRANSPOSED  Boolean
 * plus ALL_COLUMNS, TABLE, DIALECT
 *
 * where:
 *   DataRow     { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
 *   DataColumn  { columnNumber(), name() }
 */

SEPARATOR = ","
QUOTE     = "\""
NEWLINE   = System.getProperty("line.separator")

def printRow = { values, valueToString ->
  values.eachWithIndex { value, idx ->
    def str = valueToString(value)
    def q = str.contains(SEPARATOR) || str.contains(QUOTE) || str.contains(NEWLINE)
    OUT.append(q ? QUOTE : "")
      .append(str.replace(QUOTE, QUOTE + QUOTE))
      .append(q ? QUOTE : "")
      .append(idx != values.size() - 1 ? SEPARATOR : NEWLINE)
  }
}

if (!TRANSPOSED) {
  ROWS.each { row -> printRow(COLUMNS, { FORMATTER.format(row, it) }) }
}
else {
  def values = COLUMNS.collect { new ArrayList<String>() }
  ROWS.each { row -> COLUMNS.eachWithIndex { col, i -> values[i].add(FORMATTER.format(row, col)) } }
  values.each { printRow(it, { it }) }
}
/*
*可用的上下文绑定:
*列列表
*不可分割的行
*OUT{append()}
*格式化程序{format(row,col);formatValue(Object,col);getTypeName(Object,col);isString(Object,col);}
*转置布尔
*加上所有_列、表格、方言
*
*其中:
*DataRow{rowNumber();first();last();data():列表;值(列):对象}
*DataColumn{columnNumber(),name()}
*/
分隔符=“,”
QUOTE=“\”“
NEWLINE=System.getProperty(“line.separator”)
def printRow={值,值字符串->
values.eachWithIndex{value,idx->
def str=valueToString(值)
def q=str.contains(分隔符)| | str.contains(引号)| | str.contains(换行符)
OUT.append(q?引号:“”)
.append(str.replace(引号,引号+引号))
.append(q?引号:“”)
.append(idx!=values.size()-1?分隔符:换行符)
}
}
如果(!转置){
ROWS.each{row->printRow(列,{FORMATTER.format(row,it)})}
}
否则{
def values=COLUMNS.collect{new ArrayList()}
ROWS.each{row->COLUMNS.eachWithIndex{col,i->values[i].add(FORMATTER.format(row,col))}
values.each{printRow(it,{it}}
}

您需要将文件内容传递给
输出
变量,如下所示:

fh = new File("C:/1.csv")
def csv_content = fh.getText('utf-8')
OUT.append(csv_content).append("\n")
传递到
OUT.append
的所有内容都将写入新文件

只需将其添加到脚本的开头:

/*
 * Available context bindings:
 *   COLUMNS     List<DataColumn>
 *   ROWS        Iterable<DataRow>
 *   OUT         { append() }
 *   FORMATTER   { format(row, col); formatValue(Object, col); getTypeName(Object, col); isStringLiteral(Object, col); }
 *   TRANSPOSED  Boolean
 * plus ALL_COLUMNS, TABLE, DIALECT
 *
 * where:
 *   DataRow     { rowNumber(); first(); last(); data(): List<Object>; value(column): Object }
 *   DataColumn  { columnNumber(), name() }
 */

SEPARATOR = ","
QUOTE     = "\""
NEWLINE   = System.getProperty("line.separator")

fh = new File("C:/1.csv")
def csv_content = fh.getText('utf-8')
OUT.append(csv_content).append("\n")

def printRow = { values, valueToString ->
  values.eachWithIndex { value, idx ->
    def str = valueToString(value)
    def q = str.contains(SEPARATOR) || str.contains(QUOTE) || str.contains(NEWLINE)
    OUT.append(q ? QUOTE : "")
      .append(str.replace(QUOTE, QUOTE + QUOTE))
      .append(q ? QUOTE : "")
      .append(idx != values.size() - 1 ? SEPARATOR : NEWLINE)
  }
}

if (!TRANSPOSED) {
  ROWS.each { row -> printRow(COLUMNS, { FORMATTER.format(row, it) }) }
}
else {
  def values = COLUMNS.collect { new ArrayList<String>() }
  ROWS.each { row -> COLUMNS.eachWithIndex { col, i -> values[i].add(FORMATTER.format(row, col)) } }
  values.each { printRow(it, { it }) }
}
/*
*可用的上下文绑定:
*列列表
*不可分割的行
*OUT{append()}
*格式化程序{format(row,col);formatValue(Object,col);getTypeName(Object,col);isString(Object,col);}
*转置布尔
*加上所有_列、表格、方言
*
*其中:
*DataRow{rowNumber();first();last();data():列表;值(列):对象}
*DataColumn{columnNumber(),name()}
*/
分隔符=“,”
QUOTE=“\”“
NEWLINE=System.getProperty(“line.separator”)
fh=新文件(“C:/1.csv”)
def csv_content=fh.getText('utf-8')
OUT.append(csv\u内容)。append(“\n”)
def printRow={值,值字符串->
values.eachWithIndex{value,idx->
def str=valueToString(值)
def q=str.contains(分隔符)| | str.contains(引号)| | str.contains(换行符)
OUT.append(q?引号:“”)
.append(str.replace(引号,引号+引号))
.append(q?引号:“”)
.append(idx!=values.size()-1?分隔符:换行符)
}
}
如果(!转置){
ROWS.each{row->printRow(列,{FORMATTER.format(row,it)})}
}
否则{
def values=COLUMNS.collect{new ArrayList()}
ROWS.each{row->COLUMNS.eachWithIndex{col,i->values[i].add(FORMATTER.format(row,col))}
values.each{printRow(it,{it}}
}

请注意,您可以将粘贴
CSV Groovy.CSV.Groovy
复制到同一目录(例如
MY-CSV.CSV.Groovy
)并修改新文件。这个新的提取器将与所有提取器一起添加到combobox中

非常感谢Liudmila,这对我帮助很大。我非常感激!