Reinicar sequence no PostgreSQL cada ano(RESOLVIDO)

Olá, alguém saberia como posso fazer uma sequence no PostgreSQL que reinicie a cada ano?
A sequence seria composta de 6 dígitos mais o ano
Ex: 000001/2022, 000002/2022 no dia 01/01/2023 ela reiniciaria para 000001/2023 …

Basicamente vc pode adaptar um script em php ou em bash
e colocar no cron ( LINUX) para rodar todos os dias as 00:00

O Script deve conter o seguinte comando:
#defina a variável $ndata incluindo o ano atual
$ndata = date(“Y”) . ‘0001’;
#resultado teste
echo "ALTER SEQUENCE public.tabela_id_seq START " . $ndata . " RESTART " . $ndata;

#aplicando no sc numa aplicação blank ou controle no evento OnLoad ou OnAppInit

$ndata = date("Y") .  '0001';
$sql = "ALTER SEQUENCE public.tabela_id_seq START " . $ndata . " RESTART " . $ndata;
sc_exec_sql($sql);

#No cron do Linux executar todo dia as 00:00
0 0 * * * php -f /home/usuario/control_app/index.php >/dev/null 2>&1

A sequencia gerada será no formato 20230001, 20230002…
Daí é só adaptar em outras aplicações pegando o campo da tabela que seja auto incremento via sequencia em php:
$sequencia final = substr($ndata,4, 4) ."/".substr($ndata,0, 4);
Gerando: 0001/2023

:white_check_mark:Lembrando que a data/hora do servidor deve ser a mesma do seu fuso horário ou deve ajustar no cron a diferença.

Obrigado Kleber
Deixa ver se entendi
Primeiro eu crio uma sequence no PostgreSQL
CREATE SEQUENCE public.tabela_id_seq;

Numa blank
$ndata = date(“Y”) . ‘0001’;
$sql = "ALTER SEQUENCE public.tabela_id_seq START " . $ndata . " RESTART " . $ndata;
sc_exec_sql($sql);
$sequencia final = substr($ndata,4, 4) ."/".substr($ndata,0, 4);

#No cron do Linux executar todo dia 1 de Jan as 01:00
0 1 1 1 * php -f /home/usuario/control_app/index.php >/dev/null 2>&1

2 dúvidas:
-o que seria >/dev/null 2>&1`

  • como faço para chamar o $sequencia final no meu form quando vou criar um registro

Dúvidas:
:point_right: - o que seria >/dev/null 2>&1`
R: É um direcionamento da saída do comando anterior para um arquivo nulo no linux para evitar que fique na memória.

:point_right: - Como faço para chamar o $sequencia final no meu form quando vou criar um registro
R: Quando se cria uma tabela no postgresql, o campo id, por exemplo, pode ser incrementado automaticamente, para isso, ao criar a tabela use o comando:
CREATE TABLE Funcionarios ( id SERIAL PRIMARY KEY, nome VARCHAR(60), cargo VARCHAR(60) );
Automaticamente o postgres já cria a sequencia para a coluna id
CREATE SEQUENCE public.funcionarios_id_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 2147483647 START 1 CACHE 1 NO CYCLE;
E adiciona no campo funcionarios.id o comando
nextval('funcionarios_id_seq'::regclass)

:white_check_mark: Daí no SC você pega esse campo id com um sc_select ou sc_lookup após inserir cada registro em qualquer aplicação E trata ele como quiser ex: substr()…

Lembrando que o primeiro tópico vc usa o script apenas para ajustar a sequencia a cada ano/mes/dia.

1 Curtida