小编Pet*_*uss的帖子

使用 PostgreSQL 的占位符模板

我需要一个像这样的函数

SELECT vformat('Hello %%! Bye %%...', array['John','Maria'], '%%');
-- 'Hello John! Bye Maria...'
Run Code Online (Sandbox Code Playgroud)

提供带有占位符的字符串(模板)以及向量中的相应输入,它会返回文本。“占位符标记”是一个自由字符串。

我无法使用 pg9.1 格式(如 sprintf)函数,因为它不允许除 '%' 之外的其他标记(请参阅 ex. Python formatter)并且不允许数组参数(请参阅 ex. vsprintf)。PostgreSQL 9.0(我认为 8.4+)最简单的解决方案是

CREATE FUNCTION array_zipper_string(anyarray,anyarray) RETURNS text AS $$ 
  -- use with bigger array at left
  SELECT string_agg(t.val||coalesce($2[t.idx],''),'')  
  FROM  (SELECT generate_subscripts($1, 1) AS idx, unnest($1) AS val) AS t;
$$ LANGUAGE SQL IMMUTABLE;

CREATE FUNCTION tpl_positional(text,anyarray,varchar DEFAULT '%%') 
RETURNS text AS $$ 
  SELECT array_zipper_string(string_to_array($1,$3),$2);
$$ LANGUAGE SQL IMMUTABLE;
CREATE FUNCTION tpl_positional(
   text, text, …
Run Code Online (Sandbox Code Playgroud)

postgresql formatting

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

如何用SQL标记"传递组"?

我有一个ID对的表,它具有传递关系 t,即,如果"A t B"和"B t C"则是"A t C".样品:

  table T1
  ID1 | ID2 
  1   | 2
  1   | 5
  4   | 7
  7   | 8
  9   | 1
Run Code Online (Sandbox Code Playgroud)

所以有两组,

  • g1:{1,2,5,9}因为"1 t 2","1 t 5"和"9 t 1"
  • g2:{4,7,8}因为"4 t 7"和"7 t 8"

我需要通过"纯粹的标准SQL"生成新的表或视图:

  table T2
  ID1 | ID2 | LABEL 
  1   | 2   | 1
  1   | 5   | 1
  4   | 7   | 2
  7   | 8   | 2
  9   | 1   | 1
Run Code Online (Sandbox Code Playgroud)

PS -1:我们可以列出"传递组" …

sql algorithm postgresql

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

字符串损坏或preg_match错误?

NO-BREAK SPACE和许多其他UTF-8符号 需要2个字节才能表示 ; 因此,在UTF8字符串的假设上下文中,非ASCII(> 127)的隔离(非xC2前面)字节是一个不可识别的字符......好吧,它只是一个布局问题(!),但它破坏了整个字符串?

如何避免这种"非预期的行为"?(它出现在某些功能中,而不是在其他功能中).

示例(仅生成非预期行为preg_match):

  header("Content-Type: text/plain; charset=utf-8"); // same if text/html
  //PHP Version 5.5.4-1+debphp.org~precise+1
  //using a .php file enconded as UTF8.

  $s = "THE UTF-8 NO-BREAK\xA0SPACE"; // a non-ASCII byte
  preg_match_all('/[-\'\p{L}]+/u',$s,$m);
  var_dump($m);            // empty! (corrupted)
  $m=str_word_count($s,1);
  var_dump($m);            // ok

  $s = "THE UTF-8 NO-BREAK\xC2\xA0SPACE";  // utf8-encoded nbsp
  preg_match_all('/[-\'\p{L}]+/u',$s,$m);
  var_dump($m);            // ok!
  $m=str_word_count($s,1);
  var_dump($m);            // ok
Run Code Online (Sandbox Code Playgroud)

php utf-8

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

如何在清除后安装npm

由于我需要NodeJS的更新版本,我首先删除旧版本...

 apt-get remove --purge nodejs
 apt-get remove --purge node
 apt-get autoremove
Run Code Online (Sandbox Code Playgroud)

... 安装最后一个版本的NodeJS后,我运行了npm安装程序,

 node --version  # now is ok!
 sudo apt-get install npm  # ERROR!!!!
Run Code Online (Sandbox Code Playgroud)

那么,如何在此上下文中安装npm(在此清除过程之后)

编辑:

PS:正如我通过上面的链接和上面的内联评论所示,nodejs --version可以,很好,没问题.这个问题是关于npmapt-get......现在我看到答案的一部分就在这里.


错误消息,与此类似问题相同

The following packages have unmet dependencies:
 npm : Depends: nodejs but it is not going to be installed
       Depends: node-abbrev (>= 1.0.4) 
       Depends: nodejs-dev
       ...
       Depends: ... but it is not going to …
Run Code Online (Sandbox Code Playgroud)

ubuntu apt-get npm

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

MADlib apt安装,怎么样?

MADlib是PostgreSQL中最完整,最高效(更快的功能)和可靠的数学库... 官方下载 没有关于Debian或UBUNTU"即插即用安装"的线索.

检查其他字体,最好(最简单)是2013年的apt-get它的旧指令.

...还有一些2014年的丢失脚本 ...评论说"可以下载.rpm软件包并安装在Ubuntu中只需将软件包转换为.deb使用Alien命令即可 ".


问题:安装MADLib的安全且最简单的方法是什么?
今天(2017年)在UBUNTU 16 LTS和PostgreSQL v9.6.


注意和次要问题:Debian stableUBUNTU LTS是最受欢迎的Web服务器Linux发行版,因此.deb最重要的发行形式......为什么MADlab维护者拒绝看到它?为什么不欢迎.deb用户?
有一些技术或许可证问题apt或转换.deb


编辑

我有两种类型的SQL服务器,如上所述的v9.6,但最重要的是PostgreSQL v9.5.X(对不起,我们想在所有服务器中使用v9.6).

PostgreSQL 9.5.X在UBUNTU 16 LTS(xenial)中的情况

  • psql --version并进入它,select version(); 显示v9.5.6.

  • 命令pgxnclient install madlib显示

    You need to install postgresql-server-dev-X.Y for building 
    a server-side extension or libpq-dev for building a client-side application.
    ERROR: command …

postgresql installation shared-libraries

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

如何将JSON数组转换为文本数组?

此解决方法不起作用

CREATE FUNCTION json_array_castext(json) RETURNS text[] AS $f$
  SELECT array_agg(x::text) FROM json_array_elements($1) t(x);
$f$ LANGUAGE sql IMMUTABLE;

-- Problem:
SELECT 'hello'='hello';  -- true...
SELECT  (json_array_castext('["hello","world"]'))[1] = 'hello'; -- false!
Run Code Online (Sandbox Code Playgroud)

那么,如何获取文本的真实数组?

PS:使用所谓的“头等公民” JSONb,同样的问题。


编辑:@OtoShavadze好的答案(注释已解决!)之后,PostgreSQL开发人员清单为什么x::text进行强制转换(使用第9.5.6页),为什么它不生成警告或错误?

arrays postgresql json

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

如何计算文本的真实SHA1?

正如我的上一个问题(请参阅此处的详细信息),我正在使用

SELECT encode(digest(x::text::bytea, 'sha1'), 'hex') FROM xtmp;
Run Code Online (Sandbox Code Playgroud)

未解决,与原始哈希值不同...也许是带有符号::text的强制内部表示\n,因此解决方案将直接转换为bytea,但这是无效的转换。

其他解决方法也不是解决方案,

SELECT encode(digest( replace(x::text,'\n',E'\n')::bytea, 'sha1' ), 'hex') 
FROM xtmp
Run Code Online (Sandbox Code Playgroud)

...我尝试CREATE TABLE btmp (x bytea)COPY btmp FROM '/tmp/test.xml' ( FORMAT binary )但出现错误(“未知的复制文件签名”)。

postgresql digest

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

BigInt 的优化整数对数 base2

这是计算整数 log2(n) 的朴素算法,

  function ilog2(n) {  // n is a positive non-zero BigInt
     const C1 = BigInt(1)
     const C2 = BigInt(2)
     for(var count=0; n>C1; count++)  n = n/C2
     return count
  } // example ilog2(16n)==4
Run Code Online (Sandbox Code Playgroud)

我正在测试优化(请参见下面的示例),但它们不是“用于 log2”,正如这里评论的

有什么更好的使用WebAssembly吗?

PS:如果不可能有一个通用的解决方案,为了解决我的问题,我可以使用像ilog2_64bits(n),WebAssembly 截断或忽略输入 BigInt 的一些位的函数 。


非 WebAssembly

在纯 Javascript 中没有那么优化的示例(理想的是 WebAssembly!)......尝试改编BigInteger.js的 integerLogarithm() :

  function ilog2_pe(value, base=2n) {
      // example: ilog2_pe(255n) returns { p: 128n, e: 7n }
      if (base  <= value) {
          let …
Run Code Online (Sandbox Code Playgroud)

javascript logarithm

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

需要在子图选择上显示X轴标签

c3js.org/samples/options_subchart显示问题:在X-规模没有任何标签由subchart选择的窗口导航时。

在此动态窗口视图中如何添加X轴标签?


笔记

这是未选择窗口的图表,

在此处输入图片说明

这是带有选定窗口的图表:

在此处输入图片说明

看到? 没有x轴标签,即使每个点都存在(在这种情况下为另一天)。


使用@schustischuster的示例进行编辑(并提供了更多数据) http://jsfiddle.net/xodyq92n/

在此处输入图片说明

 // more x-axis data to show the problem
 ['x', '2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
       '2013-01-05', '2013-01-06', '2013-01-07', '2013-01-08',
       '2013-01-09', '2013-01-10', '2013-01-11', '2013-01-12',
       '2013-01-13'
 ]
Run Code Online (Sandbox Code Playgroud)

注意@buræquete线索culling: false和子图控制画笔之后。我的现实生活数据有x轴约600个项目,因此不剔除会造成很大的模糊:

在此处输入图片说明

然后,该问题可以概括为“中间剔除”的需求

javascript d3.js c3.js

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

PHP没有用于XML安全实体解码的功能?没有一些xml_entity_decode?

问题:我需要一个UTF8“完全编码”的XML文件。也就是说,没有实体代表符号,所有由UTF8包围的符号,只有3个保留了XML的符号“&”(amp),“ <”(lt)和“>”(gt)。而且,我需要一个快速执行的内置函数:将实体转换为真正的UTF8字符(而不破坏XML)。
  PS:这是一个“现实世界的问题”(!);例如,在PMC / journals中,有280万条科学论文,带有特殊的XML DTD(也称为JATS格式)...要处理为“常规XML-UTF8-文本”,我们需要从数字实体更改为UTF8字符

尝试的解决方案:此任务的自然功能是html_entity_decode,但它破坏了XML代码(!),从而转换了保留的3个XML保留的符号。

说明问题

假设

  $xmlFrag ='<p>Hello world! &#160;&#160; Let A&lt;B and A=&#x222C;dxdy</p>';
Run Code Online (Sandbox Code Playgroud)

必须将实体160(nbsp)和x222C(双整数)转换为UTF8,而XML保留的则lt不是。XML文本将(转换后),

$ xmlFrag =' <p>世界您好!令A &lt;B和A =∬dxdy </p>';

文本“ A <B”需要保留XML的字符,因此必须保持为A&lt;B


沮丧的解决方案

我尝试html_entity_decode用于(直接!)解决问题。因此,我将PHP更新到v5.5,以尝试使用该ENT_XML1选项,

  $s = html_entity_decode($xmlFrag, ENT_XML1, 'UTF-8'); // not working
                                                        // as I expected
Run Code Online (Sandbox Code Playgroud)

也许另一个问题是:“为什么没有其他选择可以实现我所期望的?” -这对其他许多XML应用程序(!)都很重要,不仅对我而言。


我不需要变通办法作为答案...好的,我展示了我的丑陋功能,也许它可以帮助您理解问题,

  function xml_entity_decode($s) {
    // here an illustration …
Run Code Online (Sandbox Code Playgroud)

php xml entity converter

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