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
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:
- 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.
- 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)
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.