小编Pav*_* V.的帖子

如何确定序列是否在此会话中初始化?

我需要读取函数中序列的当前值.但是,在每个会话中我第一次尝试使用currval(),我得到以下错误:

currval of sequence "foo_seq" is not yet defined in this session
Run Code Online (Sandbox Code Playgroud)

提示那些可能通过Google搜索此错误找到此问题的人:您需要通过nextval()或setval()初始化每个会话的序列.

我可以使用类似lastval()甚至setval('your_table_id_seq', (SELECT MAX(id) FROM your_table));相反的东西,但这似乎要么容易出现间隙,要么比简单慢currval().我的目标是避免间隙和不一致(我知道一些值将手动添加),因此在逻辑处理它们之前使用nextval()并不适合我的目的.我还需要这个来初始化会话的序列,但我更喜欢这样做:

--start of the function here
IF is_not_initialized THEN
  SELECT setval('foo_seq', (SELECT MAX(id) FROM bar_table)) INTO _current;
ELSE
  SELECT currval('foo_seq') INTO _current;
END IF; 
--some magic with the _current variable and nextvalue() on the right position
Run Code Online (Sandbox Code Playgroud)

关键是我不知道"is_not_initialized"是什么样子,以及它是否可能.有没有任何功能或其他技巧呢?

编辑:实际上,我的计划是让每一组客户在正确的序列,完全没有序列,以及我现在要求的奇怪的"类似序列"之间进行选择.即使客户想要这样一个奇怪的序列,它也只能用于需要它的列 - 通常是因为有一些模拟数据,我们需要将它们的密钥(通常几乎无间隙的序列)存储到DB中以便向后兼容.

无论如何,你是对的,这不是正确的解决方案,并且在这些情况下没有顺序可能比这种凌乱的解决方案更好,所以我会再次考虑(并与客户讨论)是否真的需要它.

postgresql session sequence

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

如何在 pl/pgsql 中获取 foreach 中的当前键?

我迭代一个数组,并对数组值及其键执行一些操作。从PostgreSQL 9.1开始有了foreach循环,所以数组值没有问题,但是有什么优雅的方法来获取key吗?我发现的唯一解决方案是为此维护额外的变量:

CREATE OR REPLACE FUNCTION foobar( bar integer[] ) RETURNS integer AS $$
DECLARE
  foo integer;
  barkey integer;
BEGIN
  barkey := 1;
  FOREACH foo IN ARRAY bar LOOP
    -- do some stuff using foo and barkey
    barkey := barkey + 1;
  END LOOP;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)

这是最好的解决方案,还是有更优雅的解决方案?

arrays postgresql foreach loops plpgsql

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

如何将 NEW/OLD 传递给 PostgreSQL 中触发器函数调用的过程?

假设我有一个触发器函数,但它的代码非常复杂,因此将其拆分为更多过程会很方便。我想在所有变量中使用 NEW (或 OLD 对于 UPDATE/DELETE 触发器)变量进行操作。是否有其他方法可以将其作为函数参数发送到从原始触发函数调用的每个过程?

postgresql triggers stored-procedures

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

我是否可以在现有表中添加列而无需在Adminer中键入SQL命令?

我通过Adminer 4.1.0管理我的MySQL数据库.现在我想在现有表中添加一列,除了键入ALTER TABLE"SQL命令"窗口外我没有找到怎么做.缺乏这样的基本功能对我来说并没有瘫痪(我知道SQL足够了),但仍然很烦人.我错过了什么,或者SQL命令窗口真的是将列添加到Adminer中现有表的唯一方法吗?

mysql adminer

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

如何将元组元组转换为列表列表?

我想将元组的元组转换为列表列表.

我不想把它弄平,不像这些 问题,而且我不想把它变成像这个问题那样的numpy数组.

到目前为止,我唯一的想法是用for循环迭代元组并复制值,但必须有更清洁和更pythonic的东西.

python tuples list

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

添加外键时,"REFERENCES"附近出现错误#1064

我在尝试创建外键时不断收到错误1064:

ALTER TABLE `zajimavost`
    ADD CONSTRAINT FK_zaj_bod 
    FOREIGN KEY def_bod
      REFERENCES `bod`(`gid`)
      ON UPDATE CASCADE ON DELETE CASCADE;
Run Code Online (Sandbox Code Playgroud)

它抱怨说:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'REFERENCES `bod`(`gid`)
      ON UPDATE CASCADE ON DELETE CASCADE' at line 4
Run Code Online (Sandbox Code Playgroud)

无论有没有反引号我试过它,问题总是一样的.

我的桌子:

CREATE TABLE `zajimavost` (
 `zaj_id` int(11) NOT NULL,
 `lok_id` int(11) NOT NULL,
 `nazev` varchar(255) COLLATE utf8_czech_ci NOT NULL,
 `kategorie` int(11) NOT …
Run Code Online (Sandbox Code Playgroud)

mysql foreign-keys alter-table

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