我需要在我的数据库中有一个表,其中包含一个列,这是一个uuid对象数组(uuid []类型)
但是当我尝试使用名为pg-promise的nodejs库插入它时它失败了
我收到以下错误消息告诉我,我需要重写演员或表达式
{"name":"error","length":206,"severity":"ERROR","code":"42804","hint":"You will need to rewrite or cast the expression.","position":"230","file":"src\\backend\\parse
r\\parse_target.c","line":"510","routine":"transformAssignedExpr"}
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为当我尝试在同一个精确的表上输入单个uuid到另一个列时我绝对没有问题(意思是,我没有代表uuid的问题,顺便说一下我从另一个lib创建它们作为文本变量,但是他们是普通的旧文本变量)
当我尝试将TEXT对象数组输入到同一列时(如果我将表更改为具有TEXT []列而不是UUID []列,我也没有问题)
这是我的代码
////////////////
var Promise = require('bluebird');
var pgpLib = require('pg-promise');
var pgp = pgpLib();
var cn = confUtil.pgDbConnectionConfiguration();
var db = pgp(cn);
//////////////////
var newEntity={};
newEntity.hash = uuid.v4();
newEntity.location = {X:2394876,Y:2342342};
newEntity.mother = uuid.v4();
newEntity.timestamp = Date.now();
newEntity.content = {content:"blah"};
newEntity.sobList = [uuid.v4(),uuid.v4(),uuid.v4()];
addEntity (newEntity);
////////////////////
function addEntity(newEntity) {
var insertEntityQueryPrefix='insert into entities (';
var insertEntityQueryMiddle=') values (';
var insertEntityQueryPostfix="";
var insertEntityQuery=""; …
Run Code Online (Sandbox Code Playgroud) 我开始阅读一些Haskell的文档,并且有一个我根本不理解的基本概念.我也在其他地方读过它,但我想一劳永逸地理解它.
在许多讨论功能编程的地方,我一直在阅读如果您使用的功能是纯粹的(没有副作用,并且在每次调用时对相同的输入给出相同的响应)那么您可以切换它们被调用时的顺序.组成它们,保证无论顺序如何,这个组合调用的输出都将保持不变.
例如,这是来自Haskell Wiki的条目:
Haskell是一种纯语言,这意味着任何函数调用的结果完全由其参数决定.像C中的rand()或getchar()这样的伪函数在每次调用时都会返回不同的结果,这些函数根本不可能在Haskell中编写.而且,Haskell函数不能有副作用,这意味着它们不能对"真实世界"进行任何更改,例如更改文件,写入屏幕,打印,通过网络发送数据等.这两个限制一起意味着任何函数调用都可以被具有相同参数的先前调用的结果替换,并且语言保证所有这些重新排列不会改变程序结果!
但是当我摆弄这个想法时,我可以很快想到与上述陈述相矛盾的例子.例如,假设我有两个函数(我将使用伪代码而不是Haskell):
x(a)->a+3
y(a)->a*3
z(a)->x(y(a))
w(a)->y(x(a))
Run Code Online (Sandbox Code Playgroud)
现在,如果我们执行z
和w
,我们得到:
z(5) //gives 3*5+3=18
w(5) //gives (5+3)*3=24
Run Code Online (Sandbox Code Playgroud)
既然如此,我想我误解了他们所说的承诺保证.任何人都可以向我解释一下吗?