1

J'ai un tas de tables que je suis itérer, et certains d'entre eux n'ont pas de lignes (c'est-à-dire juste un tableau d'en-têtes sans données). ex: SELECT my_column FROM my_schema.my_table LIMIT 1 renvoie un jeu de résultats vide.Quel est le moyen le plus rapide de voir si une table n'a pas de lignes dans PostgreSQL?

Quel est le moyen le plus rapide pour vérifier qu'une table est l'une de ces tables sans lignes?

J'ai considéré: SELECT my_column FROM my_schema.my_table LIMIT 1 ou SELECT * FROM my_schema.my_table LIMIT 1 suivi d'un if result is None (je travaille en Python). Y a-t-il un moyen plus rapide de vérifier?

Répondre

1
select exists (select * from myTab); 

ou

select 1 where exists (select * from myTab) 

ou même

SELECT reltuples FROM pg_class WHERE oid = 'schema_name.table_name'::regclass; 

Le 3ème exemple utilise l'estimateur pour estimer les lignes, qui peuvent ne pas être précis à 100%, mais peut-être un peu plus vite.

-3
SELECT COUNT(*) FROM table_name limit 1; 

Essayez ce code.

+0

Selon la base de données, qui pourrait être très coûteuse si la table * n'est pas * vide. – chepner

+0

édité devrait être bon maintenant. – CanyoucSharp

+2

Non, ce n'est pas le cas. Vous limitez les lignes de résultat à un, mais ce n'est qu'une ligne de toute façon. (LIMIT est exécuté après COUNT). –

2

Ce n'est pas plus vite que votre solution, mais retourne une regadless booléenne:

select exists (select 1 from mytable)