$ systemctl restart postgresql-9.2.24
Failed to restart postgresql-9.2.24.service: Unit not found.
如果该列不存在,我想在我的表中创建一个新列。但如果该列存在,我想更新它。
我还没有找到合适的答案。谁能帮我?
在我的 postgresql 9.2 数据库中,我创建了下表:
CREATE TABLE dummy(id SERIAL PRIMARY KEY,text TEXT);
我通过以下方式插入了一条记录:
INSERT INTO dummy(text) VALUES ("Hello Word");
然后我插入了这样的记录:
INSERT INTO dummy(id,text) VALUES (2,'SAYONARA Word');
之后,当我尝试插入这样的记录时:
INSERT INTO dummy(text) VALUES ('<3 Word');
我收到以下错误:
错误:重复键值违反唯一约束“dummy_pkey”详细信息:键 (id)=(2) 已存在。
但是当我重新插入值时:
INSERT INTO dummy(text) VALUES ('<3 Word');
没有错误被抛出。
因此,当我看到 potgresql 通过内部计数器自动增加 id 的值时,无论该值是否成功插入。也发生了错误,因为 postgresql 没有在现有的计数器 id 上“打孔”。
那么我如何告诉 postgresql 是否存在自动增量值只是为了跳到下一个并避免使用现有的自动增量值。(现有的我的意思是已经设置为主键的值)。
使用 postgresql 9.2 版,我正在尝试运行一个查询来选择某些列来构建一个 json 对象。这是我从这个问题中得出的查询:
select
a.id
, json_agg((SELECT x FROM (SELECT b.fieldA) AS x)) AS item
from a join b on a.id = b.foreign_key
limit 10
当我运行它时,我得到一个很难解析的错误。
错误:函数 json_agg(record) 不存在 提示:没有函数匹配给定的名称和参数类型。您可能需要添加显式类型转换。
, json_agg((SELECT x FROM (SELECT b.fieldA) AS x)) 作为项目
似乎抱怨是 json_agg 没有收到正确的输入,但我不明白为什么。
当我在没有 的情况下运行相同的查询时json_agg
,即仅使用子选择表达式时,我得到一个带有b.fieldA
内括号值的列。我不确定括号在数据类型方面表示什么,但我可以看到可能json_agg
只是获取值,因此不知道如何提供属性名称。
谁能解释我哪里出错了?
app_auth.User
我正在尝试转储通过执行以下命令命名的区分大小写的表
pg_dump --schema=app_auth -t '"User"' -U em3local -h 127.0.0.1 -Fc -a -f <path> <dbname>
但我返回的是:
pg_dump: No matching tables were found
如果我实际查询我的数据库,则该表确实存在:
<dbname>=# SELECT * FROM app_auth."User";
username | email | password | name | surname | lang | resettoken | userinfo_id | state | tos_accepted | id
----------+-------+----------+------+---------+------+------------+-------------+-------+--------------+----
任何提示?
我需要帮助来创建将生成协议编号的触发器。必须遵循以下顺序:
323926YYYYMMDDXXXXXX
- 323926 = 固定数字
- YYYY = 年
- MM = 月份
- DD = 天
- XXXXXX = 我们必须从 1 自动生成的数字将变为 999999
我的难点在于这个递增的数字在一天的过程之后应该返回到000001,总结一下:每天第一个生成的协议必须以数字000001开头
我的代码:
CREATE OR REPLACE FUNCTION crm.novo_ticket()
RETURNS trigger AS
$BODY$
BEGIN
NEW.protocolo = '323926' || TO_CHAR(NEW.data_cadastro,'YYYYMMDD') || '000001';
RETURN NEW;
END $BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
挑出来
SELECT
lpad(CAST((SELECT COUNT(1) + 1 INTO quant
FROM
crm.ticket a
WHERE
a.data_cadastro::DATE = CURRENT_TIMESTAMP(0)::DATE;)as VARCHAR),6,'0');
我的环境:
# cat /etc/redhat-release
Red Hat Enterprise Linux Server release 7.3 (Maipo)
# rpm -q postgresql
postgresql-9.2.18-1.el7.x86_64
#
我使用以下Streaming Replication - PostgreSQL wiki来设置主/从之间的复制,现在过了一段时间我最终得到以下结果:
-bash-4.2$ du -h ~/archive/
19G /var/lib/pgsql/archive/
-bash-4.2$ ls -la ~/archive/ | head
total 19169360
drwxr-xr-x. 2 postgres postgres 61440 Jun 6 12:10 .
drwx------. 11 postgres postgres 4096 Jun 6 11:21 ..
-rw-------. 1 postgres postgres 16777216 Feb 6 10:19 0000000100000008000000AE
-rw-------. 1 postgres postgres 16777216 Feb 14 20:30 0000000100000008000000AF
-rw-------. 1 postgres postgres 16777216 Feb 14 20:30 0000000100000008000000B0
-rw-------. 1 postgres postgres 16777216 Feb 14 20:30 0000000100000008000000B1
-rw-------. 1 postgres postgres 16777216 Feb 14 20:30 0000000100000008000000B2
-rw-------. 1 postgres postgres 16777216 Feb 14 20:30 0000000100000008000000B3
-rw-------. 1 postgres postgres 16777216 Feb 6 10:33 0000000100000008000000B4
-bash-4.2$
我应该设置一个 cron 作业来杀死旧档案吗?或者有这样做的postgres方式?
我需要这个查询的帮助我做了一个返回我一个 id 的插入,然后我需要运行一个返回该 id 的更新......
WITH disca AS (
INSERT INTO callcenter.campanha_cliente_chamada
( id_campanha_cliente,
cod_contato,
telefone,
telefone_discar,
id_status_chamada,
tentativa,
monitorando,
acionar_proxima,
datahora_update,
datahora_registro
) VALUES (154424,1824704,'(11) 2524-9636','1125249636',1,1,0,0,CURRENT_TIMESTAMP::timestamp(0),CURRENT_TIMESTAMP::timestamp(0))
RETURNING id_campanha_cliente_chamada
) UPDATE callcenter.campanha_cliente_chamada
SET accountcode = ('D-'||id_campanha_cliente_chamada||'-'||tentativa)::varchar(128)
WHERE id_campanha_cliente_chamada = disca;
我有一个视图,它从 TableA 中选择数据(TableA 将在我们全部迁移后停用)。我们正在创建一个名为 的新表,TABLEC
将来我们会将所有数据从 TableA 迁移到 TableC。
- 我们这样做的原因是因为
tableA
它非常陈旧且设计糟糕。 - 目前,
tableA
仅用于旧记录。所有要插入的新数据tableA
都已经tableC
通过应用程序传输。 - 我无法更改任何表的架构。
- 视图可以更改为 use
CTE
,如果它至少和现在一样快。 path
不是真正的路径,而是一个正则表达式。它会是这样的:/file/account/[0-9]+
<-- 在此之后有一些可能性,它可以是几个不同的词(例如:attach/assigned/等)。
虽然我们不会将所有数据从 迁移tableA
到tableC
,但我们需要视图与两个表兼容,因为已经有新数据要迁移到tableC
。
看法:
CREATE OR REPLACE VIEW path_view AS
SELECT split_part(n1.path::text, '/'::text, 18)::integer AS id,
split_part(n1.path::text, '/'::text, 14)::integer AS clientid,
lower(n1.md5::text)::character(32) AS md5, 0 AS cont,
'00000000-1000-1000-3000-600000000000'::uuid AS guid,
n1.bytes AS byte_count,
n1.last_modified AS last_modified
FROM tablea n1
JOIN tableb s2
ON s2.path = n1.path;
--tablea
几乎tableb
相同;如前所述,它设计得很糟糕。
我需要视图来做:
- 查看请求的数据是否在新表中
tableC
- 如果不是,则转到
tableA
并获取数据
问题:
我怎样才能做到这一点?我试过了,UNION ALL
但速度很慢。
\d tableC
:
Table "public.tablec"
--------------------+-----------------------------+-------------------------------------------------------------------
id | integer | not null default nextval('tablec_id_seq'::regclass)
e_type | integer | not null
e_id | bigint |
e_variation | character varying(16) | not null
path | character varying(255) | not null
name | character varying(255) | not null
size | bigint | not null
md5 | md5_hash | not null
modified_date | timestamp without time zone | default statement_timestamp()
created_date | timestamp without time zone | default statement_timestamp()
clientid | bigint | not null
f_id | bigint |
我需要一个触发器的帮助,这个触发器我需要传递一个来自 asterisk.queue 表中队列列的值。
CREATE TRIGGER gerarconf
AFTER INSERT OR UPDATE
ON asterisk.fila
FOR EACH ROW
EXECUTE PROCEDURE asterisk.registra_gerar_conf_fila('FILA','XXXXX');
代替 XXXX 我需要传递来自 asterisk.queue 表的插入或更新的队列列的值